diff --git a/atom/browser/api/atom_api_download_item.cc b/atom/browser/api/atom_api_download_item.cc index b056695a20b5..6c6bb4dae9d2 100644 --- a/atom/browser/api/atom_api_download_item.cc +++ b/atom/browser/api/atom_api_download_item.cc @@ -9,6 +9,32 @@ #include "atom/common/node_includes.h" #include "native_mate/dictionary.h" +namespace mate { + +template<> +struct Converter { + static v8::Local ToV8(v8::Isolate* isolate, + content::DownloadItem::DownloadState state) { + std::string download_state; + switch (state) { + case content::DownloadItem::COMPLETE: + download_state = "completed"; + break; + case content::DownloadItem::CANCELLED: + download_state = "cancelled"; + break; + case content::DownloadItem::INTERRUPTED: + download_state = "interrputed"; + break; + default: + break; + } + return ConvertToV8(isolate, download_state); + } +}; + +} // namespace mate + namespace atom { namespace api { @@ -29,8 +55,10 @@ DownloadItem::~DownloadItem() { } void DownloadItem::OnDownloadUpdated(content::DownloadItem* item) { - if (download_item_ == item) - download_item_->IsDone() ? Emit("completed") : Emit("updated"); + if (download_item_ == item) { + download_item_->IsDone() ? + Emit("done", item->GetState()) : Emit("updated"); + } } void DownloadItem::OnDownloadDestroyed(content::DownloadItem* download) { diff --git a/docs/api/download-item.md b/docs/api/download-item.md index afbc4aea3646..7b496dbc2b1e 100644 --- a/docs/api/download-item.md +++ b/docs/api/download-item.md @@ -16,8 +16,8 @@ win.webContents.session.on('will-download', function(event, item, webContents) { item.on('updated', function() { console.log('Recived bytes: ' + item.getReceiveBytes()); }); - item.on('completed', function() { - if (item.getReceiveBytes() >= item.getTotalBytes()) { + item.on('done', function(e, state) { + if (state == "completed") { console.log("Download successfully"); } else { console.log("Download is cancelled or interrupted that can't be resumed"); @@ -32,7 +32,13 @@ win.webContents.session.on('will-download', function(event, item, webContents) { Emits when the `downloadItem` gets updated. -### Event: 'completed' +### Event: 'done' + +* `event` Event +* `state` String + * `completed` - The download completed successfully. + * `cancelled` - The download has been cancelled. + * `interrupted` - An error broke the connection with the file server. Emits when the download is in a terminal state. This includes a completed download, a cancelled download(via `downloadItem.cancel()`), and interrputed @@ -77,6 +83,7 @@ dialog, the actual name of saved file will be different with the suggested one. ### `downloadItem.getTotalBytes()` Returns a `Integer` represents the total size in bytes of the download item. +If the size is unknown, it returns 0. ### `downloadItem.getReceivedBytes()`