diff --git a/app/menu.js b/app/menu.js index 0a434d4c49..4574e120fa 100644 --- a/app/menu.js +++ b/app/menu.js @@ -2,14 +2,16 @@ const path = require('path'); const electron = require('electron'); const {runJS, is, appMenu, openUrlMenuItem, aboutMenuItem} = require('electron-util'); +const ipc = require('electron-better-ipc'); const i18next = require('i18next'); const config = require('./config'); const {openGitHubIssue} = require('./util'); const {websiteUrl, repoUrl, appViews, supportedLanguagesWithNames} = require('./constants'); const {isDevelopment, isNightlyBuild} = require('./util-common'); const {translate} = require('./locale'); +const {portfoliosDirectoryPath, getPortfolioFilePath} = require('./portfolio-util'); -const {app, BrowserWindow, shell, clipboard, ipcMain: ipc, Menu} = electron; +const {app, BrowserWindow, shell, clipboard, Menu} = electron; const t = translate('menu'); const sendAction = (action, data) => { @@ -141,15 +143,22 @@ const createDebugMenu = () => { type: 'separator', }, { - label: 'Show Portfolios', + label: 'Show Settings', click() { - shell.openItem(path.join(app.getPath('userData'), 'portfolios')); + config.openInEditor(); }, }, { - label: 'Show Settings', + label: 'Show Current Portfolio', + async click(menuItem, win) { + const id = await ipc.callRenderer(win, 'current-portfolio-id'); + shell.openItem(getPortfolioFilePath(id)); + }, + }, + { + label: 'Show Portfolios', click() { - config.openInEditor(); + shell.openItem(portfoliosDirectoryPath); }, }, { diff --git a/app/portfolio-util.js b/app/portfolio-util.js index 241a371d4e..3a7b069bf1 100644 --- a/app/portfolio-util.js +++ b/app/portfolio-util.js @@ -12,12 +12,11 @@ const {translate} = require('./locale'); const config = require('./config'); const {defaultEnabledCurrencies} = require('./constants'); -const portfolioPath = path.join(app.getPath('userData'), 'portfolios'); const t = translate('login'); - +const portfoliosDirectoryPath = path.join(app.getPath('userData'), 'portfolios'); const idToFileName = id => `hyperdex-portfolio-${id}.json`; const fileNameToId = fileName => fileName.replace(/^hyperdex-portfolio-/, '').replace(/\.json$/, ''); -const idToFilePath = id => path.join(portfolioPath, idToFileName(id)); +const idToFilePath = id => path.join(portfoliosDirectoryPath, idToFileName(id)); const generateId = name => `${slugify(name).slice(0, 40)}-${randomString(6)}`; class IncorrectPasswordError extends Error { @@ -94,7 +93,7 @@ const removeDnrCurrency = async id => { const getPortfolios = async () => { let portfolioFiles; try { - portfolioFiles = await dir.promiseFiles(portfolioPath); + portfolioFiles = await dir.promiseFiles(portfoliosDirectoryPath); } catch (error) { if (error.code === 'ENOENT') { return []; @@ -147,4 +146,6 @@ module.exports = { getPortfolios, decryptSeedPhrase, setCurrencies, + portfoliosDirectoryPath, + getPortfolioFilePath: idToFilePath, }; diff --git a/app/renderer/containers/App.js b/app/renderer/containers/App.js index 49828d77ab..9566f48a10 100644 --- a/app/renderer/containers/App.js +++ b/app/renderer/containers/App.js @@ -322,6 +322,8 @@ appContainer.subscribe(() => { // We send an initial event so it can show the correct menu state after logging out ipc.send('app-container-state-updated', appContainer.state); +ipc.answerMain('current-portfolio-id', () => appContainer.state.portfolio.id); + window.addEventListener('beforeunload', () => { ipc.callMain('stop-marketmaker'); });