Browse Source

Refractor in `completed` event in DownloadItem.

* Rename `completed` to `done`, making it align with Chromium's style.
* Add 'state' in `done` event's result. It can check the download item final
status: cancelled, completed, interrupted.
Haojian Wu 9 years ago
parent
commit
57bf0cb615
2 changed files with 40 additions and 5 deletions
  1. 30 2
      atom/browser/api/atom_api_download_item.cc
  2. 10 3
      docs/api/download-item.md

+ 30 - 2
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<content::DownloadItem::DownloadState> {
+  static v8::Local<v8::Value> 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) {

+ 10 - 3
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()`