diff --git a/electron-preload.js b/electron-preload.js index ae606b8f..7f262505 100644 --- a/electron-preload.js +++ b/electron-preload.js @@ -3,27 +3,27 @@ const { ipcRenderer } = require('electron'); const fs = require('fs'); const modpath = require('path'); -// workspace root path -// TODO: reloading clears this -var wsroot = null; - -// from browser: read workspace file synchronously -window.getWorkspaceFile = function(path, filetype) { - if (wsroot == null) throw Error("no workspace root set"); - try { - // TODO: detect text or binary, or decide based on incbin vs. source file - var fullpath = modpath.join(wsroot, modpath.normalize(path)); - var data = fs.readFileSync(fullpath, {encoding:filetype=='text'?'utf8':'binary'}); - console.log("getWorkspaceFile", path, filetype); - // TODO: add to watched files - return data; - } catch (e) { - console.log(e); - return null; - } -} - process.once('loaded', () => { + // workspace root path + // reload() clears this, so we have to set it every time + var wsroot; + // from browser: read workspace file synchronously + window.getWorkspaceFile = function(path, filetype) { + if (wsroot == null) throw Error("no workspace root set"); + try { + // TODO: detect text or binary, or decide based on incbin vs. source file + var fullpath = modpath.join(wsroot, modpath.normalize(path)); + var encoding = filetype == 'text' ? 'utf8' : null; + var data = fs.readFileSync(fullpath, {encoding:encoding}); + if (encoding == null) data = new Uint8Array(data); + console.log("getWorkspaceFile", path, filetype, data.length); + // TODO: add to watched files + return data; + } catch (e) { + console.log(e); + return null; + } + } // from electron.js: set workspace root directory ipcRenderer.on('setWorkspaceRoot', (event, data) => { wsroot = data.root; diff --git a/electron.js b/electron.js index 6beead1f..ace72272 100644 --- a/electron.js +++ b/electron.js @@ -38,7 +38,7 @@ class Workspace { } } -function openFile(path) { +function openFile(path, wnd) { if (!fs.existsSync(path)) { dialog.showMessageBox({ type: "error", @@ -49,24 +49,38 @@ function openFile(path) { } var dirname = modpath.dirname(path); var filename = modpath.basename(path); - var wnd = BrowserWindow.getFocusedWindow(); - if (wnd.workspace) { wnd.workspace.close(); } + if (!wnd) wnd = BrowserWindow.getFocusedWindow(); var ws = new Workspace(dirname, filename, wnd); + if (wnd.workspace) { wnd.workspace.close(); } wnd.workspace = ws; wnd.on('closed', () => { ws.close(); }); + openWorkspace(wnd, ws); + app.addRecentDocument(path); + store.set(KEY_lastWorkspaceFilePath, path); +} + +function openWorkspace(wnd, ws) { var qs = new URLSearchParams(); qs.set('electron_ws', 1); - qs.set('repo', dirname); - qs.set('file', filename); + qs.set('repo', ws.directory); + qs.set('file', ws.mainfile); wnd.loadURL(`file://${__dirname}/electron.html?${qs}`).then(() => { - wnd.webContents.send('setWorkspaceRoot', {root:dirname}); - app.addRecentDocument(path); - store.set(KEY_lastWorkspaceFilePath, path); + wnd.webContents.send('setWorkspaceRoot', {root:ws.directory}); }); } +// TODO: doesn't work if browser window reloads itself +function reloadCurrentWindow() { + var wnd = BrowserWindow.getFocusedWindow(); + if (wnd.workspace) { + openWorkspace(wnd, wnd.workspace); + } else { + wnd.reload(); + } +} + function openFileDialog() { dialog.showOpenDialog({ title: "Open File", @@ -80,8 +94,11 @@ function openFileDialog() { } function openDefaultFile() { - createWindow(); - /* + var wnd = createWindow(); + if (process.argv.length >= 3) { + openFile(process.argv[2], wnd); + } + /* TODO var lastfile = store.get(KEY_lastWorkspaceFilePath); if (lastfile != null) { openFile(lastfile); @@ -182,8 +199,10 @@ function buildMenu() { { label: 'View', submenu: [ - { role: 'reload' }, - { role: 'forcereload' }, + { + label: 'Reload Window', + click: reloadCurrentWindow + }, { role: 'toggledevtools' }, { type: 'separator' }, { role: 'resetzoom' }, @@ -300,3 +319,4 @@ ipcMain.on('hello', (event, message) => { console.log(event); }); */ +