From 6b982e13de89bf56fbb9f9a79cd9af7dee5829fa Mon Sep 17 00:00:00 2001 From: faselbaum Date: Thu, 20 Sep 2018 12:43:50 +0200 Subject: [PATCH] fix: open files via double-click & cli args (#619) * fix: open file cli arg * fix: open file on mac --- src/electron/main.ts | 18 +++++++++++++++++- src/electron/start-app.ts | 39 ++++++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/electron/main.ts b/src/electron/main.ts index 6613ca49d..3499f9f57 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -17,10 +17,16 @@ const CONTEXT: AppContext = Mobx.observable({ sender: undefined, win: undefined, hot: undefined, - middlewares: [] + middlewares: [], + fileToOpen: undefined }); async function main(): Promise { + if (process.argv.length > 1) { + const fileToOpenArg = process.argv[1]; + CONTEXT.fileToOpen = fileToOpenArg; + } + const args = yargsParser(process.argv.slice(2)); CONTEXT.hot = args.hot || false; CONTEXT.base = args.base || ''; @@ -67,6 +73,16 @@ async function main(): Promise { }); } +Electron.app.on('open-file', async (event, path) => { + event.preventDefault(); + + if (!path) { + return; + } + + CONTEXT.fileToOpen = path; +}); + Electron.app.on('ready', main); Electron.app.on('window-all-closed', () => { diff --git a/src/electron/start-app.ts b/src/electron/start-app.ts index 655ccc796..ef10eddbd 100644 --- a/src/electron/start-app.ts +++ b/src/electron/start-app.ts @@ -8,6 +8,7 @@ import * as getPort from 'get-port'; import * as Message from '../message'; import * as Mobx from 'mobx'; import * as Model from '../model'; +import * as Fs from 'fs'; import { Sender } from '../sender/server'; import { showMainMenu } from './show-main-menu'; import { createServer } from '../server'; @@ -26,6 +27,7 @@ export interface AppContext { sender: undefined | Sender; win: undefined | Electron.BrowserWindow; middlewares: Express.RequestHandler[]; + fileToOpen: string | undefined; } export async function startApp(ctx: AppContext): Promise<{ emitter: Events.EventEmitter }> { @@ -66,30 +68,37 @@ export async function startApp(ctx: AppContext): Promise<{ emitter: Events.Event server.on('client-message', e => sender.send(e)); - const onClose = e => { - e.preventDefault(); - sender.send({ - type: Message.MessageType.WindowClose, - id: uuid.v4(), - payload: undefined - }); - }; - - Electron.app.on('will-finish-launching', () => { - Electron.app.on('open-file', async (event, path) => { - event.preventDefault(); + Mobx.reaction( + () => ctx.fileToOpen, + () => { + if (!ctx.fileToOpen) { + return; + } - if (!path) { + // TODO: Move check to persistence.read and return appropriate error message. + if (!Fs.existsSync(ctx.fileToOpen)) { return; } sender.send({ id: uuid.v4(), type: Message.MessageType.OpenFileRequest, - payload: { path } + payload: { path: ctx.fileToOpen } }); + }, + { + fireImmediately: true + } + ); + + const onClose = e => { + e.preventDefault(); + sender.send({ + type: Message.MessageType.WindowClose, + id: uuid.v4(), + payload: undefined }); - }); + }; Electron.app.on('before-quit', async () => { await Mobx.when(() => typeof ctx.project === 'undefined');