diff options
Diffstat (limited to 'src/libs/installer/packagemanagercore.h')
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 133 |
1 files changed, 105 insertions, 28 deletions
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index c845fb1fa..170ddf557 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2024 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -29,24 +29,31 @@ #define PACKAGEMANAGERCORE_H #include "binaryformat.h" +#include "binarycontent.h" +#include "component.h" #include "protocol.h" #include "repository.h" #include "qinstallerglobal.h" #include "utils.h" +#include "commandlineparser.h" #include <QtCore/QHash> #include <QtCore/QObject> #include <QtCore/QStringList> -#include <QtCore/QVector> +#include <QtCore/QList> +#include <QSettings> +#include <QModelIndex> namespace QInstaller { -class Component; +struct AliasSource; class ComponentModel; +class ComponentAlias; class ScriptEngine; class PackageManagerCorePrivate; class PackageManagerProxyFactory; class Settings; +class ComponentSortFilterProxyModel; // -- PackageManagerCore @@ -61,6 +68,7 @@ class INSTALLER_EXPORT PackageManagerCore : public QObject public: PackageManagerCore(); PackageManagerCore(qint64 magicmaker, const QList<OperationBlob> &ops, + const QString &datFilename = QString(), const QString &socketName = QString(), const QString &key = QLatin1String(Protocol::DefaultAuthorizationKey), Protocol::Mode mode = Protocol::Mode::Production, @@ -76,7 +84,8 @@ public: Canceled = 3, Unfinished = 4, ForceUpdate = 5, - EssentialUpdated = 6 + EssentialUpdated = 6, + NoPackagesFound = 7 }; Status status() const; QString error() const; @@ -101,6 +110,14 @@ public: AllNoReplacements = (Root | Descendants | Dependencies), All = (Root | Descendants | Dependencies | Replacements) }; + + struct DownloadItem + { + QString fileName; + QString sourceUrl; + bool checkSha1CheckSum; + }; + Q_DECLARE_FLAGS(ComponentTypes, ComponentType) static QFont virtualComponentsFont(); @@ -118,20 +135,24 @@ public: static bool createLocalRepositoryFromBinary(); static void setCreateLocalRepositoryFromBinary(bool create); + static int maxConcurrentOperations(); + static void setMaxConcurrentOperations(int count); + static Component *componentByName(const QString &name, const QList<Component *> &components); bool directoryWritable(const QString &path) const; bool fetchLocalPackagesTree(); - LocalPackagesHash localInstalledPackages(); + LocalPackagesMap localInstalledPackages(); void networkSettingsChanged(); PackageManagerProxyFactory *proxyFactory() const; void setProxyFactory(PackageManagerProxyFactory *factory); PackagesList remotePackages(); - bool fetchRemotePackagesTree(); + bool fetchRemotePackagesTree(const QStringList& components = QStringList()); bool fetchCompressedPackagesTree(); + bool fetchPackagesWithFallbackRepositories(const QStringList& components, bool &fallBackReposFetched); bool run(); void reset(); @@ -160,6 +181,7 @@ public: Q_INVOKABLE static QString findPath(const QString &name, const QStringList &paths = QStringList()); Q_INVOKABLE void setInstallerBaseBinary(const QString &path); + QString installerBaseBinary() const; void setOfflineBaseBinary(const QString &path); void addResourcesForOfflineGeneration(const QString &rcPath); @@ -167,7 +189,7 @@ public: // parameter handling Q_INVOKABLE bool containsValue(const QString &key) const; Q_INVOKABLE void setValue(const QString &key, const QString &value); - Q_INVOKABLE QString value(const QString &key, const QString &defaultValue = QString()) const; + Q_INVOKABLE QString value(const QString &key, const QString &defaultValue = QString(), const int &format = QSettings::NativeFormat) const; Q_INVOKABLE QStringList values(const QString &key, const QStringList &defaultValue = QStringList()) const; Q_INVOKABLE QString key(const QString &value) const; @@ -186,12 +208,20 @@ public: void setOfflineBinaryName(const QString &name); QString offlineBinaryName() const; - bool testChecksum() const; - void setTestChecksum(bool test); + void addAliasSource(const AliasSource &source); Q_INVOKABLE void addUserRepositories(const QStringList &repositories); Q_INVOKABLE void setTemporaryRepositories(const QStringList &repositories, bool replace = false, bool compressed = false); + bool addQBspRepositories(const QStringList &repositories); + bool validRepositoriesAvailable() const; + Q_INVOKABLE void setAllowCompressedRepositoryInstall(bool allow); + bool allowCompressedRepositoryInstall() const; + bool showRepositoryCategories() const; + QVariantMap organizedRepositoryCategories() const; + void enableRepositoryCategory(const QString &repositoryName, bool enable); + void runProgram(); + Q_INVOKABLE void autoAcceptMessageBoxes(); Q_INVOKABLE void autoRejectMessageBoxes(); Q_INVOKABLE void setMessageBoxAutomaticAnswer(const QString &identifier, int button); @@ -212,7 +242,10 @@ public: Q_INVOKABLE QString readFile(const QString &filePath, const QString &codecName) const; Q_INVOKABLE QString readConsoleLine(const QString &title = QString(), qint64 maxlen = 0) const; - bool checkTargetDir(const QString &targetDirectory); + Q_INVOKABLE QString toNativeSeparators(const QString &path); + Q_INVOKABLE QString fromNativeSeparators(const QString &path); + + bool installationAllowedToDirectory(const QString &targetDirectory); QString targetDirWarning(const QString &targetDirectory) const; public: @@ -224,25 +257,43 @@ public: void appendRootComponent(Component *components); void appendUpdaterComponent(Component *components); - QList<Component *> components(ComponentTypes mask) const; - Component *componentByName(const QString &identifier) const; + QList<Component *> components(ComponentTypes mask, const QString ®exp = QString()) const; + Q_INVOKABLE QInstaller::Component *componentByName(const QString &identifier) const; + Q_INVOKABLE QList<QInstaller::Component *> components(const QString ®exp = QString()) const; + + ComponentAlias *aliasByName(const QString &name) const; Q_INVOKABLE bool calculateComponentsToInstall() const; QList<Component*> orderedComponentsToInstall() const; - bool calculateComponents(QString *displayString); + + Q_INVOKABLE bool recalculateAllComponents(); + QString componentResolveReasons() const; Q_INVOKABLE bool calculateComponentsToUninstall() const; QList<Component*> componentsToUninstall() const; + QList<Component *> componentsMarkedForInstallation() const; + QList<ComponentAlias *> aliasesMarkedForInstallation() const; + QString componentsToInstallError() const; + QString componentsToUninstallError() const; QString installReason(Component *component) const; + QString uninstallReason(Component *component) const; QList<Component*> dependees(const Component *component) const; + bool isDependencyForRequestedComponent(const Component *component) const; + QStringList localDependenciesToComponent(const Component *component) const; ComponentModel *defaultComponentModel() const; ComponentModel *updaterComponentModel() const; + ComponentSortFilterProxyModel *componentSortFilterProxyModel(); + void listInstalledPackages(const QString ®exp = QString()); - void listAvailablePackages(const QString ®exp); + bool listAvailablePackages(const QString ®exp = QString(), + const QHash<QString, QString> &filters = QHash<QString, QString>()); + bool listAvailableAliases(const QString ®exp = QString()); + + PackageManagerCore::Status searchAvailableUpdates(); PackageManagerCore::Status updateComponentsSilently(const QStringList &componentsToUpdate); PackageManagerCore::Status installSelectedComponentsSilently(const QStringList& components); PackageManagerCore::Status installDefaultComponentsSilently(); @@ -264,9 +315,14 @@ public: Q_INVOKABLE void setPackageManager(); Q_INVOKABLE bool isPackageManager() const; - void setOfflineGenerator(bool offlineGenerator = true); + void setOfflineGenerator(); Q_INVOKABLE bool isOfflineGenerator() const; + void setPackageViewer(); + Q_INVOKABLE bool isPackageViewer() const; + + void resetBinaryMarkerSupplement(); + void setUserSetBinaryMarker(qint64 magicMarker); Q_INVOKABLE bool isUserSetBinaryMarker() const; @@ -281,9 +337,11 @@ public: Q_INVOKABLE bool gainAdminRights(); Q_INVOKABLE void dropAdminRights(); + Q_INVOKABLE bool hasAdminRights() const; void setCheckAvailableSpace(bool check); - bool checkAvailableSpace(QString &message) const; + bool checkAvailableSpace(); + QString availableSpaceMessage() const; Q_INVOKABLE quint64 requiredDiskSpace() const; Q_INVOKABLE quint64 requiredTemporaryDiskSpace() const; @@ -327,6 +385,19 @@ public: void clearLicenses(); QHash<QString, QMap<QString, QString>> sortedLicenses(); void addLicenseItem(const QHash<QString, QVariantMap> &licenses); + bool hasLicenses() const; + void createLocalDependencyHash(const QString &component, const QString &dependencies) const; + void createAutoDependencyHash(const QString &component, const QString &oldDependencies, const QString &newDependencies) const; + + bool resetLocalCache(bool init = false); + bool clearLocalCache(QString *error = nullptr); + bool isValidCache() const; + + template <typename T> + bool loadComponentScripts(const T &components, const bool postScript = false); + + void saveGivenArguments(const QStringList &args); + QStringList givenArguments() const; public Q_SLOTS: bool runInstaller(); @@ -338,8 +409,8 @@ public Q_SLOTS: void languageChanged(); void setCompleteUninstallation(bool complete); void cancelMetaInfoJob(); - void componentsToInstallNeedsRecalculation(); - void clearComponentsToInstallCalculated(); + void componentsToInstallNeedsRecalculation(); // TODO: deprecated, remove + void clearComponentsToInstallCalculated() {} // TODO: deprecated, remove Q_SIGNALS: void aboutCalculateComponentsToInstall() const; @@ -347,11 +418,9 @@ Q_SIGNALS: void aboutCalculateComponentsToUninstall() const; void finishedCalculateComponentsToUninstall() const; void componentAdded(QInstaller::Component *comp); - void rootComponentsAdded(QList<QInstaller::Component*> components); - void updaterComponentsAdded(QList<QInstaller::Component*> components); void valueChanged(const QString &key, const QString &value); void statusChanged(QInstaller::PackageManagerCore::Status); - void defaultTranslationsLoadedForLanguage(QLocale::Language); + void defaultTranslationsLoadedForLanguage(QLocale lang); void currentPageChanged(int page); void finishButtonClicked(); @@ -374,6 +443,7 @@ Q_SIGNALS: void offlineGenerationStarted(); void offlineGenerationFinished(); void titleMessageChanged(const QString &title); + void downloadArchivesFinished(); void wizardPageInsertionRequested(QWidget *widget, QInstaller::PackageManagerCore::WizardPage page); void wizardPageRemovalRequested(QWidget *widget); @@ -390,34 +460,41 @@ Q_SIGNALS: void guiObjectChanged(QObject *gui); void unstableComponentFound(const QString &type, const QString &errorMessage, const QString &component); void installerBinaryMarkerChanged(qint64 magicMarker); + void componentsRecalculated(); private: struct Data { Package *package; QHash<QString, Component*> *components; - const LocalPackagesHash *installedPackages; + const LocalPackagesMap *installedPackages; QHash<Component*, QStringList> replacementToExchangeables; }; bool updateComponentData(struct Data &data, QInstaller::Component *component); - void storeReplacedComponents(QHash<QString, Component*> &components, const struct Data &data); - bool fetchAllPackages(const PackagesList &remotePackages, const LocalPackagesHash &localPackages); - bool fetchUpdaterPackages(const PackagesList &remotePackages, const LocalPackagesHash &localPackages); + void storeReplacedComponents(QHash<QString, Component*> &components, const struct Data &data, + QMap<QString, QString> *const treeNameComponents = nullptr); + bool fetchAllPackages(const PackagesList &remotePackages, const LocalPackagesMap &localPackages); + bool fetchUpdaterPackages(const PackagesList &remotePackages, const LocalPackagesMap &localPackages); + + void createAutoTreeNames(QHash<QString, Component *> &components, + const QMap<QString, QString> &treeNameComponents); void updateDisplayVersions(const QString &displayKey); QString findDisplayVersion(const QString &componentName, const QHash<QString, QInstaller::Component*> &components, const QString& versionKey, QHash<QString, bool> &visited); ComponentModel *componentModel(PackageManagerCore *core, const QString &objectName) const; - QList<Component *> componentsMarkedForInstallation() const; - bool fetchPackagesTree(const PackagesList &packages, const LocalPackagesHash installedPackages); + bool fetchPackagesTree(const PackagesList &packages, const LocalPackagesMap installedPackages); bool componentUninstallableFromCommandLine(const QString &componentName); - bool checkComponentsForInstallation(const QStringList &components, QString &errorMessage); + bool checkComponentsForInstallation(const QStringList &names, QString &errorMessage, bool &unstableAliasFound); private: PackageManagerCorePrivate *const d; friend class PackageManagerCorePrivate; QHash<QString, QString> m_fileDialogAutomaticAnswers; + QHash<QString, QStringList> m_localVirtualWithDependants; + QString m_availableSpaceMessage; + QStringList m_arguments; private: // remove once we deprecate isSelected, setSelected etc... |