From cafc78c73480b8c55640331147c3f8d5f1383e81 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Sat, 11 Jan 2020 06:42:54 +0100 Subject: [PATCH 1/7] Download image throw prompt window, if window_.webContents does not exist --- index.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index c57b589..140b1fe 100644 --- a/index.js +++ b/index.js @@ -142,13 +142,24 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec unregisterWhenDone: true }; - registerListener(window_.webContents.session, options, (error, item) => { - if (error) { - reject(error); - } else { - resolve(item); - } - }); + if (window_.webContents) { + registerListener(window_.webContents.session, options, (error, item) => { + if (error) { + reject(error); + } else { + resolve(item); + } + }); - window_.webContents.downloadURL(url); + window_.webContents.downloadURL(url); + return; + } + + if (options.saveAs) { + const a = document.createElement('a'); + a.href = url; + a.download = url; + + a.click(); + } }); From 02a7b1bf4237f11dcd1716d15a52e215f6021bf5 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Sat, 11 Jan 2020 07:49:24 +0100 Subject: [PATCH 2/7] Handle correctly saving images for "Save image" menu item under webview --- index.js | 7 +++++++ package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/index.js b/index.js index 140b1fe..e8bee74 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,9 @@ const {app, BrowserWindow, shell, dialog} = require('electron'); const unusedFilename = require('unused-filename'); const pupa = require('pupa'); const extName = require('ext-name'); +const request = require('request'); +const downloadsFolder = require('downloads-folder'); +const fs = require('fs'); const getFilenameFromMime = (name, mime) => { const extensions = extName.mime(mime); @@ -162,4 +165,8 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec a.click(); } + + const folder = downloadsFolder() + url + '.jpeg'; + + request(url).pipe(fs.createWriteStream(downloadsFolder() + '/download.jpeg')); }); diff --git a/package.json b/package.json index 3ef0692..ec677dd 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "progress" ], "dependencies": { + "downloads-folder": "^1.0.2", "ext-name": "^5.0.0", "pupa": "^2.0.1", "unused-filename": "^2.1.0" From 48f69a4e88f204fabaa196b682f8ae4c9eb49142 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Sat, 11 Jan 2020 08:02:49 +0100 Subject: [PATCH 3/7] Added error handling --- index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index e8bee74..73a1fd7 100644 --- a/index.js +++ b/index.js @@ -168,5 +168,9 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec const folder = downloadsFolder() + url + '.jpeg'; - request(url).pipe(fs.createWriteStream(downloadsFolder() + '/download.jpeg')); + request(url) + .pipe(fs.createWriteStream(downloadsFolder() + '/download.jpeg')) + .on('error', (err) => { + console.error(err); + });; }); From cea18eb2d3b32bf6696004cb0d992dc2b476c648 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Sat, 11 Jan 2020 14:27:11 +0100 Subject: [PATCH 4/7] Fix lint errors --- index.js | 8 +++----- package.json | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 73a1fd7..f1ed197 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,12 @@ 'use strict'; const path = require('path'); const {app, BrowserWindow, shell, dialog} = require('electron'); +const fs = require('fs'); const unusedFilename = require('unused-filename'); const pupa = require('pupa'); const extName = require('ext-name'); const request = require('request'); const downloadsFolder = require('downloads-folder'); -const fs = require('fs'); const getFilenameFromMime = (name, mime) => { const extensions = extName.mime(mime); @@ -166,11 +166,9 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec a.click(); } - const folder = downloadsFolder() + url + '.jpeg'; - request(url) .pipe(fs.createWriteStream(downloadsFolder() + '/download.jpeg')) - .on('error', (err) => { + .on('error', err => { console.error(err); - });; + }); }); diff --git a/package.json b/package.json index ec677dd..27d3386 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "downloads-folder": "^1.0.2", "ext-name": "^5.0.0", "pupa": "^2.0.1", + "request": "^2.88.0", "unused-filename": "^2.1.0" }, "devDependencies": { From e83d414314c02e783aa8224a263183cdaae2a41e Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Tue, 21 Jan 2020 18:24:56 +0100 Subject: [PATCH 5/7] Code refactoring, saving images without request and downloads-folder dependencies --- index.js | 39 ++++++++++++++++++++++++++++++++------- package.json | 2 -- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index f1ed197..e7fde6b 100644 --- a/index.js +++ b/index.js @@ -2,11 +2,13 @@ const path = require('path'); const {app, BrowserWindow, shell, dialog} = require('electron'); const fs = require('fs'); +const https = require('https'); +const http = require('http'); +const stream = require('stream'); +const os = require('os'); const unusedFilename = require('unused-filename'); const pupa = require('pupa'); const extName = require('ext-name'); -const request = require('request'); -const downloadsFolder = require('downloads-folder'); const getFilenameFromMime = (name, mime) => { const extensions = extName.mime(mime); @@ -133,6 +135,32 @@ function registerListener(session, options, callback = () => {}) { session.on('will-download', listener); } +const downloadImageFromUrl = (url, filename) => { + let client = http; + + if (url.toString().indexOf('https') === 0) { + client = https; + } + + const request = client.request(url, response => { + const {Transform} = stream; + const data = new Transform(); + + response.on('data', chunk => { + data.push(chunk); + }); + + response.on('end', () => { + fs.writeFileSync(filename, data.read()); + }); + }); + + request.on('error', e => { + console.error(e); + }); + request.end(); +}; + module.exports = (options = {}) => { app.on('session-created', session => { registerListener(session, options); @@ -164,11 +192,8 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec a.download = url; a.click(); + return; } - request(url) - .pipe(fs.createWriteStream(downloadsFolder() + '/download.jpeg')) - .on('error', err => { - console.error(err); - }); + downloadImageFromUrl(url, os.homedir() + '/Downloads/image.jpeg'); }); diff --git a/package.json b/package.json index 27d3386..3ef0692 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,8 @@ "progress" ], "dependencies": { - "downloads-folder": "^1.0.2", "ext-name": "^5.0.0", "pupa": "^2.0.1", - "request": "^2.88.0", "unused-filename": "^2.1.0" }, "devDependencies": { From 866af00057be28ff21e6fff36f4fc16cfbc7d2f8 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Thu, 5 Mar 2020 16:13:27 +0100 Subject: [PATCH 6/7] Download image via ses.downloadURL if webContents not available --- index.js | 39 ++++----------------------------------- package.json | 2 +- 2 files changed, 5 insertions(+), 36 deletions(-) diff --git a/index.js b/index.js index e7fde6b..7d7ff83 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ 'use strict'; const path = require('path'); -const {app, BrowserWindow, shell, dialog} = require('electron'); +const {app, BrowserWindow, shell, dialog, session, remote} = require('electron'); const fs = require('fs'); const https = require('https'); const http = require('http'); @@ -135,32 +135,6 @@ function registerListener(session, options, callback = () => {}) { session.on('will-download', listener); } -const downloadImageFromUrl = (url, filename) => { - let client = http; - - if (url.toString().indexOf('https') === 0) { - client = https; - } - - const request = client.request(url, response => { - const {Transform} = stream; - const data = new Transform(); - - response.on('data', chunk => { - data.push(chunk); - }); - - response.on('end', () => { - fs.writeFileSync(filename, data.read()); - }); - }); - - request.on('error', e => { - console.error(e); - }); - request.end(); -}; - module.exports = (options = {}) => { app.on('session-created', session => { registerListener(session, options); @@ -186,14 +160,9 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec return; } - if (options.saveAs) { - const a = document.createElement('a'); - a.href = url; - a.download = url; + const ses = remote.session.fromPartition('persist:webview') - a.click(); - return; + if (ses) { + ses.downloadURL(url) } - - downloadImageFromUrl(url, os.homedir() + '/Downloads/image.jpeg'); }); diff --git a/package.json b/package.json index 3ef0692..13132bf 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@types/node": "^13.1.4", "ava": "^2.4.0", "cp-file": "^7.0.0", - "electron": "^7.1.7", + "electron": "^8.0.3", "minimist": "^1.2.0", "node-static": "^0.7.11", "pify": "^4.0.1", From 79bc1b8a3055db03c631be22859d615eb6a82951 Mon Sep 17 00:00:00 2001 From: Oleh Aloshkin Date: Thu, 5 Mar 2020 16:29:29 +0100 Subject: [PATCH 7/7] Fix linting errors --- index.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index 7d7ff83..4427d0b 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,6 @@ 'use strict'; const path = require('path'); -const {app, BrowserWindow, shell, dialog, session, remote} = require('electron'); -const fs = require('fs'); -const https = require('https'); -const http = require('http'); -const stream = require('stream'); -const os = require('os'); +const {app, BrowserWindow, shell, dialog, remote} = require('electron'); const unusedFilename = require('unused-filename'); const pupa = require('pupa'); const extName = require('ext-name'); @@ -160,9 +155,9 @@ module.exports.download = (window_, url, options) => new Promise((resolve, rejec return; } - const ses = remote.session.fromPartition('persist:webview') + const ses = remote.session.fromPartition('persist:webview'); if (ses) { - ses.downloadURL(url) + ses.downloadURL(url); } });