diff --git a/app/src/components/mainWindow/mainWindow.js b/app/src/components/mainWindow/mainWindow.js index afccfb4..aaa09e8 100644 --- a/app/src/components/mainWindow/mainWindow.js +++ b/app/src/components/mainWindow/mainWindow.js @@ -55,7 +55,7 @@ function createMainWindow(options, onAppQuit, setDockBadge) { mainWindow.webContents.send('change-zoom', currentZoom); }; - createMenu(options.nativefierVersion, onAppQuit, mainWindow.webContents.goBack, mainWindow.webContents.goForward, onZoomIn, onZoomOut, mainWindow.webContents.getURL); + createMenu(options.nativefierVersion, onAppQuit, onZoomIn, onZoomOut, mainWindow, options); initContextMenu(mainWindow); if (options.userAgent) { diff --git a/app/src/components/menu/menu.js b/app/src/components/menu/menu.js index 663e4f6..81b8c3e 100644 --- a/app/src/components/menu/menu.js +++ b/app/src/components/menu/menu.js @@ -1,16 +1,15 @@ -import {Menu, shell, clipboard} from 'electron'; +import {Menu, shell, clipboard, dialog} from 'electron'; /** * * @param {string} nativefierVersion * @param {function} onQuit should be from app.quit - * @param {function} onGoBack - * @param {electron} onGoForward * @param {function} onZoomIn * @param {function} onZoomOut - * @param {function} getUrl + * @param {{}}} mainWindow + * @param {{}}} options */ -function createMenu(nativefierVersion, onQuit, onGoBack, onGoForward, onZoomIn, onZoomOut, getUrl) { +function createMenu(nativefierVersion, onQuit, onZoomIn, onZoomOut, mainWindow, options) { if (Menu.getApplicationMenu()) { return; } @@ -46,7 +45,7 @@ function createMenu(nativefierVersion, onQuit, onGoBack, onGoForward, onZoomIn, label: 'Copy Current URL', accelerator: 'CmdOrCtrl+C', click: () => { - const currentURL = getUrl(); + const currentURL = mainWindow.webContents.getURL(); clipboard.writeText(currentURL); } }, @@ -69,14 +68,14 @@ function createMenu(nativefierVersion, onQuit, onGoBack, onGoForward, onZoomIn, label: 'Back', accelerator: 'CmdOrCtrl+[', click: () => { - onGoBack(); + mainWindow.webContents.goBack(); } }, { label: 'Forward', accelerator: 'CmdOrCtrl+]', click: () => { - onGoForward(); + mainWindow.webContents.goForward(); } }, { @@ -129,6 +128,27 @@ function createMenu(nativefierVersion, onQuit, onGoBack, onGoForward, onZoomIn, onZoomOut(); } }, + { + label: 'Clear App Data', + click: () => { + dialog.showMessageBox(mainWindow, { + type: 'warning', + buttons: ['Yes', 'Cancel'], + defaultId: 1, + title: 'Clear cache confirmation', + message: 'This will clear all data (cookies, local storage etc) from this app. Are you sure you wish to proceed?' + }, response => { + if (response === 0) { + mainWindow.webContents.session.clearStorageData({}, + () => { + mainWindow.webContents.session.clearCache(() => { + mainWindow.loadURL(options.targetUrl); + }); + }); + } + }); + } + }, { label: 'Toggle Window Developer Tools', accelerator: (() => { diff --git a/src/build/buildApp.js b/src/build/buildApp.js index 7faa8b0..79ec1d0 100644 --- a/src/build/buildApp.js +++ b/src/build/buildApp.js @@ -24,15 +24,15 @@ function buildApp(src, dest, options, callback) { } fs.writeFileSync(path.join(dest, '/nativefier.json'), JSON.stringify(appArgs)); - changeAppPackageJsonName(dest, appArgs.name); + changeAppPackageJsonName(dest, appArgs.name, appArgs.targetUrl); callback(); }); } -function changeAppPackageJsonName(appPath, name) { +function changeAppPackageJsonName(appPath, name, url) { const packageJsonPath = path.join(appPath, '/package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath)); - packageJson.name = normalizeAppName(name); + packageJson.name = normalizeAppName(name, url); fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson)); } @@ -57,9 +57,11 @@ function selectAppArgs(options) { }; } -function normalizeAppName(appName) { +function normalizeAppName(appName, url) { // use a simple 3 byte random string to prevent collision - const postFixHash = crypto.randomBytes(3).toString('hex'); + let hash = crypto.createHash('md5'); + hash.update(url); + const postFixHash = hash.digest('hex').substring(0, 6); const normalized = _.kebabCase(appName.toLowerCase()); return `${normalized}-nativefier-${postFixHash}`; }