diff options
Diffstat (limited to 'src/libs/installer/metadatajob.h')
-rw-r--r-- | src/libs/installer/metadatajob.h | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/src/libs/installer/metadatajob.h b/src/libs/installer/metadatajob.h index d3b404c58..13ad3ea8c 100644 --- a/src/libs/installer/metadatajob.h +++ b/src/libs/installer/metadatajob.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2022 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. @@ -32,6 +32,8 @@ #include "downloadfiletask.h" #include "fileutils.h" #include "job.h" +#include "metadata.h" +#include "metadatacache.h" #include "repository.h" #include <QFutureWatcher> @@ -43,23 +45,10 @@ namespace QInstaller { class PackageManagerCore; -struct Metadata -{ - QString directory; - Repository repository; -}; - -struct ArchiveMetadata -{ - QString archive; - Metadata metaData; -}; - enum DownloadType { All, - CompressedPackage, - UpdatesXML + CompressedPackage }; class INSTALLER_EXPORT MetadataJob : public Job @@ -77,12 +66,16 @@ public: explicit MetadataJob(QObject *parent = 0); ~MetadataJob(); - QList<Metadata> metadata() const; - Repository repositoryForDirectory(const QString &directory) const; + QList<Metadata *> metadata() const; + Repository repositoryForCacheDirectory(const QString &directory) const; void setPackageManagerCore(PackageManagerCore *core) { m_core = core; } void addDownloadType(DownloadType downloadType) { m_downloadType = downloadType;} QStringList shaMismatchPackages() const { return m_shaMissmatchPackages; } + bool resetCache(bool init = false); + bool clearCache(); + bool isValidCache() const; + private slots: void doStart() override; void doCancel() override; @@ -90,46 +83,60 @@ private slots: void xmlTaskFinished(); void unzipTaskFinished(); void metadataTaskFinished(); + void updateCacheTaskFinished(); void progressChanged(int progress); void setProgressTotalAmount(int maximum); void unzipRepositoryTaskFinished(); - void startXMLTask(const QList<FileTaskItem> &items); + bool startXMLTask(); private: bool fetchMetaDataPackages(); void startUnzipRepositoryTask(const Repository &repo); + void startUpdateCacheTask(); + void resetCacheRepositories(); void reset(); void resetCompressedFetch(); Status parseUpdatesXml(const QList<FileTaskResult> &results); + Status refreshCacheItem(const FileTaskResult &result, const QByteArray &checksum, bool *refreshed); + Status findCachedUpdatesFile(const Repository &repository, const QString &fileUrl); + Status parseRepositoryUpdates(const QDomElement &root, const FileTaskResult &result, Metadata *metadata); QSet<Repository> getRepositories(); - void addFileTaskItem(const QString &source, const QString &target, const Metadata &metadata, + void addFileTaskItem(const QString &source, const QString &target, Metadata *metadata, const QString &sha1, const QString &packageName); - bool parsePackageUpdate(const QDomNodeList &c2, QString &packageName, QString &packageVersion, + static bool parsePackageUpdate(const QDomNodeList &c2, QString &packageName, QString &packageVersion, QString &packageHash, bool online, bool testCheckSum); - QHash<QString, QPair<Repository, Repository> > searchAdditionalRepositories(const QDomNode &repositoryUpdate, + QMultiHash<QString, QPair<Repository, Repository> > searchAdditionalRepositories(const QDomNode &repositoryUpdate, const FileTaskResult &result, const Metadata &metadata); - MetadataJob::Status setAdditionalRepositories(QHash<QString, QPair<Repository, Repository> > repositoryUpdates, + MetadataJob::Status setAdditionalRepositories(QMultiHash<QString, QPair<Repository, Repository> > repositoryUpdates, const FileTaskResult &result, const Metadata& metadata); + void setInfoMessage(const QString &message); + +private: + friend class Metadata; private: PackageManagerCore *m_core; QList<FileTaskItem> m_packages; - TempDirDeleter m_tempDirDeleter; + QList<FileTaskItem> m_updatesXmlItems; + TempPathDeleter m_tempDirDeleter; QFutureWatcher<FileTaskResult> m_xmlTask; QFutureWatcher<FileTaskResult> m_metadataTask; + QFutureWatcher<void> m_updateCacheTask; QHash<QFutureWatcher<void> *, QObject*> m_unzipTasks; QHash<QFutureWatcher<void> *, QObject*> m_unzipRepositoryTasks; DownloadType m_downloadType; - QList<FileTaskItem> m_unzipRepositoryitems; QList<FileTaskResult> m_metadataResult; + QList<FileTaskResult> m_updatesXmlResult; int m_downloadableChunkSize; int m_taskNumber; int m_totalTaskCount; QStringList m_shaMissmatchPackages; - QMultiHash<QString, ArchiveMetadata> m_fetchedArchive; - QHash<QString, Metadata> m_metaFromDefaultRepositories; - QHash<QString, Metadata> m_metaFromArchive; //for faster lookups. + bool m_defaultRepositoriesFetched; + + QSet<Repository> m_fetchedCategorizedRepositories; + QHash<QString, Metadata *> m_fetchedMetadata; + MetadataCache m_metaFromCache; }; } // namespace QInstaller |