feat: add getPercentComplete / getCurrentBytesPerSecond / getEndTime to DownloadItem (#42805)

feat: getCurrentSpeed / getPercentComplete / getEndTime on DownloadItem
This commit is contained in:
Theo Gravity 2024-07-15 16:32:44 -07:00 committed by GitHub
parent 0fddfd1b28
commit bab3fcc9ab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 46 additions and 1 deletions

View file

@ -145,6 +145,10 @@ Returns `string` - The file name of the download item.
disk. If user changes the file name in a prompted download saving dialog, the
actual name of saved file will be different.
#### `downloadItem.getCurrentBytesPerSecond()`
Returns `Integer` - The current download speed in bytes per second.
#### `downloadItem.getTotalBytes()`
Returns `Integer` - The total size in bytes of the download item.
@ -155,6 +159,10 @@ If the size is unknown, it returns 0.
Returns `Integer` - The received bytes of the download item.
#### `downloadItem.getPercentComplete()`
Returns `Integer` - The download completion in percent.
#### `downloadItem.getContentDisposition()`
Returns `string` - The Content-Disposition field from the response
@ -184,6 +192,10 @@ Returns `string` - ETag header value.
Returns `Double` - Number of seconds since the UNIX epoch when the download was
started.
#### `downloadItem.getEndTime()`
Returns `Double` - Number of seconds since the UNIX epoch when the download ended.
### Instance Properties
#### `downloadItem.savePath`

View file

@ -149,6 +149,12 @@ void DownloadItem::Cancel() {
download_item_->Cancel(true);
}
int64_t DownloadItem::GetCurrentBytesPerSecond() const {
if (!CheckAlive())
return 0;
return download_item_->CurrentSpeed();
}
int64_t DownloadItem::GetReceivedBytes() const {
if (!CheckAlive())
return 0;
@ -161,6 +167,12 @@ int64_t DownloadItem::GetTotalBytes() const {
return download_item_->GetTotalBytes();
}
int DownloadItem::GetPercentComplete() const {
if (!CheckAlive())
return 0;
return download_item_->PercentComplete();
}
std::string DownloadItem::GetMimeType() const {
if (!CheckAlive())
return "";
@ -248,6 +260,12 @@ double DownloadItem::GetStartTime() const {
return download_item_->GetStartTime().InSecondsFSinceUnixEpoch();
}
double DownloadItem::GetEndTime() const {
if (!CheckAlive())
return 0;
return download_item_->GetEndTime().InSecondsFSinceUnixEpoch();
}
// static
gin::ObjectTemplateBuilder DownloadItem::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
@ -258,8 +276,11 @@ gin::ObjectTemplateBuilder DownloadItem::GetObjectTemplateBuilder(
.SetMethod("resume", &DownloadItem::Resume)
.SetMethod("canResume", &DownloadItem::CanResume)
.SetMethod("cancel", &DownloadItem::Cancel)
.SetMethod("getCurrentBytesPerSecond",
&DownloadItem::GetCurrentBytesPerSecond)
.SetMethod("getReceivedBytes", &DownloadItem::GetReceivedBytes)
.SetMethod("getTotalBytes", &DownloadItem::GetTotalBytes)
.SetMethod("getPercentComplete", &DownloadItem::GetPercentComplete)
.SetMethod("getMimeType", &DownloadItem::GetMimeType)
.SetMethod("hasUserGesture", &DownloadItem::HasUserGesture)
.SetMethod("getFilename", &DownloadItem::GetFilename)
@ -276,7 +297,8 @@ gin::ObjectTemplateBuilder DownloadItem::GetObjectTemplateBuilder(
.SetMethod("getSaveDialogOptions", &DownloadItem::GetSaveDialogOptions)
.SetMethod("getLastModifiedTime", &DownloadItem::GetLastModifiedTime)
.SetMethod("getETag", &DownloadItem::GetETag)
.SetMethod("getStartTime", &DownloadItem::GetStartTime);
.SetMethod("getStartTime", &DownloadItem::GetStartTime)
.SetMethod("getEndTime", &DownloadItem::GetEndTime);
}
const char* DownloadItem::GetTypeName() {

View file

@ -62,8 +62,10 @@ class DownloadItem : public gin::Wrappable<DownloadItem>,
void Resume();
bool CanResume() const;
void Cancel();
int64_t GetCurrentBytesPerSecond() const;
int64_t GetReceivedBytes() const;
int64_t GetTotalBytes() const;
int GetPercentComplete() const;
std::string GetMimeType() const;
bool HasUserGesture() const;
std::string GetFilename() const;
@ -76,6 +78,7 @@ class DownloadItem : public gin::Wrappable<DownloadItem>,
std::string GetLastModifiedTime() const;
std::string GetETag() const;
double GetStartTime() const;
double GetEndTime() const;
base::FilePath save_path_;
file_dialog::DialogSettings dialog_options_;

View file

@ -889,13 +889,21 @@ describe('session module', () => {
}
});
const today = Math.floor(Date.now() / 1000);
const item = await downloadDone;
expect(item.getState()).to.equal('completed');
expect(item.getFilename()).to.equal('mock.pdf');
expect(item.getMimeType()).to.equal('application/pdf');
expect(item.getReceivedBytes()).to.equal(mockPDF.length);
expect(item.getTotalBytes()).to.equal(mockPDF.length);
expect(item.getPercentComplete()).to.equal(100);
expect(item.getCurrentBytesPerSecond()).to.equal(0);
expect(item.getContentDisposition()).to.equal(contentDisposition);
const start = item.getStartTime();
const end = item.getEndTime();
expect(start).to.be.greaterThan(today);
expect(end).to.be.greaterThan(start);
});
it('throws when called with invalid headers', () => {