AssetDownloader: Implement the downloader using TaskTree

Task-number: QTBUG-122550
Change-Id: I990d0db1c5f0246aab0d796f438b26976650dc2c
Reviewed-by: Ali Kianian <ali.kianian@qt.io>
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
(cherry picked from commit 6dff842b2a55cc941e7868a12c725e0a8c6afdb1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Jarek Kobus 2024-06-04 19:21:07 +02:00 committed by Qt Cherry-pick Bot
parent 355f68bc4a
commit 4285216860
3 changed files with 426 additions and 759 deletions

View File

@ -4,7 +4,6 @@
qt_internal_add_module(ExamplesAssetDownloaderPrivate
CONFIG_MODULE_NAME examples_asset_downloader
STATIC
EXCEPTIONS
INTERNAL_MODULE
SOURCES
assetdownloader.cpp assetdownloader.h
@ -15,11 +14,13 @@ qt_internal_add_module(ExamplesAssetDownloaderPrivate
tasking/tasking_global.h
tasking/tasktree.cpp tasking/tasktree.h
tasking/tasktreerunner.cpp tasking/tasktreerunner.h
LIBRARIES
DEFINES
QT_NO_CAST_FROM_ASCII
PUBLIC_LIBRARIES
Qt6::Concurrent
Qt6::Core
Qt6::CorePrivate
Qt6::Network
PUBLIC_LIBRARIES
Qt6::Core
NO_GENERATE_CPP_EXPORTS
)

File diff suppressed because it is too large Load Diff

View File

@ -8,22 +8,24 @@
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtCore/QObject>
#include <QtCore/QScopedPointer>
#include <QtCore/QUrl>
#include <memory>
QT_BEGIN_NAMESPACE
namespace QtExamples {
namespace Assets::Downloader {
class AssetDownloaderPrivate;
class AssetDownloader : public QObject
{
Q_OBJECT
@ -34,32 +36,12 @@ class AssetDownloader : public QObject
WRITE setDownloadBase
NOTIFY downloadBaseChanged)
Q_PROPERTY(
int completedDownloadsCount
READ completedDownloadsCount
NOTIFY completedDownloadsCountChanged)
Q_PROPERTY(
int allDownloadsCount
READ allDownloadsCount
NOTIFY allDownloadsCountChanged)
Q_PROPERTY(
double progress
READ progress
NOTIFY progressChanged)
Q_PROPERTY(
QUrl preferredLocalDownloadDir
READ preferredLocalDownloadDir
WRITE setPreferredLocalDownloadDir
NOTIFY preferredLocalDownloadDirChanged)
Q_PROPERTY(
QUrl localDownloadDir
READ localDownloadDir
NOTIFY localDownloadDirChanged)
Q_PROPERTY(
QUrl offlineAssetsFilePath
READ offlineAssetsFilePath
@ -78,31 +60,18 @@ class AssetDownloader : public QObject
WRITE setZipFileName
NOTIFY zipFileNameChanged)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
Q_PROPERTY(
QUrl localDownloadDir
READ localDownloadDir
NOTIFY localDownloadDirChanged)
public:
enum class State {
NotDownloadedState,
DownloadingZipState,
ExtractingZipState,
DownloadingFilesState,
MovingFilesState,
DownloadedState,
ErrorState
};
Q_ENUM(State)
AssetDownloader(QObject *parent = nullptr);
~AssetDownloader();
QUrl downloadBase() const;
void setDownloadBase(const QUrl &downloadBase);
int allDownloadsCount() const;
int completedDownloadsCount() const;
QUrl localDownloadDir() const;
double progress() const;
QUrl preferredLocalDownloadDir() const;
void setPreferredLocalDownloadDir(const QUrl &localDir);
@ -115,35 +84,28 @@ public:
QString zipFileName() const;
void setZipFileName(const QString &zipFileName);
State state() const;
QUrl localDownloadDir() const;
public Q_SLOTS:
void start();
private Q_SLOTS:
void setProgressPercent(int);
Q_SIGNALS:
void stateChanged(State);
void downloadBaseChanged(const QUrl &);
void allDownloadsCountChanged(int count);
void downloadStarted();
void completedDownloadsCountChanged(int count);
void downloadFinished();
void downloadingFileChanged(const QUrl &url);
void preferredLocalDownloadDirChanged(const QUrl &url);
void started();
void finished(bool success);
void progressChanged(int progressValue, int progressMaximum, const QString &progressText);
void localDownloadDirChanged(const QUrl &url);
void progressChanged(double progress);
void downloadBaseChanged(const QUrl &);
void preferredLocalDownloadDirChanged(const QUrl &url);
void offlineAssetsFilePathChanged(const QUrl &);
void jsonFileNameChanged(const QString &);
void zipFileNameChanged(const QString &);
private:
Q_DECLARE_PRIVATE(AssetDownloader)
QScopedPointer<AssetDownloaderPrivate> d_ptr;
std::unique_ptr<AssetDownloaderPrivate> d;
};
} // namespace QtExamples
} // namespace Assets::Downloader
QT_END_NAMESPACE