diff --git a/assets/locales/en.json b/assets/locales/en.json index f6291cea6..c1279847a 100644 --- a/assets/locales/en.json +++ b/assets/locales/en.json @@ -224,6 +224,7 @@ "launchOnStartup": "Launch at Login", "openWebUIAtLaunch": "Open Web UI at Launch", "pubsub": "Enable PubSub", + "automaticGC": "Automatic Garbage Collection", "ipfsCommandLineTools": "Command Line Tools", "takeScreenshotShortcut": "Global Screenshot Shortcut", "downloadHashShortcut": "Global Download Shortcut", diff --git a/src/automatic-gc.js b/src/automatic-gc.js new file mode 100644 index 000000000..6d84c5390 --- /dev/null +++ b/src/automatic-gc.js @@ -0,0 +1,54 @@ +const createToggler = require('./utils/create-toggler') +const logger = require('./common/logger') +const store = require('./common/store') +const { ipcMain } = require('electron') + +const CONFIG_KEY = 'automaticGC' +const gcFlag = '--enable-gc' +const isEnabled = flags => flags.some(f => f === gcFlag) + +function enable () { + const flags = store.get('ipfsConfig.flags', []) + if (!isEnabled(flags)) { + flags.push(gcFlag) + applyConfig(flags) + } +} + +function disable () { + let flags = store.get('ipfsConfig.flags', []) + if (isEnabled(flags)) { + flags = flags.filter(item => item !== gcFlag) // remove flag + applyConfig(flags) + } +} + +function applyConfig (newFlags) { + store.set('ipfsConfig.flags', newFlags) + ipcMain.emit('ipfsConfigChanged') // trigger node restart +} + +module.exports = async function () { + const activate = ({ newValue, oldValue }) => { + if (newValue === oldValue) return + + try { + if (newValue === true) { + enable() + } else { + disable() + } + + return true + } catch (err) { + logger.error(`[automatic gc] ${err.toString()}`) + + return false + } + } + activate({ newValue: store.get(CONFIG_KEY, true) }) + createToggler(CONFIG_KEY, activate) + logger.info(`[automatic gc] ${store.get(CONFIG_KEY, true) ? 'enabled' : 'disabled'}`) +} + +module.exports.CONFIG_KEY = CONFIG_KEY diff --git a/src/common/store.js b/src/common/store.js index 1d8af074a..cd3cf1eb3 100644 --- a/src/common/store.js +++ b/src/common/store.js @@ -9,8 +9,7 @@ const defaults = { '--migrate', '--enable-gc', '--routing', 'dhtclient' - ], - keysize: 2048 + ] }, language: (electron.app || electron.remote.app).getLocale(), experiments: {} @@ -25,6 +24,14 @@ const migrations = { if (flags.includes('--migrate=true') || flags.includes('--enable-gc=true')) { store.set('ipfsConfig.flags', defaults.ipfsConfig.flags) } + }, + '>0.13.2': store => { + const flags = store.get('ipfsConfig.flags', []) + const automaticGC = store.get('automaticGC', false) + // ensure checkbox follows cli flag config + if (flags.includes('--enable-gc') && !automaticGC) { + store.set('automaticGC', true) + } } } diff --git a/src/daemon/daemon.js b/src/daemon/daemon.js index 50ae39bea..ac9c31ae2 100644 --- a/src/daemon/daemon.js +++ b/src/daemon/daemon.js @@ -35,7 +35,7 @@ function writeIpfsBinaryPath (path) { ) } -async function spawn ({ flags, path, keysize }) { +async function spawn ({ flags, path }) { const ipfsBin = getIpfsBinPath() writeIpfsBinaryPath(ipfsBin) diff --git a/src/index.js b/src/index.js index d50d9ab66..3007366da 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ const setupNpmOnIpfs = require('./npm-on-ipfs') const setupDaemon = require('./daemon') const setupWebUI = require('./webui') const setupAutoLaunch = require('./auto-launch') +const setupAutoGc = require('./automatic-gc') const setupPubsub = require('./enable-pubsub') const setupDownloadCid = require('./download-cid') const setupTakeScreenshot = require('./take-screenshot') @@ -75,6 +76,7 @@ async function run () { await Promise.all([ setupArgvFilesHandler(ctx), setupAutoLaunch(ctx), + setupAutoGc(ctx), setupPubsub(ctx), setupSecondInstance(ctx), // Setup global shortcuts diff --git a/src/tray.js b/src/tray.js index 552185501..7809afcfb 100644 --- a/src/tray.js +++ b/src/tray.js @@ -14,6 +14,7 @@ const { CONFIG_KEY: SCREENSHOT_KEY, SHORTCUT: SCREENSHOT_SHORTCUT, takeScreensho const { CONFIG_KEY: DOWNLOAD_KEY, SHORTCUT: DOWNLOAD_SHORTCUT, downloadCid } = require('./download-cid') const { CONFIG_KEY: AUTO_LAUNCH_KEY, isSupported: supportsLaunchAtLogin } = require('./auto-launch') const { CONFIG_KEY: PUBSUB_KEY } = require('./enable-pubsub') +const { CONFIG_KEY: AUTO_GC_KEY } = require('./automatic-gc') const { CONFIG_KEY: IPFS_PATH_KEY } = require('./ipfs-on-path') const { CONFIG_KEY: NPM_IPFS_KEY } = require('./npm-on-ipfs') const { CONFIG_KEY: AUTO_LAUNCH_WEBUI_KEY } = require('./webui') @@ -21,6 +22,7 @@ const { CONFIG_KEY: AUTO_LAUNCH_WEBUI_KEY } = require('./webui') const CONFIG_KEYS = [ AUTO_LAUNCH_KEY, AUTO_LAUNCH_WEBUI_KEY, + AUTO_GC_KEY, IPFS_PATH_KEY, NPM_IPFS_KEY, SCREENSHOT_KEY, @@ -124,6 +126,7 @@ function buildMenu (ctx) { }, buildCheckbox(AUTO_LAUNCH_KEY, 'settings.launchOnStartup'), buildCheckbox(AUTO_LAUNCH_WEBUI_KEY, 'settings.openWebUIAtLaunch'), + buildCheckbox(AUTO_GC_KEY, 'settings.automaticGC'), buildCheckbox(IPFS_PATH_KEY, 'settings.ipfsCommandLineTools'), buildCheckbox(SCREENSHOT_KEY, 'settings.takeScreenshotShortcut'), buildCheckbox(DOWNLOAD_KEY, 'settings.downloadHashShortcut'),