swift
Loading...
Searching...
No Matches
artifactlist.cpp
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#include "misc/stringutils.h"
7
8using namespace swift::misc::network;
9
10SWIFT_DEFINE_SEQUENCE_MIXINS(swift::misc::db, CArtifact, CArtifactList)
11
12namespace swift::misc::db
13{
15
17 {
18 CPlatformSet platforms;
19 for (const CArtifact &artifact : *this)
20 {
21 platforms.insert(artifact.getPlatform());
22 }
23 return platforms;
24 }
25
30
32 {
33 for (const CArtifact &artifact : *this)
34 {
35 if (artifact.matchesName(name, cs))
36 {
37 return artifact;
38 }
39 }
40 return {};
41 }
42
44 {
45 CArtifactList artifacts;
46 for (const CArtifact &artifact : *this)
47 {
48 if (artifact.matchesAnyPlatform(platform))
49 {
50 artifacts.push_back(artifact);
51 }
52 }
53 return artifacts;
54 }
55
57 {
58 return this->findBy(&CArtifact::getType, type);
59 }
60
65
67 bool findMoreStableDistribution) const
68 {
70 for (const CArtifact &artifact : *this)
71 {
72 if (!artifact.isWithDistribution(distribution, findMoreStableDistribution))
73 {
74 continue;
75 }
76 al.push_back(artifact);
77 }
78 return al;
79 }
80
82 {
84 for (const CArtifact &artifact : *this)
85 {
86 if (!artifact.hasUnrestrictedDistribution())
87 {
88 continue;
89 }
90 al.push_back(artifact);
91 }
92 return al;
93 }
94
96 const CPlatform &platform,
97 bool findMoreStableDistributions) const
98 {
99 return this->findByMatchingPlatform(platform).findByDistribution(distribution, findMoreStableDistributions);
100 }
101
106
108 {
110 return this->findFirstByVersionOrDefault(v);
111 }
112
114 {
116 for (const CArtifact &artifact : *this)
117 {
118 for (const CDistribution &d : artifact.getDistributions())
119 {
120 // add only once
121 if (dl.contains(d))
122 {
123 continue;
124 }
125 dl.push_back(d);
126 }
127 }
128 return dl;
129 }
130
132 {
133 this->sort([order](const CArtifact &a, const CArtifact &b) {
134 const QVersionNumber av = a.getQVersion();
135 const QVersionNumber bv = b.getQVersion();
136 return order == Qt::AscendingOrder ? av < bv : bv < av;
137 });
138 }
139
141 {
142 if (this->size() < 2)
143 {
144 return this->frontOrDefault();
145 }
146 CArtifactList copy(*this);
147 copy.sortByVersion();
148 return copy.back();
149 }
150
152 {
153 CRemoteFileList rfs;
154 for (const CArtifact &artifact : *this)
155 {
156 const CRemoteFile rf = artifact.asRemoteFile();
157 if (rf.hasName())
158 {
159 rfs.push_back(rf);
160 }
161 }
162 return rfs;
163 }
164
166
168
170 {
171 CArtifactList copy(*this);
173 QStringList names;
174 for (const CArtifact &artifact : std::as_const(copy))
175 {
176 if (artifact.hasName())
177 {
178 names.push_back(artifact.getName());
179 }
180 }
181 return names;
182 }
183
185 {
186 CArtifactList copy(*this);
188 QStringList versions;
189 for (const CArtifact &artifact : std::as_const(copy))
190 {
191 if (artifact.hasVersion())
192 {
193 versions.push_back(artifact.getVersion());
194 }
195 }
196 return versions;
197 }
198
200 {
201 qint64 s = 0;
202 for (const CArtifact &a : *this)
203 {
204 s += a.getFileSize();
205 }
206 return s;
207 }
208
213
215 {
216 CArtifactList artifacts;
217 for (const QJsonValue &value : array)
218 {
219 const CArtifact artifact(CArtifact::fromDatabaseJson(value.toObject()));
220 artifacts.push_back(artifact);
221 }
222 return artifacts;
223 }
224
226 {
227 if (json.isEmpty())
228 {
229 return {};
230 }
232 }
233} // namespace swift::misc::db
iterator insert(const_iterator hint, const T &value)
For compatibility with std::inserter.
Definition collection.h:205
static QString humanReadableFileSize(qint64 size)
Human readable (GB, MB, ..) file size.
Platform (i.e.
Definition platform.h:24
Platform getPlatform() const
Platform.
Definition platform.h:58
static const CPlatform & currentPlatform()
Current platform.
Definition platform.cpp:173
Value object for a set of platforms.
Definition platformset.h:22
auto findFirstByOrDefault(Predicate p, const Value &def) const
Definition range.h:70
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
Definition range.h:109
const_reference frontOrDefault() const
Definition sequence.h:239
CSequence findBy(Predicate p) const
Definition sequence.h:407
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition sequence.h:308
reference back()
Access the last element.
Definition sequence.h:249
Artifacts ("our software" products).
Definition artifact.h:23
bool hasUnrestrictedDistribution() const
Has unrestricted distribution.
Definition artifact.cpp:53
bool isWithDistribution(const CDistribution &distribution, bool acceptMoreStableDistributions) const
Is distributed with given distribution?
Definition artifact.cpp:55
bool matchesAnyPlatform(const CPlatform &platform) const
Matches any platform.
Definition artifact.cpp:51
network::CRemoteFile asRemoteFile() const
Turn into remote file.
Definition artifact.cpp:67
const CPlatform & getPlatform() const
OS.
Definition artifact.h:89
int getFileSize() const
File size.
Definition artifact.h:77
const CDistributionList & getDistributions() const
Related distributions.
Definition artifact.h:98
static CArtifact fromDatabaseJson(const QJsonObject &json, const QString &prefix={})
Object from database JSON format.
Definition artifact.cpp:163
bool matchesName(const QString &name, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Matching name?
Definition artifact.cpp:31
ArtifactType getType() const
Get type.
Definition artifact.h:68
void sortByVersion(Qt::SortOrder order=Qt::AscendingOrder)
Sort by version.
qint64 getTotalFileSize() const
Size of all artifacts.
CArtifact findFirstByMatchingNameOrDefault(const QString &name, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
FInd first by name.
CSequence()=default
Default constructor.
CArtifactList findByType(const CArtifact::ArtifactType type) const
Find by type.
CArtifact findFirstByMatchingPlatformOrDefault(const CPlatform &platform) const
Find first by platform.
CPlatformSet getPlatforms() const
All platforms for all channels.
CArtifact findFirstByVersionOrDefault(const QVersionNumber &version) const
Find by version.
CArtifactList findByDistribution(const CDistribution &distribution, bool findMoreStableDistribution=false) const
Find by distribution.
CArtifactList()=default
Empty constructor.
CArtifactList findByDistributionAndPlatform(const CDistribution &distribution, const CPlatform &platform, bool findMoreStableDistributions=false) const
Find by distribution and platform.
QVersionNumber getLatestQVersion() const
Latest version.
CArtifact getLatestArtifactOrDefault() const
Latest (newest) artifact.
CArtifactList findMatchingForCurrentPlatform() const
Find for my platform.
QStringList getSortedNames() const
All unique names.
CDistributionList getDistributions() const
All distributions related to these artifacts.
CArtifactList findWithUnrestrictedDistributions() const
Find artifacts with public (unrestricted) distributions.
QStringList getSortedVersions() const
All unique versions.
static CArtifactList fromDatabaseJson(const QJsonArray &array)
From database JSON by array.
network::CRemoteFileList asRemoteFiles() const
As remote files.
QString getLatestVersion() const
Latest version.
QString getTotalFileSizeHumanReadable() const
Size of all artifacts.
CArtifactList findByMatchingPlatform(const CPlatform &platform) const
Find by platform.
Distributions for channel.
Multiple distributions for different channels:
const QString & getVersion() const
Version info.
Definition datastore.h:48
QVersionNumber getQVersion() const
Version as QVersion.
Definition datastore.cpp:16
bool hasName() const
Has name?
Definition remotefile.h:58
Value object encapsulating a list of remote files.
QJsonArray jsonArrayFromString(const QString &json)
JSON Array from string.
Definition json.cpp:443
void push_back(QList< T >::parameter_type value)
CaseSensitivity
SortOrder
QVersionNumber fromString(QAnyStringView string, qsizetype *suffixIndex)
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
Definition sequence.h:63