diff options
Diffstat (limited to 'src/libs/installer/packagemanagercore.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 68 |
1 files changed, 57 insertions, 11 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 5f7412c54..c512c23b5 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -2185,21 +2185,32 @@ ComponentModel *PackageManagerCore::updaterComponentModel() const */ void PackageManagerCore::listAvailablePackages(const QString ®exp) { + setPackageViewer(); qCDebug(QInstaller::lcInstallerInstallLog) << "Searching packages with regular expression:" << regexp; + + ComponentModel *model = defaultComponentModel(); d->fetchMetaInformationFromRepositories(DownloadType::UpdatesXML); d->addUpdateResourcesFromRepositories(true); QRegularExpression re(regexp); const PackagesList &packages = d->remotePackages(); + if (!fetchAllPackages(packages, LocalPackagesHash())) { + qCWarning(QInstaller::lcInstallerInstallLog) + << "There was a problem with loading the package data."; + return; + } PackagesList matchedPackages; foreach (Package *package, packages) { const QString name = package->data(scName).toString(); - if (re.match(name).hasMatch() && - (virtualComponentsVisible() ? true : !package->data(scVirtual, false).toBool())) { + Component *component = componentByName(name); + if (!component) + continue; + + const QModelIndex &idx = model->indexFromComponentName(component->treeName()); + if (idx.isValid() && re.match(name).hasMatch()) matchedPackages.append(package); - } } if (matchedPackages.count() == 0) qCDebug(QInstaller::lcInstallerInstallLog) << "No matching packages found."; @@ -2275,10 +2286,26 @@ bool PackageManagerCore::checkComponentsForInstallation(const QStringList &compo model->setData(idx, Qt::Checked, Qt::CheckStateRole); installComponentsFound = true; } - } else { // idx is invalid and component valid when we have invisible virtual component - component->isVirtual() - ? errorMessage.append(tr("Cannot install %1. Component is virtual.\n").arg(name)) - : errorMessage.append(tr("Cannot install %1. Component not found.\n").arg(name)); + } else { + auto isDescendantOfVirtual = [&]() { + Component *trace = component; + forever { + trace = trace->parentComponent(); + if (!trace) { + // We already checked the root component if there is no parent + return false; + } else if (trace->isVirtual()) { + errorMessage.append(tr("Cannot install %1. Component is descendant " + "of a virtual component %2.\n").arg(name, trace->name())); + return true; + } + } + }; + // idx is invalid and component valid when we have invisible virtual component + if (component->isVirtual()) + errorMessage.append(tr("Cannot install %1. Component is virtual.\n").arg(name)); + else if (!isDescendantOfVirtual()) + errorMessage.append(tr("Cannot install %1. Component not found.\n").arg(name)); } } if (!installComponentsFound) @@ -2292,6 +2319,7 @@ bool PackageManagerCore::checkComponentsForInstallation(const QStringList &compo */ void PackageManagerCore::listInstalledPackages(const QString ®exp) { + setPackageViewer(); LocalPackagesHash installedPackages = this->localInstalledPackages(); if (!regexp.isEmpty()) { @@ -3380,11 +3408,11 @@ bool PackageManagerCore::isPackageManager() const } /*! - Sets current installer to be offline generator based on \a offlineGenerator. + Sets current installer to be offline generator. */ -void PackageManagerCore::setOfflineGenerator(bool offlineGenerator) +void PackageManagerCore::setOfflineGenerator() { - d->m_offlineGenerator = offlineGenerator; + d->m_magicMarkerSupplement = BinaryContent::OfflineGenerator; } /*! @@ -3398,6 +3426,24 @@ bool PackageManagerCore::isOfflineGenerator() const } /*! + Sets the current installer as the package viewer. +*/ +void PackageManagerCore::setPackageViewer() +{ + d->m_magicMarkerSupplement = BinaryContent::PackageViewer; +} + +/*! + Returns \c true if the current installer is executed as package viewer. + + \sa {installer::isPackageViewer}{installer.isPackageViewer} +*/ +bool PackageManagerCore::isPackageViewer() const +{ + return d->isPackageViewer(); +} + +/*! Sets the installer magic binary marker based on \a magicMarker and userSetBinaryMarker to \c true. */ @@ -3638,7 +3684,7 @@ void PackageManagerCore::storeReplacedComponents(QHash<QString, Component *> &co qCWarning(QInstaller::lcDeveloperBuild) << componentName << "- Does not exist in the repositories anymore."; continue; } - if (!componentToReplace && !d->componentsToReplace().contains(componentName)) { + if (!d->componentsToReplace().contains(componentName)) { componentToReplace = new Component(this); componentToReplace->setValue(scName, componentName); } else { |