mirror of
https://github.com/laurent22/joplin.git
synced 2025-01-11 18:24:43 +02:00
Electron: Allow exporting only selected notes or notebook
This commit is contained in:
parent
a078947d6d
commit
23c5934a7d
@ -172,6 +172,8 @@ class ElectronAppWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ensureSingleInstance() {
|
ensureSingleInstance() {
|
||||||
|
if (this.env_ === 'dev') return false;
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const alreadyRunning = this.electronApp_.makeSingleInstance((commandLine, workingDirectory) => {
|
const alreadyRunning = this.electronApp_.makeSingleInstance((commandLine, workingDirectory) => {
|
||||||
const win = this.window();
|
const win = this.window();
|
||||||
|
51
ElectronClient/app/InteropServiceHelper.js
Normal file
51
ElectronClient/app/InteropServiceHelper.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
const { _ } = require('lib/locale');
|
||||||
|
const { bridge } = require('electron').remote.require('./bridge');
|
||||||
|
const InteropService = require('lib/services/InteropService');
|
||||||
|
|
||||||
|
class InteropServiceHelper {
|
||||||
|
|
||||||
|
static async export(dispatch, module, options = null) {
|
||||||
|
if (!options) options = {};
|
||||||
|
|
||||||
|
let path = null;
|
||||||
|
|
||||||
|
if (module.target === 'file') {
|
||||||
|
path = bridge().showSaveDialog({
|
||||||
|
filters: [{ name: module.description, extensions: [module.fileExtension]}]
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
path = bridge().showOpenDialog({
|
||||||
|
properties: ['openDirectory', 'createDirectory'],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!path || (Array.isArray(path) && !path.length)) return;
|
||||||
|
|
||||||
|
if (Array.isArray(path)) path = path[0];
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: 'WINDOW_COMMAND',
|
||||||
|
name: 'showModalMessage',
|
||||||
|
message: _('Exporting to "%s" as "%s" format. Please wait...', path, module.format),
|
||||||
|
});
|
||||||
|
|
||||||
|
const exportOptions = {};
|
||||||
|
exportOptions.path = path;
|
||||||
|
exportOptions.format = module.format;
|
||||||
|
if (options.sourceFolderIds) exportOptions.sourceFolderIds = options.sourceFolderIds;
|
||||||
|
if (options.sourceNoteIds) exportOptions.sourceNoteIds = options.sourceNoteIds;
|
||||||
|
|
||||||
|
const service = new InteropService();
|
||||||
|
const result = await service.export(exportOptions);
|
||||||
|
|
||||||
|
console.info('Export result: ', result);
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: 'WINDOW_COMMAND',
|
||||||
|
name: 'hideModalMessage',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = InteropServiceHelper;
|
@ -21,6 +21,7 @@ const AlarmService = require('lib/services/AlarmService.js');
|
|||||||
const AlarmServiceDriverNode = require('lib/services/AlarmServiceDriverNode');
|
const AlarmServiceDriverNode = require('lib/services/AlarmServiceDriverNode');
|
||||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||||
const InteropService = require('lib/services/InteropService');
|
const InteropService = require('lib/services/InteropService');
|
||||||
|
const InteropServiceHelper = require('./InteropServiceHelper.js');
|
||||||
|
|
||||||
const { bridge } = require('electron').remote.require('./bridge');
|
const { bridge } = require('electron').remote.require('./bridge');
|
||||||
const Menu = bridge().Menu;
|
const Menu = bridge().Menu;
|
||||||
@ -203,41 +204,7 @@ class Application extends BaseApplication {
|
|||||||
label: module.format + ' - ' + module.description,
|
label: module.format + ' - ' + module.description,
|
||||||
screens: ['Main'],
|
screens: ['Main'],
|
||||||
click: async () => {
|
click: async () => {
|
||||||
let path = null;
|
await InteropServiceHelper.export(this.dispatch.bind(this), module);
|
||||||
|
|
||||||
if (module.target === 'file') {
|
|
||||||
path = bridge().showSaveDialog({
|
|
||||||
filters: [{ name: module.description, extensions: [module.fileExtension]}]
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
path = bridge().showOpenDialog({
|
|
||||||
properties: ['openDirectory', 'createDirectory'],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!path || (Array.isArray(path) && !path.length)) return;
|
|
||||||
|
|
||||||
if (Array.isArray(path)) path = path[0];
|
|
||||||
|
|
||||||
this.dispatch({
|
|
||||||
type: 'WINDOW_COMMAND',
|
|
||||||
name: 'showModalMessage',
|
|
||||||
message: _('Exporting to "%s" as "%s" format. Please wait...', path, module.format),
|
|
||||||
});
|
|
||||||
|
|
||||||
const exportOptions = {};
|
|
||||||
exportOptions.path = path;
|
|
||||||
exportOptions.format = module.format;
|
|
||||||
|
|
||||||
const service = new InteropService();
|
|
||||||
const result = await service.export(exportOptions);
|
|
||||||
|
|
||||||
console.info('Export result: ', result);
|
|
||||||
|
|
||||||
this.dispatch({
|
|
||||||
type: 'WINDOW_COMMAND',
|
|
||||||
name: 'hideModalMessage',
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -9,6 +9,8 @@ const { bridge } = require('electron').remote.require('./bridge');
|
|||||||
const Menu = bridge().Menu;
|
const Menu = bridge().Menu;
|
||||||
const MenuItem = bridge().MenuItem;
|
const MenuItem = bridge().MenuItem;
|
||||||
const eventManager = require('../eventManager');
|
const eventManager = require('../eventManager');
|
||||||
|
const InteropService = require('lib/services/InteropService');
|
||||||
|
const InteropServiceHelper = require('../InteropServiceHelper.js');
|
||||||
|
|
||||||
class NoteListComponent extends React.Component {
|
class NoteListComponent extends React.Component {
|
||||||
|
|
||||||
@ -91,6 +93,12 @@ class NoteListComponent extends React.Component {
|
|||||||
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
eventManager.emit('noteTypeToggle', { noteId: note.id });
|
||||||
}
|
}
|
||||||
}}));
|
}}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({label: _('Export'), click: async () => {
|
||||||
|
const ioService = new InteropService();
|
||||||
|
const module = ioService.moduleByFormat_('exporter', 'jex');
|
||||||
|
await InteropServiceHelper.export(this.props.dispatch.bind(this), module, { sourceNoteIds: noteIds });
|
||||||
|
}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.append(new MenuItem({label: _('Delete'), click: async () => {
|
menu.append(new MenuItem({label: _('Delete'), click: async () => {
|
||||||
|
@ -11,6 +11,7 @@ const { themeStyle } = require('../theme.js');
|
|||||||
const { bridge } = require('electron').remote.require('./bridge');
|
const { bridge } = require('electron').remote.require('./bridge');
|
||||||
const Menu = bridge().Menu;
|
const Menu = bridge().Menu;
|
||||||
const MenuItem = bridge().MenuItem;
|
const MenuItem = bridge().MenuItem;
|
||||||
|
const InteropServiceHelper = require('../InteropServiceHelper.js');
|
||||||
|
|
||||||
class SideBarComponent extends React.Component {
|
class SideBarComponent extends React.Component {
|
||||||
|
|
||||||
@ -136,7 +137,17 @@ class SideBarComponent extends React.Component {
|
|||||||
name: 'renameFolder',
|
name: 'renameFolder',
|
||||||
id: itemId,
|
id: itemId,
|
||||||
});
|
});
|
||||||
}}))
|
}}));
|
||||||
|
|
||||||
|
menu.append(new MenuItem({ type: 'separator' }));
|
||||||
|
|
||||||
|
const InteropService = require('lib/services/InteropService.js');
|
||||||
|
|
||||||
|
menu.append(new MenuItem({label: _('Export'), click: async () => {
|
||||||
|
const ioService = new InteropService();
|
||||||
|
const module = ioService.moduleByFormat_('exporter', 'jex');
|
||||||
|
await InteropServiceHelper.export(this.props.dispatch.bind(this), module, { sourceFolderIds: [itemId] });
|
||||||
|
}}));
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.popup(bridge().window());
|
menu.popup(bridge().window());
|
||||||
|
Loading…
Reference in New Issue
Block a user