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 disk. If user changes the file name in a prompted download saving dialog, the
actual name of saved file will be different. actual name of saved file will be different.
#### `downloadItem.getCurrentBytesPerSecond()`
Returns `Integer` - The current download speed in bytes per second.
#### `downloadItem.getTotalBytes()` #### `downloadItem.getTotalBytes()`
Returns `Integer` - The total size in bytes of the download item. 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. Returns `Integer` - The received bytes of the download item.
#### `downloadItem.getPercentComplete()`
Returns `Integer` - The download completion in percent.
#### `downloadItem.getContentDisposition()` #### `downloadItem.getContentDisposition()`
Returns `string` - The Content-Disposition field from the response 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 Returns `Double` - Number of seconds since the UNIX epoch when the download was
started. started.
#### `downloadItem.getEndTime()`
Returns `Double` - Number of seconds since the UNIX epoch when the download ended.
### Instance Properties ### Instance Properties
#### `downloadItem.savePath` #### `downloadItem.savePath`

View file

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

View file

@ -62,8 +62,10 @@ class DownloadItem : public gin::Wrappable<DownloadItem>,
void Resume(); void Resume();
bool CanResume() const; bool CanResume() const;
void Cancel(); void Cancel();
int64_t GetCurrentBytesPerSecond() const;
int64_t GetReceivedBytes() const; int64_t GetReceivedBytes() const;
int64_t GetTotalBytes() const; int64_t GetTotalBytes() const;
int GetPercentComplete() const;
std::string GetMimeType() const; std::string GetMimeType() const;
bool HasUserGesture() const; bool HasUserGesture() const;
std::string GetFilename() const; std::string GetFilename() const;
@ -76,6 +78,7 @@ class DownloadItem : public gin::Wrappable<DownloadItem>,
std::string GetLastModifiedTime() const; std::string GetLastModifiedTime() const;
std::string GetETag() const; std::string GetETag() const;
double GetStartTime() const; double GetStartTime() const;
double GetEndTime() const;
base::FilePath save_path_; base::FilePath save_path_;
file_dialog::DialogSettings dialog_options_; 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; const item = await downloadDone;
expect(item.getState()).to.equal('completed'); expect(item.getState()).to.equal('completed');
expect(item.getFilename()).to.equal('mock.pdf'); expect(item.getFilename()).to.equal('mock.pdf');
expect(item.getMimeType()).to.equal('application/pdf'); expect(item.getMimeType()).to.equal('application/pdf');
expect(item.getReceivedBytes()).to.equal(mockPDF.length); expect(item.getReceivedBytes()).to.equal(mockPDF.length);
expect(item.getTotalBytes()).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); 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', () => { it('throws when called with invalid headers', () => {