mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Electron: Allow attaching multiple files
This commit is contained in:
parent
dbeff4fd7d
commit
4dce9e9e47
@ -1,4 +1,5 @@
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { dirname } = require('lib/path-utils.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
|
||||
class Bridge {
|
||||
@ -6,6 +7,7 @@ class Bridge {
|
||||
constructor(electronWrapper) {
|
||||
this.electronWrapper_ = electronWrapper;
|
||||
this.autoUpdateLogger_ = null;
|
||||
this.lastSelectedPath_ = null;
|
||||
}
|
||||
|
||||
electronApp() {
|
||||
@ -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) {
|
||||
|
@ -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);
|
||||
let 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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user