81795744cf
* fix: ensure the typescript definitions only export correct value types In typescript there are two main types of "types" you can export, value types (class, const) and definition types (type, interface). The typescript compiler will let anything declared via const or class be used as a value. Unfortunately we were exporting a bunch of things (see the diff) as class/const when they weren't actually exported values. This lead to typescript being happy but the runtime throwing errors (not something we want). This change passes "exported-in" context through our docs, to the parser and then to the definitions generator to ensure we only mark things as exported in the ts defs that we actually export. Fixes #22167 * chore: update typescript-defs * chore: update typescript-defs * chore: fix bad typescript in IPC test * docs: test rendering of new syntax * chore: update per feedback, use same syntax but with 'this is not exportedd' line
197 lines
5.9 KiB
Markdown
197 lines
5.9 KiB
Markdown
## Class: DownloadItem
|
|
|
|
> Control file downloads from remote sources.
|
|
|
|
Process: [Main](../glossary.md#main-process)<br />
|
|
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
|
|
|
|
`DownloadItem` is an [EventEmitter][event-emitter] that represents a download item in Electron.
|
|
It is used in `will-download` event of `Session` class, and allows users to
|
|
control the download item.
|
|
|
|
```javascript
|
|
// In the main process.
|
|
const { BrowserWindow } = require('electron')
|
|
const win = new BrowserWindow()
|
|
win.webContents.session.on('will-download', (event, item, webContents) => {
|
|
// Set the save path, making Electron not to prompt a save dialog.
|
|
item.setSavePath('/tmp/save.pdf')
|
|
|
|
item.on('updated', (event, state) => {
|
|
if (state === 'interrupted') {
|
|
console.log('Download is interrupted but can be resumed')
|
|
} else if (state === 'progressing') {
|
|
if (item.isPaused()) {
|
|
console.log('Download is paused')
|
|
} else {
|
|
console.log(`Received bytes: ${item.getReceivedBytes()}`)
|
|
}
|
|
}
|
|
})
|
|
item.once('done', (event, state) => {
|
|
if (state === 'completed') {
|
|
console.log('Download successfully')
|
|
} else {
|
|
console.log(`Download failed: ${state}`)
|
|
}
|
|
})
|
|
})
|
|
```
|
|
|
|
### Instance Events
|
|
|
|
#### Event: 'updated'
|
|
|
|
Returns:
|
|
|
|
* `event` Event
|
|
* `state` String - Can be `progressing` or `interrupted`.
|
|
|
|
Emitted when the download has been updated and is not done.
|
|
|
|
The `state` can be one of following:
|
|
|
|
* `progressing` - The download is in-progress.
|
|
* `interrupted` - The download has interrupted and can be resumed.
|
|
|
|
#### Event: 'done'
|
|
|
|
Returns:
|
|
|
|
* `event` Event
|
|
* `state` String - Can be `completed`, `cancelled` or `interrupted`.
|
|
|
|
Emitted when the download is in a terminal state. This includes a completed
|
|
download, a cancelled download (via `downloadItem.cancel()`), and interrupted
|
|
download that can't be resumed.
|
|
|
|
The `state` can be one of following:
|
|
|
|
* `completed` - The download completed successfully.
|
|
* `cancelled` - The download has been cancelled.
|
|
* `interrupted` - The download has interrupted and can not resume.
|
|
|
|
### Instance Methods
|
|
|
|
The `downloadItem` object has the following methods:
|
|
|
|
#### `downloadItem.setSavePath(path)`
|
|
|
|
* `path` String - Set the save file path of the download item.
|
|
|
|
The API is only available in session's `will-download` callback function.
|
|
If `path` doesn't exist, Electron will try to make the directory recursively.
|
|
If user doesn't set the save path via the API, Electron will use the original
|
|
routine to determine the save path; this usually prompts a save dialog.
|
|
|
|
#### `downloadItem.getSavePath()`
|
|
|
|
Returns `String` - The save path of the download item. This will be either the path
|
|
set via `downloadItem.setSavePath(path)` or the path selected from the shown
|
|
save dialog.
|
|
|
|
#### `downloadItem.setSaveDialogOptions(options)`
|
|
|
|
* `options` SaveDialogOptions - Set the save file dialog options. This object has the same
|
|
properties as the `options` parameter of [`dialog.showSaveDialog()`](dialog.md).
|
|
|
|
This API allows the user to set custom options for the save dialog that opens
|
|
for the download item by default.
|
|
The API is only available in session's `will-download` callback function.
|
|
|
|
#### `downloadItem.getSaveDialogOptions()`
|
|
|
|
Returns `SaveDialogOptions` - Returns the object previously set by `downloadItem.setSaveDialogOptions(options)`.
|
|
|
|
#### `downloadItem.pause()`
|
|
|
|
Pauses the download.
|
|
|
|
#### `downloadItem.isPaused()`
|
|
|
|
Returns `Boolean` - Whether the download is paused.
|
|
|
|
#### `downloadItem.resume()`
|
|
|
|
Resumes the download that has been paused.
|
|
|
|
**Note:** To enable resumable downloads the server you are downloading from must support range requests and provide both `Last-Modified` and `ETag` header values. Otherwise `resume()` will dismiss previously received bytes and restart the download from the beginning.
|
|
|
|
#### `downloadItem.canResume()`
|
|
|
|
Returns `Boolean` - Whether the download can resume.
|
|
|
|
#### `downloadItem.cancel()`
|
|
|
|
Cancels the download operation.
|
|
|
|
#### `downloadItem.getURL()`
|
|
|
|
Returns `String` - The origin URL where the item is downloaded from.
|
|
|
|
#### `downloadItem.getMimeType()`
|
|
|
|
Returns `String` - The files mime type.
|
|
|
|
#### `downloadItem.hasUserGesture()`
|
|
|
|
Returns `Boolean` - Whether the download has user gesture.
|
|
|
|
#### `downloadItem.getFilename()`
|
|
|
|
Returns `String` - The file name of the download item.
|
|
|
|
**Note:** The file name is not always the same as the actual one saved in local
|
|
disk. If user changes the file name in a prompted download saving dialog, the
|
|
actual name of saved file will be different.
|
|
|
|
#### `downloadItem.getTotalBytes()`
|
|
|
|
Returns `Integer` - The total size in bytes of the download item.
|
|
|
|
If the size is unknown, it returns 0.
|
|
|
|
#### `downloadItem.getReceivedBytes()`
|
|
|
|
Returns `Integer` - The received bytes of the download item.
|
|
|
|
#### `downloadItem.getContentDisposition()`
|
|
|
|
Returns `String` - The Content-Disposition field from the response
|
|
header.
|
|
|
|
#### `downloadItem.getState()`
|
|
|
|
Returns `String` - The current state. Can be `progressing`, `completed`, `cancelled` or `interrupted`.
|
|
|
|
**Note:** The following methods are useful specifically to resume a
|
|
`cancelled` item when session is restarted.
|
|
|
|
#### `downloadItem.getURLChain()`
|
|
|
|
Returns `String[]` - The complete URL chain of the item including any redirects.
|
|
|
|
#### `downloadItem.getLastModifiedTime()`
|
|
|
|
Returns `String` - Last-Modified header value.
|
|
|
|
#### `downloadItem.getETag()`
|
|
|
|
Returns `String` - ETag header value.
|
|
|
|
#### `downloadItem.getStartTime()`
|
|
|
|
Returns `Double` - Number of seconds since the UNIX epoch when the download was
|
|
started.
|
|
|
|
### Instance Properties
|
|
|
|
#### `downloadItem.savePath`
|
|
|
|
A `String` property that determines the save file path of the download item.
|
|
|
|
The property is only available in session's `will-download` callback function.
|
|
If user doesn't set the save path via the property, Electron will use the original
|
|
routine to determine the save path; this usually prompts a save dialog.
|
|
|
|
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
|