Reimplement downloadItem.getFilename API.
Previously, the suggested file name(Always 'empty') returned by 'download_item->GetSuggestedFilename' is not the same with the default one saved in local disk. The patch reimplement this API allowing it to return the default file name, which is more expected from user.
This commit is contained in:
parent
0861d5d44b
commit
1879392c7b
6 changed files with 25 additions and 16 deletions
|
@ -11,7 +11,9 @@
|
||||||
#include "atom/common/native_mate_converters/gurl_converter.h"
|
#include "atom/common/native_mate_converters/gurl_converter.h"
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
#include "base/memory/linked_ptr.h"
|
#include "base/memory/linked_ptr.h"
|
||||||
|
#include "base/strings/utf_string_conversions.h"
|
||||||
#include "native_mate/dictionary.h"
|
#include "native_mate/dictionary.h"
|
||||||
|
#include "net/base/filename_util.h"
|
||||||
|
|
||||||
namespace mate {
|
namespace mate {
|
||||||
|
|
||||||
|
@ -112,8 +114,13 @@ bool DownloadItem::HasUserGesture() {
|
||||||
return download_item_->HasUserGesture();
|
return download_item_->HasUserGesture();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string DownloadItem::GetSuggestedFilename() {
|
std::string DownloadItem::GetFilename() {
|
||||||
return download_item_->GetSuggestedFilename();
|
return base::UTF16ToUTF8(net::GenerateFileName(GetUrl(),
|
||||||
|
GetContentDisposition(),
|
||||||
|
std::string(),
|
||||||
|
download_item_->GetSuggestedFilename(),
|
||||||
|
GetMimeType(),
|
||||||
|
std::string()).LossyDisplayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string DownloadItem::GetContentDisposition() {
|
std::string DownloadItem::GetContentDisposition() {
|
||||||
|
@ -147,7 +154,7 @@ mate::ObjectTemplateBuilder DownloadItem::GetObjectTemplateBuilder(
|
||||||
.SetMethod("getUrl", &DownloadItem::GetUrl)
|
.SetMethod("getUrl", &DownloadItem::GetUrl)
|
||||||
.SetMethod("getMimeType", &DownloadItem::GetMimeType)
|
.SetMethod("getMimeType", &DownloadItem::GetMimeType)
|
||||||
.SetMethod("hasUserGesture", &DownloadItem::HasUserGesture)
|
.SetMethod("hasUserGesture", &DownloadItem::HasUserGesture)
|
||||||
.SetMethod("getSuggestedFilename", &DownloadItem::GetSuggestedFilename)
|
.SetMethod("getFilename", &DownloadItem::GetFilename)
|
||||||
.SetMethod("getContentDisposition", &DownloadItem::GetContentDisposition)
|
.SetMethod("getContentDisposition", &DownloadItem::GetContentDisposition)
|
||||||
.SetMethod("setSavePath", &DownloadItem::SetSavePath);
|
.SetMethod("setSavePath", &DownloadItem::SetSavePath);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ class DownloadItem : public mate::EventEmitter,
|
||||||
int64 GetTotalBytes();
|
int64 GetTotalBytes();
|
||||||
std::string GetMimeType();
|
std::string GetMimeType();
|
||||||
bool HasUserGesture();
|
bool HasUserGesture();
|
||||||
std::string GetSuggestedFilename();
|
std::string GetFilename();
|
||||||
std::string GetContentDisposition();
|
std::string GetContentDisposition();
|
||||||
const GURL& GetUrl();
|
const GURL& GetUrl();
|
||||||
void SetSavePath(const base::FilePath& path);
|
void SetSavePath(const base::FilePath& path);
|
||||||
|
|
|
@ -16,7 +16,7 @@ wrapDownloadItem = (download_item) ->
|
||||||
download_item.__proto__ = EventEmitter.prototype
|
download_item.__proto__ = EventEmitter.prototype
|
||||||
# Be compatible with old APIs.
|
# Be compatible with old APIs.
|
||||||
download_item.url = download_item.getUrl()
|
download_item.url = download_item.getUrl()
|
||||||
download_item.filename = download_item.getSuggestedFilename()
|
download_item.filename = download_item.getFilename()
|
||||||
download_item.mimeType = download_item.getMimeType()
|
download_item.mimeType = download_item.getMimeType()
|
||||||
download_item.hasUserGesture = download_item.hasUserGesture()
|
download_item.hasUserGesture = download_item.hasUserGesture()
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ win.webContents.session.on('will-download', function(event, item, webContents) {
|
||||||
// Set the save path, making Electron not to prompt a save dialog.
|
// Set the save path, making Electron not to prompt a save dialog.
|
||||||
item.setSavePath('/tmp/save.pdf');
|
item.setSavePath('/tmp/save.pdf');
|
||||||
console.log(item.getMimeType());
|
console.log(item.getMimeType());
|
||||||
console.log(item.getSuggestedFilename());
|
console.log(item.getFilename());
|
||||||
console.log(item.getTotalBytes());
|
console.log(item.getTotalBytes());
|
||||||
item.on('updated', function() {
|
item.on('updated', function() {
|
||||||
console.log('Recived bytes: ' + item.getReceivedBytes());
|
console.log('Received bytes: ' + item.getReceivedBytes());
|
||||||
});
|
});
|
||||||
item.on('done', function(e, state) {
|
item.on('done', function(e, state) {
|
||||||
if (state == "completed") {
|
if (state == "completed") {
|
||||||
|
@ -24,7 +24,6 @@ win.webContents.session.on('will-download', function(event, item, webContents) {
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Events
|
## Events
|
||||||
|
|
||||||
### Event: 'updated'
|
### Event: 'updated'
|
||||||
|
@ -79,13 +78,13 @@ Returns a `String` represents the mime type.
|
||||||
|
|
||||||
Returns a `Boolean` indicates whether the download has user gesture.
|
Returns a `Boolean` indicates whether the download has user gesture.
|
||||||
|
|
||||||
### `downloadItem.getSuggestedFilename()`
|
### `downloadItem.getFilename()`
|
||||||
|
|
||||||
Returns a `String` represents the suggested file name of the download file.
|
Returns a `String` represents the file name of the download item.
|
||||||
|
|
||||||
**Note:** The suggested file name is not always the same as the actual one saved
|
**Note:** The file name is not always the same as the actual one saved in local
|
||||||
in local disk. If user changes the file name in a prompted download saving
|
disk. If user changes the file name in a prompted download saving dialog, the
|
||||||
dialog, the actual name of saved file will be different with the suggested one.
|
actual name of saved file will be different.
|
||||||
|
|
||||||
### `downloadItem.getTotalBytes()`
|
### `downloadItem.getTotalBytes()`
|
||||||
|
|
||||||
|
|
|
@ -95,8 +95,9 @@ describe 'session module', ->
|
||||||
ipc.sendSync 'set-download-option', false
|
ipc.sendSync 'set-download-option', false
|
||||||
w.loadUrl "#{url}:#{port}"
|
w.loadUrl "#{url}:#{port}"
|
||||||
ipc.once 'download-done', (state, url, mimeType, receivedBytes,
|
ipc.once 'download-done', (state, url, mimeType, receivedBytes,
|
||||||
totalBytes, disposition) ->
|
totalBytes, disposition, filename) ->
|
||||||
assert.equal state, 'completed'
|
assert.equal state, 'completed'
|
||||||
|
assert.equal filename, 'mock.pdf'
|
||||||
assert.equal url, "http://127.0.0.1:#{port}/"
|
assert.equal url, "http://127.0.0.1:#{port}/"
|
||||||
assert.equal mimeType, 'application/pdf'
|
assert.equal mimeType, 'application/pdf'
|
||||||
assert.equal receivedBytes, mockPDF.length
|
assert.equal receivedBytes, mockPDF.length
|
||||||
|
@ -112,8 +113,9 @@ describe 'session module', ->
|
||||||
ipc.sendSync 'set-download-option', true
|
ipc.sendSync 'set-download-option', true
|
||||||
w.loadUrl "#{url}:#{port}/"
|
w.loadUrl "#{url}:#{port}/"
|
||||||
ipc.once 'download-done', (state, url, mimeType, receivedBytes,
|
ipc.once 'download-done', (state, url, mimeType, receivedBytes,
|
||||||
totalBytes, disposition) ->
|
totalBytes, disposition, filename) ->
|
||||||
assert.equal state, 'cancelled'
|
assert.equal state, 'cancelled'
|
||||||
|
assert.equal filename, 'mock.pdf'
|
||||||
assert.equal mimeType, 'application/pdf'
|
assert.equal mimeType, 'application/pdf'
|
||||||
assert.equal receivedBytes, 0
|
assert.equal receivedBytes, 0
|
||||||
assert.equal totalBytes, mockPDF.length
|
assert.equal totalBytes, mockPDF.length
|
||||||
|
|
|
@ -89,7 +89,8 @@ app.on('ready', function() {
|
||||||
item.getMimeType(),
|
item.getMimeType(),
|
||||||
item.getReceivedBytes(),
|
item.getReceivedBytes(),
|
||||||
item.getTotalBytes(),
|
item.getTotalBytes(),
|
||||||
item.getContentDisposition());
|
item.getContentDisposition(),
|
||||||
|
item.getFilename());
|
||||||
});
|
});
|
||||||
if (need_cancel)
|
if (need_cancel)
|
||||||
item.cancel();
|
item.cancel();
|
||||||
|
|
Loading…
Reference in a new issue