File tree Expand file tree Collapse file tree 3 files changed +21
-0
lines changed Expand file tree Collapse file tree 3 files changed +21
-0
lines changed Original file line number Diff line number Diff line change 44
55#include < string>
66#include < vector>
7+ #include < functional>
78
89namespace 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;
Original file line number Diff line number Diff 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+
178192const std::string &ProjectDownloader::json () const
179193{
180194 return m_jsonDownloader->text ();
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments