From c6b942dc151a37aaa4595d02666d04185aedb80f Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 29 Jan 2018 07:52:20 +0100 Subject: [PATCH] Fixes an issue reported by @rphohl that XSwiftBus is not found * only download non-restricted versions * utility functions to find non-restricted versions --- src/blackgui/components/installxswiftbuscomponent.cpp | 4 +++- src/blackgui/components/updateinfocomponent.cpp | 3 ++- src/blackmisc/db/artifact.cpp | 6 ++++++ src/blackmisc/db/artifact.h | 3 +++ src/blackmisc/db/artifactlist.cpp | 11 +++++++++++ src/blackmisc/db/artifactlist.h | 3 +++ src/blackmisc/db/distributionlist.cpp | 2 +- 7 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/blackgui/components/installxswiftbuscomponent.cpp b/src/blackgui/components/installxswiftbuscomponent.cpp index f3aac35b5..80d60ee20 100644 --- a/src/blackgui/components/installxswiftbuscomponent.cpp +++ b/src/blackgui/components/installxswiftbuscomponent.cpp @@ -200,7 +200,9 @@ namespace BlackGui { const CUpdateInfo updateInfo = m_updates.get(); if (updateInfo.getArtifactsXSwiftBus().isEmpty()) { return; } - const CArtifactList artifacts = updateInfo.getArtifactsXSwiftBusLatestVersionFirst(); + const CArtifactList artifacts = updateInfo.getArtifactsXSwiftBusLatestVersionFirst().findWithUnrestrictedDistributions(); + if (artifacts.isEmpty()) { return; } + const CRemoteFileList remoteFiles = artifacts.asRemoteFiles(); if (!remoteFiles.isEmpty()) { diff --git a/src/blackgui/components/updateinfocomponent.cpp b/src/blackgui/components/updateinfocomponent.cpp index f54c1fa74..1795a8671 100644 --- a/src/blackgui/components/updateinfocomponent.cpp +++ b/src/blackgui/components/updateinfocomponent.cpp @@ -183,9 +183,10 @@ namespace BlackGui const CDistribution selectedDistribution(this->getSelectedOrDefaultDistribution()); const CPlatform selectedPlatform(this->getSelectedOrDefaultPlatform()); + // for XSwiftBus we only show public (unrestricted) ones, as the follow up dialog will only show unrestricted const CUpdateInfo updateInfo(m_updateInfo.get()); const CArtifactList artifactsPilotClient = updateInfo.getArtifactsPilotClient().findByDistributionAndPlatform(selectedDistribution, selectedPlatform, true); - const CArtifactList artifactsXsb = updateInfo.getArtifactsXSwiftBus().findByDistributionAndPlatform(selectedDistribution, selectedPlatform, true); + const CArtifactList artifactsXsb = updateInfo.getArtifactsXSwiftBus().findWithUnrestrictedDistributions().findByDistributionAndPlatform(selectedDistribution, selectedPlatform, true); const QStringList sortedPilotClientVersions = artifactsPilotClient.getSortedVersions(); ui->cb_ArtifactsPilotClient->clear(); diff --git a/src/blackmisc/db/artifact.cpp b/src/blackmisc/db/artifact.cpp index b3825f023..e60283880 100644 --- a/src/blackmisc/db/artifact.cpp +++ b/src/blackmisc/db/artifact.cpp @@ -56,6 +56,11 @@ namespace BlackMisc return m_platform.matchesAny(platform); } + bool CArtifact::hasUnrestrictedDistribution() const + { + return m_distributions.containsUnrestricted(); + } + bool CArtifact::isWithDistribution(const CDistribution &distribution, bool acceptMoreStableDistributions) const { if (distribution.isEmpty() || !this->hasDistributions()) { return false; } @@ -73,6 +78,7 @@ namespace BlackMisc CRemoteFile rf(this->getName(), this->getFileSize()); const CDistribution d = this->getMostStableDistribution(); const CUrl url = d.getDownloadUrls().getRandomUrl(); + if (url.isEmpty()) { return CRemoteFile(); } rf.setUtcTimestamp(this->getUtcTimestamp()); rf.setUrl(url); rf.setDescription(this->getPlatform().toQString() + " " + d.getChannel()); diff --git a/src/blackmisc/db/artifact.h b/src/blackmisc/db/artifact.h index eb6a25d56..d480a8995 100644 --- a/src/blackmisc/db/artifact.h +++ b/src/blackmisc/db/artifact.h @@ -123,6 +123,9 @@ namespace BlackMisc //! Has distributions? bool hasDistributions() const { return !m_distributions.isEmpty(); } + //! Has unrestricted distribution + bool hasUnrestrictedDistribution() const; + //! Is distributed with given distribution? bool isWithDistribution(const CDistribution &distribution, bool acceptMoreStableDistributions) const; diff --git a/src/blackmisc/db/artifactlist.cpp b/src/blackmisc/db/artifactlist.cpp index 511e73104..87299ff18 100644 --- a/src/blackmisc/db/artifactlist.cpp +++ b/src/blackmisc/db/artifactlist.cpp @@ -77,6 +77,17 @@ namespace BlackMisc return al; } + CArtifactList CArtifactList::findWithUnrestrictedDistributions() const + { + CArtifactList al; + for (const CArtifact &artifact : *this) + { + if (!artifact.hasUnrestrictedDistribution()) { continue; } + al.push_back(artifact); + } + return al; + } + CArtifactList CArtifactList::findByDistributionAndPlatform(const CDistribution &distribution, const CPlatform &platform, bool findMoreStableDistributions) const { return this->findByMatchingPlatform(platform).findByDistribution(distribution, findMoreStableDistributions); diff --git a/src/blackmisc/db/artifactlist.h b/src/blackmisc/db/artifactlist.h index 0bdaf10dc..e91f57a5f 100644 --- a/src/blackmisc/db/artifactlist.h +++ b/src/blackmisc/db/artifactlist.h @@ -64,6 +64,9 @@ namespace BlackMisc //! Find by distribution CArtifactList findByDistribution(const CDistribution &distribution, bool findMoreStableDistribution = false) const; + //! Find artifacts with public (unrestricted) distributions + CArtifactList findWithUnrestrictedDistributions() const; + //! Find by distribution and platform CArtifactList findByDistributionAndPlatform(const CDistribution &distribution, const CPlatform &platform, bool findMoreStableDistributions = false) const; diff --git a/src/blackmisc/db/distributionlist.cpp b/src/blackmisc/db/distributionlist.cpp index 62488b5c5..32520260b 100644 --- a/src/blackmisc/db/distributionlist.cpp +++ b/src/blackmisc/db/distributionlist.cpp @@ -48,7 +48,7 @@ namespace BlackMisc bool CDistributionList::containsUnrestricted() const { - return this->contains(&CDistribution::isRestricted, true); + return this->contains(&CDistribution::isRestricted, false); } bool CDistributionList::containsChannel(const QString &channel) const