From c823e18699ea66529b73a5af5d14728436f44d21 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 17 Mar 2021 19:12:15 +0100 Subject: [PATCH] open file command --- app/src/electron.js | 15 ++--------- packages/web/src/commands/stdCommands.ts | 14 ++++++++++ packages/web/src/utility/openElectronFile.ts | 27 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/app/src/electron.js b/app/src/electron.js index a8e850360..0fd79a5bd 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -56,12 +56,7 @@ function buildMenu() { label: 'File', submenu: [ commandItem('new.connection'), - { - label: 'Open file', - click() { - mainWindow.webContents.executeJavaScript(`dbgate_openFile()`); - }, - }, + commandItem('file.open'), commandItem('group.save'), commandItem('group.saveAs'), { type: 'separator' }, @@ -70,13 +65,7 @@ function buildMenu() { }, { label: 'Window', - submenu: [ - commandItem('new.query'), - { type: 'separator' }, - - commandItem('tabs.closeAll'), - { role: 'minimize' }, - ], + submenu: [commandItem('new.query'), { type: 'separator' }, commandItem('tabs.closeAll'), { role: 'minimize' }], }, // { diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index 3e0b3083e..f1a903852 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -8,6 +8,10 @@ import { showModal } from '../modals/modalTools'; import newQuery from '../query/newQuery'; import saveTabFile from '../utility/saveTabFile'; import openNewTab from '../utility/openNewTab'; +import getElectron from '../utility/getElectron'; +import { openElectronFile } from '../utility/openElectronFile'; + +const electron = getElectron(); function themeCommand(theme: ThemeDefinition) { return { @@ -136,6 +140,16 @@ registerCommand({ group: 'saveAs', }); +if (electron) { + registerCommand({ + id: 'file.open', + category: 'File', + name: 'Open', + keyText: 'Ctrl+O', + onClick: openElectronFile, + }); +} + export function registerFileCommands({ idPrefix, category, diff --git a/packages/web/src/utility/openElectronFile.ts b/packages/web/src/utility/openElectronFile.ts index f107132f7..71eb4dcaa 100644 --- a/packages/web/src/utility/openElectronFile.ts +++ b/packages/web/src/utility/openElectronFile.ts @@ -1,6 +1,9 @@ import { showModal } from '../modals/modalTools'; +import { get } from 'svelte/store'; import newQuery from '../query/newQuery'; import ImportExportModal from '../modals/ImportExportModal.svelte'; +import getElectron from './getElectron'; +import { extensions } from '../stores'; export function canOpenByElectron(file, extensions) { if (!file) return false; @@ -45,3 +48,27 @@ export function openElectronFileCore(filePath, extensions) { } } } + +function getFileFormatFilters(extensions) { + return extensions.fileFormats.filter(x => x.readerFunc).map(x => ({ name: x.name, extensions: [x.extension] })); +} + +function getFileFormatExtensions(extensions) { + return extensions.fileFormats.filter(x => x.readerFunc).map(x => x.extension); +} + +export function openElectronFile() { + const electron = getElectron(); + const ext = get(extensions); + const filePaths = electron.remote.dialog.showOpenDialogSync(electron.remote.getCurrentWindow(), { + filters: [ + { name: `All supported files`, extensions: ['sql', ...getFileFormatExtensions(ext)] }, + { name: `SQL files`, extensions: ['sql'] }, + ...getFileFormatFilters(ext), + ], + }); + const filePath = filePaths && filePaths[0]; + if (canOpenByElectron(filePath, ext)) { + openElectronFileCore(filePath, ext); + } +}