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 { _ } = require('lib/locale.js');
|
||||||
|
const { dirname } = require('lib/path-utils.js');
|
||||||
const { Logger } = require('lib/logger.js');
|
const { Logger } = require('lib/logger.js');
|
||||||
|
|
||||||
class Bridge {
|
class Bridge {
|
||||||
@ -6,6 +7,7 @@ class Bridge {
|
|||||||
constructor(electronWrapper) {
|
constructor(electronWrapper) {
|
||||||
this.electronWrapper_ = electronWrapper;
|
this.electronWrapper_ = electronWrapper;
|
||||||
this.autoUpdateLogger_ = null;
|
this.autoUpdateLogger_ = null;
|
||||||
|
this.lastSelectedPath_ = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
electronApp() {
|
electronApp() {
|
||||||
@ -39,7 +41,13 @@ class Bridge {
|
|||||||
|
|
||||||
showOpenDialog(options) {
|
showOpenDialog(options) {
|
||||||
const {dialog} = require('electron');
|
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) {
|
showMessageBox(options) {
|
||||||
|
@ -339,23 +339,26 @@ class NoteTextComponent extends React.Component {
|
|||||||
if (!noteId) return;
|
if (!noteId) return;
|
||||||
|
|
||||||
const filePaths = bridge().showOpenDialog({
|
const filePaths = bridge().showOpenDialog({
|
||||||
properties: ['openFile', 'createDirectory'],
|
properties: ['openFile', 'createDirectory', 'multiSelections'],
|
||||||
});
|
});
|
||||||
if (!filePaths || !filePaths.length) return;
|
if (!filePaths || !filePaths.length) return;
|
||||||
|
|
||||||
await this.saveIfNeeded();
|
await this.saveIfNeeded();
|
||||||
const note = await Note.load(noteId);
|
let note = await Note.load(noteId);
|
||||||
|
|
||||||
try {
|
for (let i = 0; i < filePaths.length; i++) {
|
||||||
reg.logger().info('Attaching ' + filePaths[0]);
|
const filePath = filePaths[i];
|
||||||
const newNote = await shim.attachFileToNote(note, filePaths[0]);
|
try {
|
||||||
reg.logger().info('File was attached.');
|
reg.logger().info('Attaching ' + filePath);
|
||||||
this.setState({
|
note = await shim.attachFileToNote(note, filePath);
|
||||||
note: newNote,
|
reg.logger().info('File was attached.');
|
||||||
lastSavedNote: Object.assign({}, newNote),
|
this.setState({
|
||||||
});
|
note: Object.assign({}, note),
|
||||||
} catch (error) {
|
lastSavedNote: Object.assign({}, note),
|
||||||
reg.logger().error(error);
|
});
|
||||||
|
} 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 { time } = require('lib/time-utils.js');
|
||||||
const { setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale.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() {
|
function shimInit() {
|
||||||
shim.fs = fs;
|
shim.fs = fs;
|
||||||
shim.FileApiDriverLocal = FileApiDriverLocal;
|
shim.FileApiDriverLocal = FileApiDriverLocal;
|
||||||
|
Loading…
Reference in New Issue
Block a user