7 #include <QJsonDocument>
9 #include <QStringBuilder>
14 using namespace swift::config;
18 namespace swift::misc::db
21 : m_artifactsPilotClient(artifacts.findByType(
CArtifact::PilotClientInstaller)),
22 m_artifactsXSwiftBus(artifacts.findByType(
CArtifact::
XSwiftBus)), m_distributions(distributions)
71 if (myVersion > latestVersion)
123 case IndexArtifactsPilotClient: m_artifactsPilotClient = variant.
value<
CArtifactList>();
break;
124 case IndexArtifactsXSwiftBus: m_artifactsXSwiftBus = variant.
value<
CArtifactList>();
break;
137 Q_ASSERT_X(jsonDistributions.
size() == distributions.
size(), Q_FUNC_INFO,
"size mismatch");
138 Q_ASSERT_X(artifacts.
size() == artifacts.
size(), Q_FUNC_INFO,
"size mismatch");
152 const QString url = CBuildConfig::gitHubRepoUrl() + QStringLiteral(
"releases/download");
159 result.m_distributions = { alphaDistribution, betaDistribution };
164 if (version.
isEmpty() || version[0] !=
'v') {
continue; }
174 QString filename = QStringLiteral(
"v%1/%2").
arg(version, name);
178 if (name.
startsWith(QStringLiteral(
"swiftinstaller"))) { type = CArtifact::PilotClientInstaller; }
179 else if (name.
startsWith(QStringLiteral(
"swiftsymbols"))) { type = CArtifact::Symbols; }
180 else if (name.
startsWith(QStringLiteral(
"xswiftbus"))) { type = CArtifact::XSwiftBus; }
189 CArtifact artifact(filename, version, {}, type, size, existing, platform);
190 artifact.
setDistributions({ alpha ? alphaDistribution : betaDistribution });
192 if (type == CArtifact::PilotClientInstaller) { result.m_artifactsPilotClient.
push_back(artifact); }
193 else if (type == CArtifact::XSwiftBus) { result.m_artifactsXSwiftBus.
push_back(artifact); }
Non-owning reference to a CPropertyIndex with a subset of its features.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
size_type size() const
Returns number of elements in the sequence.
void push_back(const T &value)
Appends an element at the end of the sequence.
bool isEmpty() const
Synonym for empty.
Artifacts ("our software" products)
bool isUnknown() const
Unknown.
void setDistributions(const CDistributionList &distributions)
Related distributions.
const CDistributionList & getDistributions() const
Related distributions.
void sortByVersion(Qt::SortOrder order=Qt::AscendingOrder)
Sort by version.
CArtifact findFirstByVersionOrDefault(const QVersionNumber &version) const
Find by version.
QVersionNumber getLatestQVersion() const
Latest version.
CArtifactList findMatchingForCurrentPlatform() const
Find for my platform.
CDistributionList getDistributions() const
All distributions related to these artifacts.
static CArtifactList fromDatabaseJson(const QJsonArray &array)
From database JSON by array.
Distributions for channel.
static const CDistribution & localDeveloperBuild()
Pseudo distribution for local builds.
void setDownloadUrl(const swift::misc::network::CUrl &url)
Set URL, ignored if empty.
Multiple distributions for different channels:
CDistribution getMostStableOrDefault() const
Most stable or default.
void sortByStability(Qt::SortOrder order=Qt::AscendingOrder)
Stability.
CDistribution getLeastStableOrDefault() const
Least stable or default.
static CDistributionList fromDatabaseJson(const QJsonArray &array)
From database JSON by array.
Update info, i.e. artifacts and distributions.
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
bool isEmpty() const
Empty (no data)
const CDistributionList & getDistributions() const
Distributions (all)
CArtifactList getArtifactsXSwiftBusLatestVersionFirst() const
Artifacts (xswiftbus)
QStringList anticipateMyDefaultChannelAndPlatform() const
Default channel, OS.
CDistribution anticipateOwnDistribution() const
Own distribution.
CDistributionList getDistributionsPilotClientForCurrentPlatform() const
Distributions for current platform.
static CUpdateInfo fromDatabaseJson(const QJsonObject &json, const QString &prefix={})
Object from database JSON format.
const CArtifactList & getArtifactsXSwiftBus() const
Artifacts (xswiftbus)
QString convertToQString(bool i18n=false) const
Cast as QString.
CArtifactList getArtifactsXSwiftBusOldestVersionFirst() const
Artifacts (xswiftbus)
CUpdateInfo()
Constructor.
CArtifactList getArtifactsXSwiftBusForCurrentPlatform() const
Artifacts for current platform.
const CArtifactList & getArtifactsPilotClient() const
Artifacts (pilot client)
CArtifactList getArtifactsPilotClientForCurrentPlatform() const
Artifacts for current platform.
ColumnIndex
Properties by index.
static CUpdateInfo fromGitHubReleasesJson(const QByteArray &jsonData)
Object from GitHub Releases REST API JSON format.
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
QString toQString(bool i18n=false) const
Cast as QString.
QJsonObject jsonObjectFromString(const QString &json, bool acceptCacheFormat)
JSON Object from string.
Plugin loaded by X-Plane which publishes a DBus service.
bool is09(const QChar &c)
Is 0-9 char, isDigit allows a bunch of more characters.
bool containsChar(const QString &s, F predicate)
True if any character in the string matches the given predicate.
qsizetype size() const const
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
QJsonValue value(QLatin1StringView key) const const
QJsonArray toArray() const const
QString arg(Args &&... args) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString & remove(QChar ch, Qt::CaseSensitivity cs)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
int toInt(bool *ok, int base) const const
QVariant fromValue(T &&value)
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.