Skip to content

Commit 669c9eb

Browse files
committed
Add download progress callback to ProjectDownloader
1 parent 944fd2e commit 669c9eb

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/internal/iprojectdownloader.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include <string>
66
#include <vector>
7+
#include <functional>
78

89
namespace libscratchcpp
910
{
@@ -17,6 +18,8 @@ class IProjectDownloader
1718
virtual bool downloadAssets(const std::vector<std::string> &assetIds) = 0;
1819
virtual void cancel() = 0;
1920

21+
virtual void setDownloadProgressCallback(const std::function<void(unsigned int, unsigned int)> &f) = 0;
22+
2023
virtual const std::string &json() const = 0;
2124
virtual const std::vector<std::string> &assets() const = 0;
2225
virtual unsigned int downloadedAssetCount() const = 0;

src/internal/projectdownloader.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ bool ProjectDownloader::downloadAssets(const std::vector<std::string> &assetIds)
149149
m_assets[index] = downloader->text();
150150
m_downloadedAssetCount++;
151151
std::cout << "Downloaded assets: " << m_downloadedAssetCount << " of " << count << std::endl;
152+
153+
m_downloadProgressCallbackMutex.lock();
154+
155+
if (m_downloadProgressCallback)
156+
m_downloadProgressCallback(m_downloadedAssetCount, count);
157+
158+
m_downloadProgressCallbackMutex.unlock();
152159
m_assetsMutex.unlock();
153160
}
154161
}
@@ -175,6 +182,13 @@ void ProjectDownloader::cancel()
175182
m_downloadedAssetCount = 0;
176183
}
177184

185+
void ProjectDownloader::setDownloadProgressCallback(const std::function<void(unsigned int, unsigned int)> &f)
186+
{
187+
m_downloadProgressCallbackMutex.lock();
188+
m_downloadProgressCallback = f;
189+
m_downloadProgressCallbackMutex.unlock();
190+
}
191+
178192
const std::string &ProjectDownloader::json() const
179193
{
180194
return m_jsonDownloader->text();

src/internal/projectdownloader.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class ProjectDownloader : public IProjectDownloader
2323
bool downloadAssets(const std::vector<std::string> &assetIds) override;
2424
void cancel() override;
2525

26+
void setDownloadProgressCallback(const std::function<void(unsigned int, unsigned int)> &f) override;
27+
2628
const std::string &json() const override;
2729
const std::vector<std::string> &assets() const override;
2830
unsigned int downloadedAssetCount() const override;
@@ -36,6 +38,8 @@ class ProjectDownloader : public IProjectDownloader
3638
std::atomic<unsigned int> m_downloadedAssetCount = 0;
3739
bool m_cancel = false;
3840
std::mutex m_cancelMutex;
41+
std::function<void(unsigned int, unsigned int)> m_downloadProgressCallback = nullptr;
42+
std::mutex m_downloadProgressCallbackMutex;
3943
};
4044

4145
} // namespace libscratchcpp

0 commit comments

Comments
 (0)