From 1ec3ff607f5d354e83f3c41fd92ced1241ad7f7a Mon Sep 17 00:00:00 2001 From: Andrew Nesbitt Date: Wed, 20 Jan 2021 16:07:37 +0000 Subject: [PATCH 1/2] feat: enable ipns over pubsub via settings menu Part of #1647 Very similar approach to #1735 --- assets/locales/en.json | 1 + src/enable-namesys-pubsub.js | 54 ++++++++++++++++++++++++++++++++++++ src/index.js | 2 ++ src/tray.js | 5 +++- 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/enable-namesys-pubsub.js diff --git a/assets/locales/en.json b/assets/locales/en.json index f6291cea6..31adde21a 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", + "namesysPubsub": "Enable IPNS over PubSub", "ipfsCommandLineTools": "Command Line Tools", "takeScreenshotShortcut": "Global Screenshot Shortcut", "downloadHashShortcut": "Global Download Shortcut", diff --git a/src/enable-namesys-pubsub.js b/src/enable-namesys-pubsub.js new file mode 100644 index 000000000..a6413d345 --- /dev/null +++ b/src/enable-namesys-pubsub.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 = 'namesys-pubsub' +const namesysPubsubFlag = '--enable-namesys-pubsub' +const isEnabled = flags => flags.some(f => f === namesysPubsubFlag) + +function enable () { + const flags = store.get('ipfsConfig.flags', []) + if (!isEnabled(flags)) { + flags.push(namesysPubsubFlag) + applyConfig(flags) + } +} + +function disable () { + let flags = store.get('ipfsConfig.flags', []) + if (isEnabled(flags)) { + flags = flags.filter(item => item !== namesysPubsubFlag) // 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(`[ipns over pubsub] ${err.toString()}`) + + return false + } + } + activate({ newValue: store.get(CONFIG_KEY, false) }) + createToggler(CONFIG_KEY, activate) + logger.info(`[ipns over pubsub] ${store.get(CONFIG_KEY, false) ? 'enabled' : 'disabled'}`) +} + +module.exports.CONFIG_KEY = CONFIG_KEY diff --git a/src/index.js b/src/index.js index d50d9ab66..e51fab4a2 100644 --- a/src/index.js +++ b/src/index.js @@ -10,6 +10,7 @@ const setupDaemon = require('./daemon') const setupWebUI = require('./webui') const setupAutoLaunch = require('./auto-launch') const setupPubsub = require('./enable-pubsub') +const setupNamesysPubsub = require('./enable-namesys-pubsub') const setupDownloadCid = require('./download-cid') const setupTakeScreenshot = require('./take-screenshot') const setupAppMenu = require('./app-menu') @@ -76,6 +77,7 @@ async function run () { setupArgvFilesHandler(ctx), setupAutoLaunch(ctx), setupPubsub(ctx), + setupNamesysPubsub(ctx), setupSecondInstance(ctx), // Setup global shortcuts setupDownloadCid(ctx), diff --git a/src/tray.js b/src/tray.js index 552185501..33ea9db62 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: NAMESYS_PUBSUB_KEY } = require('./enable-namesys-pubsub') 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') @@ -25,7 +26,8 @@ const CONFIG_KEYS = [ NPM_IPFS_KEY, SCREENSHOT_KEY, DOWNLOAD_KEY, - PUBSUB_KEY + PUBSUB_KEY, + NAMESYS_PUBSUB_KEY ] function buildCheckbox (key, label) { @@ -133,6 +135,7 @@ function buildMenu (ctx) { enabled: false }, buildCheckbox(PUBSUB_KEY, 'settings.pubsub'), + buildCheckbox(NAMESYS_PUBSUB_KEY, 'settings.namesysPubsub'), buildCheckbox(NPM_IPFS_KEY, 'settings.npmOnIpfs') ] }, From 9ae49436f7845b9db28f2fb1cdbbc97159614a4e Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Mon, 25 Jan 2021 14:20:45 +0100 Subject: [PATCH 2/2] refactor: move pubsub experiments to exp. section making it easier to find if someone edits config by hand License: MIT Signed-off-by: Marcin Rataj --- src/enable-namesys-pubsub.js | 2 +- src/enable-pubsub.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/enable-namesys-pubsub.js b/src/enable-namesys-pubsub.js index a6413d345..85a83db97 100644 --- a/src/enable-namesys-pubsub.js +++ b/src/enable-namesys-pubsub.js @@ -3,7 +3,7 @@ const logger = require('./common/logger') const store = require('./common/store') const { ipcMain } = require('electron') -const CONFIG_KEY = 'namesys-pubsub' +const CONFIG_KEY = 'experiments.pubsubNamesys' const namesysPubsubFlag = '--enable-namesys-pubsub' const isEnabled = flags => flags.some(f => f === namesysPubsubFlag) diff --git a/src/enable-pubsub.js b/src/enable-pubsub.js index 617ae2458..554d70517 100644 --- a/src/enable-pubsub.js +++ b/src/enable-pubsub.js @@ -3,7 +3,7 @@ const logger = require('./common/logger') const store = require('./common/store') const { ipcMain } = require('electron') -const CONFIG_KEY = 'pubsub' +const CONFIG_KEY = 'experiments.pubsub' const pubsubFlag = '--enable-pubsub-experiment' const isEnabled = flags => flags.some(f => f === pubsubFlag)