CLOUD: Update FolderDownloadRequest

It now keeps track of downloaded bytes.
This commit is contained in:
Alexander Tkachev 2016-07-14 15:29:47 +06:00
parent ca33c0a0a8
commit 0ca7917093
7 changed files with 73 additions and 2 deletions

View file

@ -51,6 +51,7 @@ void FolderDownloadRequest::start() {
_failedFiles.clear();
_ignoreCallback = false;
_totalFiles = 0;
_downloadedBytes = _totalBytes = 0;
//list directory first
_workingRequest = _storage->listDirectory(
@ -70,8 +71,10 @@ void FolderDownloadRequest::directoryListedCallback(Storage::ListDirectoryRespon
for (Common::Array<StorageFile>::iterator i = _pendingFiles.begin(); i != _pendingFiles.end(); )
if (i->isDirectory())
_pendingFiles.erase(i);
else
else {
_totalBytes += i->size();
++i;
}
_totalFiles = _pendingFiles.size();
downloadNextFile();
@ -87,6 +90,7 @@ void FolderDownloadRequest::fileDownloadedCallback(Storage::BoolResponse respons
_workingRequest = nullptr;
if (_ignoreCallback) return;
if (!response.value) _failedFiles.push_back(_currentFile);
_downloadedBytes += _currentFile.size();
downloadNextFile();
}
@ -159,4 +163,22 @@ double FolderDownloadRequest::getProgress() const {
return (double)(uploadedFiles + currentFileProgress) / (double)(_totalFiles);
}
uint64 FolderDownloadRequest::getDownloadedBytes() const {
if (_totalFiles == 0) return 0;
double currentFileProgress = 0;
DownloadRequest *downloadRequest = dynamic_cast<DownloadRequest *>(_workingRequest);
if (downloadRequest != nullptr) currentFileProgress = downloadRequest->getProgress();
else {
Id::IdDownloadRequest *idDownloadRequest = dynamic_cast<Id::IdDownloadRequest *>(_workingRequest);
if (idDownloadRequest != nullptr) currentFileProgress = idDownloadRequest->getProgress();
}
return _downloadedBytes + (uint64)(currentFileProgress * _currentFile.size());
}
uint64 FolderDownloadRequest::getTotalBytesToDownload() const {
return _totalBytes;
}
} // End of namespace Cloud