Skip to content

Commit

Permalink
Electron: Allow attaching multiple files
Browse files Browse the repository at this point in the history
  • Loading branch information
laurent22 committed Dec 1, 2017
1 parent dbeff4f commit 4dce9e9
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 52 deletions.
10 changes: 9 additions & 1 deletion ElectronClient/app/bridge.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
const { _ } = require('lib/locale.js');
const { dirname } = require('lib/path-utils.js');
const { Logger } = require('lib/logger.js');

class Bridge {

constructor(electronWrapper) {
this.electronWrapper_ = electronWrapper;
this.autoUpdateLogger_ = null;
this.lastSelectedPath_ = null;
}

electronApp() {
Expand Down Expand Up @@ -39,7 +41,13 @@ class Bridge {

showOpenDialog(options) {
const {dialog} = require('electron');
return dialog.showOpenDialog(options);
if (!options) options = {};
if (!('defaultPath' in options) && this.lastSelectedPath_) options.defaultPath = this.lastSelectedPath_;
const filePaths = dialog.showOpenDialog(options);
if (filePaths && filePaths.length) {
this.lastSelectedPath_ = dirname(filePaths[0]);
}
return filePaths;
}

showMessageBox(options) {
Expand Down
29 changes: 16 additions & 13 deletions ElectronClient/app/gui/NoteText.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -339,23 +339,26 @@ class NoteTextComponent extends React.Component {
if (!noteId) return;

const filePaths = bridge().showOpenDialog({
properties: ['openFile', 'createDirectory'],
properties: ['openFile', 'createDirectory', 'multiSelections'],
});
if (!filePaths || !filePaths.length) return;

await this.saveIfNeeded();
const note = await Note.load(noteId);

try {
reg.logger().info('Attaching ' + filePaths[0]);
const newNote = await shim.attachFileToNote(note, filePaths[0]);
reg.logger().info('File was attached.');
this.setState({
note: newNote,
lastSavedNote: Object.assign({}, newNote),
});
} catch (error) {
reg.logger().error(error);
let note = await Note.load(noteId);

for (let i = 0; i < filePaths.length; i++) {
const filePath = filePaths[i];
try {
reg.logger().info('Attaching ' + filePath);
note = await shim.attachFileToNote(note, filePath);
reg.logger().info('File was attached.');
this.setState({
note: Object.assign({}, note),
lastSavedNote: Object.assign({}, note),
});
} catch (error) {
reg.logger().error(error);
}
}
}

Expand Down
38 changes: 0 additions & 38 deletions ReactNativeClient/lib/shim-init-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,44 +5,6 @@ const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
const { time } = require('lib/time-utils.js');
const { setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale.js');

// // Node requests can go wrong is so many different ways and with so
// // many different error messages... This handler inspects the error
// // and decides whether the request can safely be repeated or not.
// function fetchRequestCanBeRetried(error) {
// if (!error) return false;

// // Unfortunately the error 'Network request failed' doesn't have a type
// // or error code, so hopefully that message won't change and is not localized
// if (error.message == 'Network request failed') return true;

// // request to https://public-ch3302....1fab24cb1bd5f.md failed, reason: socket hang up"
// if (error.code == 'ECONNRESET') return true;

// // OneDrive (or Node?) sometimes sends back a "not found" error for resources
// // that definitely exist and in this case repeating the request works.
// // Error is:
// // request to https://graph.microsoft.com/v1.0/drive/special/approot failed, reason: getaddrinfo ENOTFOUND graph.microsoft.com graph.microsoft.com:443
// if (error.code == 'ENOTFOUND') return true;

// // network timeout at: https://public-ch3302...859f9b0e3ab.md
// if (error.message && error.message.indexOf('network timeout') === 0) return true;

// // name: 'FetchError',
// // message: 'request to https://api.ipify.org/?format=json failed, reason: getaddrinfo EAI_AGAIN api.ipify.org:443',
// // type: 'system',
// // errno: 'EAI_AGAIN',
// // code: 'EAI_AGAIN' } } reason: { FetchError: request to https://api.ipify.org/?format=json failed, reason: getaddrinfo EAI_AGAIN api.ipify.org:443
// //
// // It's a Microsoft error: "A temporary failure in name resolution occurred."
// if (error.code == 'EAI_AGAIN') return true;

// // request to https://public-...8fd8bc6bb68e9c4d17a.md failed, reason: connect ETIMEDOUT 204.79.197.213:443
// // Code: ETIMEDOUT
// if (error.code === 'ETIMEDOUT') return true;

// return false;
// }

function shimInit() {
shim.fs = fs;
shim.FileApiDriverLocal = FileApiDriverLocal;
Expand Down

0 comments on commit 4dce9e9

Please sign in to comment.