diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cc6342b..b153617 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,6 +4,16 @@ stages: - installer - check +js_syntax: + retry: 1 + stage: check + image: node:carbon + tags: [ docker ] + before_script: + - npm install -g acorn + script: + - find . -iname "*.js" -print0 | xargs -0 -I % sh -c 'echo "%"; acorn --ecma6 --silent "%"' + dependency_scanning: stage: check only: diff --git a/js/app.js b/js/app.js index d6ab208..b6de1b6 100644 --- a/js/app.js +++ b/js/app.js @@ -18,10 +18,15 @@ ready(function(){ updatePresetList(); checkForNewRelease(); document.isStarting = false; - settings.set('settings', { - ...settings.get('settings'), - first_launch: false - }); + + + settings.set('settings', + Object.assign( + {}, + settings.get('settings'), + { first_launch: false } + ) + ); }); /** diff --git a/js/methods.js b/js/methods.js index 82136bc..c87a7b9 100644 --- a/js/methods.js +++ b/js/methods.js @@ -149,10 +149,15 @@ function askingForRyzenAdjExecutablePath() { }, function (filePaths) { if (typeof filePaths[0] !== 'undefined') { const settings = require('electron-settings'); - settings.set("settings", { - ...settings.get('settings'), - ryzen_adj_path: filePaths[0] - }); + + settings.set("settings", + Object.assign( + {}, + settings.get('settings'), + { ryzen_adj_path: filePaths[0] } + ) + ); + notification('primary', 'Path to ryzenAdj.exe has been saved.'); appendLog(`askingForRyzenAdjExecutablePath(): ${filePaths[0]}`); } else { @@ -249,39 +254,69 @@ function registerEventListenerForSettingsInput() { var apply_last_settings_on_launch = document.getElementById('apply_last_settings_on_launch'); apply_last_settings_on_launch.addEventListener('change', function() { - settings.set('settings', { - ...settings.get('settings'), - apply_last_settings_on_launch: !!apply_last_settings_on_launch.checked - }); + + settings.set( + "settings", + Object.assign( + {}, + settings.get('settings'), + { apply_last_settings_on_launch: !!apply_last_settings_on_launch.checked } + ) + ); + }); var minimize_to_tray = document.getElementById('minimize_to_tray'); minimize_to_tray.addEventListener('change', function() { - settings.set('settings', { - ...settings.get('settings'), - minimize_to_tray: !!minimize_to_tray.checked - }); + + settings.set( + "settings", + Object.assign( + {}, + settings.get('settings'), + { minimize_to_tray: !!minimize_to_tray.checked } + ) + ); + }); var start_minimized = document.getElementById('start_minimized'); start_minimized.addEventListener('change', function() { - settings.set('settings', { - ...settings.get('settings'), - start_minimized: !!start_minimized.checked - }); + + settings.set( + "settings", + Object.assign( + {}, + settings.get('settings'), + { start_minimized: !!start_minimized.checked } + ) + ); + }); var reapply_periodically = document.getElementById('reapply_periodically'); reapply_periodically.addEventListener('change', function() { reApplyPeriodically(reapply_periodically.value); - settings.set('settings', { - ...settings.get('settings'), - reapply_periodically: reapply_periodically.value - }); + + settings.set( + "settings", + Object.assign( + {}, + settings.get('settings'), + { reapply_periodically: reapply_periodically.value } + ) + ); + }); // var start_at_boot = document.getElementById('start_at_boot'); // start_at_boot.addEventListener('change', function() { - // settings.set('settings', { - // ...settings.get('settings'), - // start_at_boot: !!start_at_boot.checked - // }); + // + // settings.set( + // "settings", + // Object.assign( + // {}, + // settings.get('settings'), + // { start_at_boot: !!start_at_boot.checked } + // ) + // ); + // // require('electron').remote.app.setLoginItemSettings({ openAtLogin: !!start_at_boot.checked }); // }); } @@ -422,10 +457,12 @@ function saveToNewPreset() { notification('warning', `This preset name already exist, your preset has been saved with the name "${newPresetName}".`); } - const newPresetList = { - ...currentPresets, - [newPresetName]: settingsToBeSaved, - }; + const newPresetList = Object.assign( + {}, + currentPresets, + { [newPresetName]: settingsToBeSaved } + ); + require('electron-settings').set('presets', newPresetList); appendLog(`saveToNewPreset(): Saved preset ${newPresetName}, ${JSON.stringify(newPresetList)}`); updatePresetList(); diff --git a/main.js b/main.js index 07649d0..05bab26 100644 --- a/main.js +++ b/main.js @@ -1,218 +1,224 @@ // Handle setupevents as quickly as possible const setupEvents = require('./installers/setupEvents') -if (setupEvents.handleSquirrelEvent()) { - // squirrel event handled and app will exit in 1000ms, so don't do anything else - return; -} -// Modules to control application life and create native browser window -const {app, BrowserWindow, Menu, Tray} = require('electron') -const settings = require('electron-settings'); +// squirrel event handled and app will exit in 1000ms, so don't do anything else +if (!setupEvents.handleSquirrelEvent()) { -// Check and apply start_on_boot option. -app.setLoginItemSettings({ openAtLogin: !!settings.get('settings.start_at_boot') }); + // Modules to control application life and create native browser window + const {app, BrowserWindow, Menu, Tray} = require('electron') + const settings = require('electron-settings'); -// Check for latest used version and clear settings if needed. -const old_version = settings.get('settings.last_used_version'); -const new_version = require('./package.json').version; -if (old_version !== new_version) { - var compareVersions = require('compare-versions'); + // Check and apply start_on_boot option. + app.setLoginItemSettings({ openAtLogin: !!settings.get('settings.start_at_boot') }); - /** - * Since 1.4.0, ryzenadj is included in the windows package. - * So we are removing ryzenadj path as it can be included. - */ - if (compareVersions(old_version, '1.4.0') <= 0) { - settings.delete('settings.ryzen_adj_path'); - } + // Check for latest used version and clear settings if needed. + const old_version = settings.get('settings.last_used_version'); + const new_version = require('./package.json').version; + if (old_version !== new_version) { + var compareVersions = require('compare-versions'); - /** - * Since 1.11.0 we added new settings and apply checkbox, - * We need to add new settings to presets. - */ - if (compareVersions(old_version, '1.11.0') <= 0) { - const update_latest_settings_to_1_11_0 = function(settings) { - var updated_settings = {}; - for (const setting_name in settings) { - if (settings.hasOwnProperty(setting_name)) { - const setting_value = settings[setting_name]; - // Register current setting. - updated_settings[setting_name] = setting_value; - // Add apply checkbox to any non-range settings. - if (setting_name.indexOf('_range') <= 0) { - if (setting_name.indexOf('apply_') <= 0) { - updated_settings[`apply_${setting_name}`] = true; - continue; - } - } - } - } - // Adding missing options. - updated_settings['apply_stapm_time_ms'] = false; - updated_settings['apply_psi0_current_limit'] = false; - return updated_settings; - }; - const update_presets_to_1_11_0 = function(preset_list) { - var updated_preset_list = {}; - // For each preset. - for (const preset_name in preset_list) { - if (preset_list.hasOwnProperty(preset_name)) { - const preset_settings = preset_list[preset_name]; - updated_preset_list[preset_name] = {}; - // For each setting. - for (const setting_name in preset_settings) { - if (preset_settings.hasOwnProperty(setting_name)) { - const setting_value = preset_settings[setting_name]; - // Register current setting. - updated_preset_list[preset_name][setting_name] = setting_value; - if (setting_name.indexOf('_range') <= 0) { - continue; - } + /** + * Since 1.4.0, ryzenadj is included in the windows package. + * So we are removing ryzenadj path as it can be included. + */ + if (compareVersions(old_version, '1.4.0') <= 0) { + settings.delete('settings.ryzen_adj_path'); + } + + /** + * Since 1.11.0 we added new settings and apply checkbox, + * We need to add new settings to presets. + */ + if (compareVersions(old_version, '1.11.0') <= 0) { + const update_latest_settings_to_1_11_0 = function(settings) { + var updated_settings = {}; + for (const setting_name in settings) { + if (settings.hasOwnProperty(setting_name)) { + const setting_value = settings[setting_name]; + // Register current setting. + updated_settings[setting_name] = setting_value; + // Add apply checkbox to any non-range settings. + if (setting_name.indexOf('_range') <= 0) { if (setting_name.indexOf('apply_') <= 0) { - // Add apply checkbox. - updated_preset_list[preset_name][`apply_${setting_name}`] = true; + updated_settings[`apply_${setting_name}`] = true; continue; } } } - // Adding missing options. - updated_preset_list[preset_name]['apply_stapm_time_ms'] = false; - updated_preset_list[preset_name]['apply_psi0_current_limit'] = false; + } + // Adding missing options. + updated_settings['apply_stapm_time_ms'] = false; + updated_settings['apply_psi0_current_limit'] = false; + return updated_settings; + }; + const update_presets_to_1_11_0 = function(preset_list) { + var updated_preset_list = {}; + // For each preset. + for (const preset_name in preset_list) { + if (preset_list.hasOwnProperty(preset_name)) { + const preset_settings = preset_list[preset_name]; + updated_preset_list[preset_name] = {}; + // For each setting. + for (const setting_name in preset_settings) { + if (preset_settings.hasOwnProperty(setting_name)) { + const setting_value = preset_settings[setting_name]; + // Register current setting. + updated_preset_list[preset_name][setting_name] = setting_value; + if (setting_name.indexOf('_range') <= 0) { + continue; + } + if (setting_name.indexOf('apply_') <= 0) { + // Add apply checkbox. + updated_preset_list[preset_name][`apply_${setting_name}`] = true; + continue; + } + } + } + // Adding missing options. + updated_preset_list[preset_name]['apply_stapm_time_ms'] = false; + updated_preset_list[preset_name]['apply_psi0_current_limit'] = false; + } + } + return updated_preset_list; + }; + settings.set('presets', update_presets_to_1_11_0(settings.get('presets'))); + settings.set('latest_controller_tabs_settings', update_latest_settings_to_1_11_0(settings.get('latest_controller_tabs_settings'))); + } + + /** + * Since 1.12.0, new option to ryzenadj. + */ + if (compareVersions(old_version, '1.12.0') <= 0) { + const update_preset_to_1_12_0 = function(settings) { + // Adding missing options. + settings['apply_max_gfxclk_frequency'] = false; + settings['apply_min_gfxclk_frequency'] = false; + settings['apply_min_socclk_frequency'] = false; + settings['apply_max_socclk_frequency'] = false; + return settings; + }; + const update_presets_to_1_12_0 = function(preset_list) { + // For each preset. + for (const preset_name in preset_list) { + if (preset_list.hasOwnProperty(preset_name)) { + preset_list[preset_name] = update_preset_to_1_12_0(preset_list[preset_name]); + } + } + return preset_list; + }; + settings.set('presets', update_presets_to_1_12_0(settings.get('presets'))); + settings.set('latest_controller_tabs_settings', update_preset_to_1_12_0(settings.get('latest_controller_tabs_settings'))); + } + + settings.set('settings', + Object.assign( + {}, + settings.set('settings'), + { + last_used_version: require('./package.json').version, + first_launch: true, + } + ) + ); + + } + + // Keep a global reference of the window object, if you don't, the window will + // be closed automatically when the JavaScript object is garbage collected. + let mainWindow + let tray + + function createWindow () { + let appIcon = ''; + if (require('os').platform() === 'win32') { + appIcon = __dirname + '/assets/icon.ico'; + } else { + appIcon = __dirname + '/assets/icon.png'; + } + + // Create the browser window. + mainWindow = new BrowserWindow({ + width: 800, + height: 720, + webPreferences: { + nodeIntegration: true + }, + icon: appIcon, + show: false, + }) + if (!settings.get('settings.start_minimized')) { + mainWindow.show(); + } + + mainWindow.setOpacity(0.95); + + // and load the index.html of the app. + mainWindow.loadFile('index.html') + + // Open the DevTools. + // mainWindow.webContents.openDevTools() + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) + + mainWindow.on('minimize',function(event){ + if (settings.get('settings.minimize_to_tray')) { + event.preventDefault(); + mainWindow.hide(); + } + }); + + var contextMenu = Menu.buildFromTemplate([ + { + label: 'Show App', + click: function () { + mainWindow.show(); + } + }, + { + label: 'Quit', + click: function () { + app.isQuiting = true; + app.quit(); } } - return updated_preset_list; - }; - settings.set('presets', update_presets_to_1_11_0(settings.get('presets'))); - settings.set('latest_controller_tabs_settings', update_latest_settings_to_1_11_0(settings.get('latest_controller_tabs_settings'))); + ]); + + tray = new Tray(appIcon); + tray.setContextMenu(contextMenu); + tray.setIgnoreDoubleClickEvents(true); + tray.on('click', function() { + mainWindow.show(); + }); } - /** - * Since 1.12.0, new option to ryzenadj. - */ - if (compareVersions(old_version, '1.12.0') <= 0) { - const update_preset_to_1_12_0 = function(settings) { - // Adding missing options. - settings['apply_max_gfxclk_frequency'] = false; - settings['apply_min_gfxclk_frequency'] = false; - settings['apply_min_socclk_frequency'] = false; - settings['apply_max_socclk_frequency'] = false; - return settings; - }; - const update_presets_to_1_12_0 = function(preset_list) { - // For each preset. - for (const preset_name in preset_list) { - if (preset_list.hasOwnProperty(preset_name)) { - preset_list[preset_name] = update_preset_to_1_12_0(preset_list[preset_name]); - } - } - return preset_list; - }; - settings.set('presets', update_presets_to_1_12_0(settings.get('presets'))); - settings.set('latest_controller_tabs_settings', update_preset_to_1_12_0(settings.get('latest_controller_tabs_settings'))); - } + // This method will be called when Electron has finished + // initialization and is ready to create browser windows. + // Some APIs can only be used after this event occurs. + app.on('ready', createWindow) - settings.set('settings', { - ...settings.set('settings'), - last_used_version: require('./package.json').version, - first_launch: true, - }); -} - -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow -let tray - -function createWindow () { - let appIcon = ''; - if (require('os').platform() === 'win32') { - appIcon = __dirname + '/assets/icon.ico'; - } else { - appIcon = __dirname + '/assets/icon.png'; - } - - // Create the browser window. - mainWindow = new BrowserWindow({ - width: 800, - height: 720, - webPreferences: { - nodeIntegration: true - }, - icon: appIcon, - show: false, - }) - if (!settings.get('settings.start_minimized')) { - mainWindow.show(); - } - - mainWindow.setOpacity(0.95); - - // and load the index.html of the app. - mainWindow.loadFile('index.html') - - // Open the DevTools. - // mainWindow.webContents.openDevTools() - - // Emitted when the window is closed. - mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - mainWindow = null - }) - - mainWindow.on('minimize',function(event){ - if (settings.get('settings.minimize_to_tray')) { - event.preventDefault(); - mainWindow.hide(); + // Quit when all windows are closed. + app.on('window-all-closed', function () { + // On macOS it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit() } - }); + }) - var contextMenu = Menu.buildFromTemplate([ - { - label: 'Show App', - click: function () { - mainWindow.show(); - } - }, - { - label: 'Quit', - click: function () { - app.isQuiting = true; - app.quit(); - } + app.on('activate', function () { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow() } - ]); + }) - tray = new Tray(appIcon); - tray.setContextMenu(contextMenu); - tray.setIgnoreDoubleClickEvents(true); - tray.on('click', function() { - mainWindow.show(); - }); + // In this file you can include the rest of your app's specific main process + // code. You can also put them in separate files and require them here. } - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on('ready', createWindow) - -// Quit when all windows are closed. -app.on('window-all-closed', function () { - // On macOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', function () { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (mainWindow === null) { - createWindow() - } -}) - -// In this file you can include the rest of your app's specific main process -// code. You can also put them in separate files and require them here. diff --git a/package-lock.json b/package-lock.json index 6b247dc..fbfff6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -249,7 +249,8 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "optional": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -272,6 +273,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "optional": true, "requires": { "ansi-regex": "^4.1.0" } @@ -864,7 +866,8 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "optional": true }, "end-of-stream": { "version": "1.4.1", @@ -1343,7 +1346,8 @@ "is-promise": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=", + "optional": true }, "is-stream": { "version": "1.1.0", @@ -2570,7 +2574,8 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "optional": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -2593,6 +2598,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "optional": true, "requires": { "ansi-regex": "^4.1.0" }