From f67e304afa08c6dbe3ee094ac7c565fb0c405cfa Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 30 Aug 2019 23:02:44 +0100 Subject: [PATCH 1/9] feat: share countly data with ipfs desktop share the same device id and consents between web ui and ipfs desktop License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.js | 35 +++++++++++++++++++++++++++-------- src/bundles/ipfs-desktop.js | 10 ++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index d4a30dc4d..2683662a9 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -34,6 +34,22 @@ const consentGroups = { safe: ['sessions', 'events', 'views', 'location'] } +function addConsent (consent, store) { + root.Countly.q.push(['add_consent', consent]) + + if (store.selectIsIpfsDesktop()) { + store.doDesktopAddConsent(consent) + } +} + +function removeConsent (consent, store) { + root.Countly.q.push(['remove_consent', consent]) + + if (store.selectIsIpfsDesktop()) { + store.doDesktopRemoveConsent(consent) + } +} + const createAnalyticsBundle = ({ countlyUrl = 'https://countly.ipfs.io', countlyAppKey = pickAppKey(), @@ -63,10 +79,13 @@ const createAnalyticsBundle = ({ if (store.selectIsIpfsDesktop()) { Countly.app_version = store.selectDesktopVersion() + Countly.q.push(['change_id', store.selectDesktopCountlyDeviceId()]) + } else { + // Sessions will only be tracked by IPFS Desktop. + Countly.q.push(['track_sessions']) } // Configure what to track. Nothing is sent without user consent. - Countly.q.push(['track_sessions']) Countly.q.push(['track_errors']) // Don't track clicks or links as it can include full url. @@ -75,7 +94,7 @@ const createAnalyticsBundle = ({ if (store.selectAnalyticsEnabled()) { const consent = store.selectAnalyticsConsent() - Countly.q.push(['add_consent', consent]) + addConsent(consent, store) } store.subscribeToSelectors(['selectRouteInfo'], ({ routeInfo }) => { @@ -200,13 +219,13 @@ const createAnalyticsBundle = ({ }, doDisableAnalytics: () => ({ dispatch, store }) => { - root.Countly.q.push(['remove_consent', consentGroups.all]) + removeConsent(consentGroups.all, store) dispatch({ type: 'ANALYTICS_DISABLED', payload: { consent: [] } }) }, doEnableAnalytics: () => ({ dispatch, store }) => { - root.Countly.q.push(['remove_consent', consentGroups.all]) - root.Countly.q.push(['add_consent', consentGroups.safe]) + removeConsent(consentGroups.all, store) + addConsent(consentGroups.safe, store) dispatch({ type: 'ANALYTICS_ENABLED', payload: { consent: consentGroups.safe } }) }, @@ -220,12 +239,12 @@ const createAnalyticsBundle = ({ }, doRemoveConsent: (name) => ({ dispatch, store }) => { - root.Countly.q.push(['remove_consent', name]) + removeConsent(name, store) dispatch({ type: 'ANALYTICS_REMOVE_CONSENT', payload: { name } }) }, - + doAddConsent: (name) => ({ dispatch, store }) => { - root.Countly.q.push(['add_consent', name]) + addConsent(name, store) dispatch({ type: 'ANALYTICS_ADD_CONSENT', payload: { name } }) } } diff --git a/src/bundles/ipfs-desktop.js b/src/bundles/ipfs-desktop.js index 21379b502..04c83bb28 100644 --- a/src/bundles/ipfs-desktop.js +++ b/src/bundles/ipfs-desktop.js @@ -29,6 +29,8 @@ if (window.ipfsDesktop) { selectDesktopVersion: () => window.ipfsDesktop.version, + selectDesktopCountlyDeviceId: () => window.ipfsDesktop.countlyDeviceId, + doDesktopStartListening: () => async ({ dispatch, store }) => { window.ipfsDesktop.onConfigChanged(({ config, changed, success }) => { const prevConfig = store.selectDesktopSettings() @@ -77,6 +79,14 @@ if (window.ipfsDesktop) { return window.ipfsDesktop.selectDirectory() }, + doDesktopAddConsent: consent => () => { + return window.ipfsDesktop.addConsent(consent) + }, + + doDesktopRemoveConsent: consent => () => { + return window.ipfsDesktop.removeConsent(consent) + }, + init: store => { store.doDesktopStartListening() } From 0e3b1b902df2ddf5741246ab1f69e4c241d1aa4a Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Fri, 30 Aug 2019 23:06:19 +0100 Subject: [PATCH 2/9] fix: trim white spaces License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index 2683662a9..94083509c 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -242,7 +242,7 @@ const createAnalyticsBundle = ({ removeConsent(name, store) dispatch({ type: 'ANALYTICS_REMOVE_CONSENT', payload: { name } }) }, - + doAddConsent: (name) => ({ dispatch, store }) => { addConsent(name, store) dispatch({ type: 'ANALYTICS_ADD_CONSENT', payload: { name } }) From 9b967306bd21669d3023a8ae48d1dc8c456e2d60 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 1 Sep 2019 10:37:39 +0100 Subject: [PATCH 3/9] doc: clarify comment --- src/bundles/analytics.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index 94083509c..347582322 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -81,7 +81,8 @@ const createAnalyticsBundle = ({ Countly.app_version = store.selectDesktopVersion() Countly.q.push(['change_id', store.selectDesktopCountlyDeviceId()]) } else { - // Sessions will only be tracked by IPFS Desktop. + // Sessions will only be shared by Web UI when we're not in a + // IPFS Desktop environment. Countly.q.push(['track_sessions']) } From b0f39e3ea85634060f816e63c0fb21dab6cef4d6 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 2 Sep 2019 11:54:42 +0100 Subject: [PATCH 4/9] feat: track desktop option toggles License: MIT Signed-off-by: Henrique Dias --- package-lock.json | 135 ++++++++++++++++++++++++++++++++++++ package.json | 1 + src/bundles/analytics.js | 35 ++++++++-- src/bundles/ipfs-desktop.js | 47 +++++++++---- 4 files changed, 199 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f3fcb33c..9cf2a7a4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7634,6 +7634,31 @@ "supports-color": "^2.0.0" } }, + "change-case": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", + "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "requires": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, "change-emitter": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", @@ -8304,6 +8329,15 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "requires": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -10255,6 +10289,14 @@ "domelementtype": "1" } }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", + "requires": { + "no-case": "^2.2.0" + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -13730,6 +13772,15 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, "heap": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", @@ -14864,6 +14915,14 @@ "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.4.1.tgz", "integrity": "sha512-diPJE2qrrPa+C+Yqj15XngeLawX4QukXI2J5f3jJ26ap2sv20WyecdHM72b/lHGuJAHhx2Qn7Nx5IsZDDS0crg==" }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "requires": { + "lower-case": "^1.1.0" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -15000,6 +15059,14 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "requires": { + "upper-case": "^1.1.0" + } + }, "is-window": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", @@ -17097,6 +17164,14 @@ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "requires": { + "lower-case": "^1.1.2" + } + }, "lowlight": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.9.2.tgz", @@ -18814,6 +18889,15 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", + "requires": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -18824,6 +18908,14 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, + "path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", + "requires": { + "no-case": "^2.2.0" + } + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -22903,6 +22995,15 @@ } } }, + "sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", + "requires": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, "serialize-javascript": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", @@ -23259,6 +23360,14 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" }, + "snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", + "requires": { + "no-case": "^2.2.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -24017,6 +24126,15 @@ } } }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "requires": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -24363,6 +24481,15 @@ "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", "dev": true }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -24825,6 +24952,14 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "requires": { + "upper-case": "^1.1.1" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", diff --git a/package.json b/package.json index f6135ec12..ff08c1edb 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@tableflip/react-dropdown": "^1.3.0", "@tableflip/react-inspector": "^2.3.0", "brace": "^0.11.1", + "change-case": "^3.1.0", "chart.js": "^2.8.0", "cids": "^0.7.1", "countly-sdk-web": "^19.8.0", diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index 347582322..5b2ef9673 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -1,4 +1,6 @@ import root from 'window-or-global' +import changeCase from 'change-case' +import { createSelector } from 'redux-bundler' // Only record specific actions listed here. const ASYNC_ACTIONS_TO_RECORD = [ @@ -10,7 +12,8 @@ const ASYNC_ACTIONS_TO_RECORD = [ 'FILES_MOVE', 'FILES_DELETE', 'FILES_DOWNLOADLINK', - 'EXPERIMENTS_TOGGLE' + 'EXPERIMENTS_TOGGLE', + 'DESKTOP_SETTING_TOGGLE' ] const ASYNC_ACTION_RE = new RegExp(`^${ASYNC_ACTIONS_TO_RECORD.join('_|')}`) @@ -129,8 +132,22 @@ const createAnalyticsBundle = ({ const durationInSeconds = (root.performance.now() - start) / 1000 let key = state === 'FAILED' ? action.type : name - if (name === 'EXPERIMENTS_TOGGLE') { - key += `_${action.payload.key}` + // Costum code for experiments toggle and desktop settings toggle. + // This way we can detect if we're enabling or disabling an option. + if (name === 'EXPERIMENTS_TOGGLE' || name === 'DESKTOP_SETTING_TOGGLE') { + key = name === 'EXPERIMENTS_TOGGLE' + ? 'EXPERIMENTS_' + : 'DESKTOP_SETTING_' + + key += changeCase.constantCase(action.payload.key) + + if (state === 'FAILED') { + key += '_FAILED' + } else { + key += action.payload.value + ? '_ENABLED' + : '_DISABLED' + } } root.Countly.q.push(['add_event', { @@ -206,9 +223,15 @@ const createAnalyticsBundle = ({ return false }, - selectAnalyticsActionsToRecord: () => { - return Array.from(ASYNC_ACTIONS_TO_RECORD) - }, + selectAnalyticsActionsToRecord: createSelector( + 'selectIsIpfsDesktop', + 'selectDesktopCountlyActions', + (isDesktop, desktopActions) => { + return isDesktop + ? desktopActions.concat(ASYNC_ACTIONS_TO_RECORD).sort() + : Array.from(ASYNC_ACTIONS_TO_RECORD).sort() + } + ), doToggleAnalytics: () => ({ dispatch, store }) => { const enable = !store.selectAnalyticsEnabled() diff --git a/src/bundles/ipfs-desktop.js b/src/bundles/ipfs-desktop.js index 04c83bb28..26f52d10f 100644 --- a/src/bundles/ipfs-desktop.js +++ b/src/bundles/ipfs-desktop.js @@ -1,16 +1,23 @@ -import { ACTIONS } from './experiments' +import { ACTIONS as EXP_ACTIONS } from './experiments' + +export const ACTIONS = { + SETTING_TOGGLE_STARTED: 'DESKTOP_SETTING_TOGGLE_STARTED', + SETTING_TOGGLE_FINISHED: 'DESKTOP_SETTING_TOGGLE_FINISHED', + SETTING_TOGGLE_FAILED: 'DESKTOP_SETTING_TOGGLE_FAILED' +} let bundle = { name: 'ipfsDesktop', reducer: (state = {}) => state, - selectIsIpfsDesktop: () => !!window.ipfsDesktop + selectIsIpfsDesktop: () => !!window.ipfsDesktop, + selectDesktopCountlyActions: () => ([]) } if (window.ipfsDesktop) { bundle = { ...bundle, reducer: (state = {}, action) => { - if (action.type === ACTIONS.EXP_TOGGLE_STARTED) { + if (action.type === EXP_ACTIONS.EXP_TOGGLE_STARTED) { window.ipfsDesktop.toggleSetting(`experiments.${action.payload.key}`) } @@ -31,13 +38,15 @@ if (window.ipfsDesktop) { selectDesktopCountlyDeviceId: () => window.ipfsDesktop.countlyDeviceId, + selectDesktopCountlyActions: () => window.ipfsDesktop.countlyActions, + doDesktopStartListening: () => async ({ dispatch, store }) => { window.ipfsDesktop.onConfigChanged(({ config, changed, success }) => { const prevConfig = store.selectDesktopSettings() if (Object.keys(prevConfig).length === 0) { dispatch({ - type: ACTIONS.EXP_UPDATE_STATE, + type: EXP_ACTIONS.EXP_UPDATE_STATE, payload: Object.keys(config.experiments).reduce( (all, key) => ({ ...all, @@ -50,14 +59,25 @@ if (window.ipfsDesktop) { }) } - if (changed && changed.startsWith('experiments.')) { - const key = changed.replace('experiments.', '') - - if (success) { - dispatch({ type: ACTIONS.EXP_TOGGLE_FINISHED, payload: { key } }) - } else { - dispatch({ type: ACTIONS.EXP_TOGGLE_FAILED, payload: { key } }) - } + if (changed) { + const isExperiment = changed.startsWith('experiments.') + const key = isExperiment + ? changed.replace('experiments.', '') + : changed + + const type = isExperiment + ? success + ? EXP_ACTIONS.EXP_TOGGLE_FINISHED + : EXP_ACTIONS.EXP_TOGGLE_FAILED + : success + ? ACTIONS.SETTING_TOGGLE_FINISHED + : ACTIONS.SETTING_TOGGLE_FAILED + + const value = isExperiment + ? config.experiments[key] + : config[key] + + dispatch({ type, payload: { key, value } }) } dispatch({ @@ -67,7 +87,8 @@ if (window.ipfsDesktop) { }) }, - doDesktopSettingsToggle: setting => () => { + doDesktopSettingsToggle: setting => ({ dispatch }) => { + dispatch({ type: ACTIONS.SETTING_TOGGLE_STARTED, payload: { key: setting } }) window.ipfsDesktop.toggleSetting(setting) }, From 390c44960b220473cdd86d22ad93ff8b684d8cca Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 2 Sep 2019 11:56:28 +0100 Subject: [PATCH 5/9] fix: trailing spaces License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index 5b2ef9673..c998b8ab3 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -138,7 +138,7 @@ const createAnalyticsBundle = ({ key = name === 'EXPERIMENTS_TOGGLE' ? 'EXPERIMENTS_' : 'DESKTOP_SETTING_' - + key += changeCase.constantCase(action.payload.key) if (state === 'FAILED') { From 88536e25132b9c63e67ca18182646ba448fdb044 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 2 Sep 2019 11:59:33 +0100 Subject: [PATCH 6/9] fix: tests License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bundles/analytics.test.js b/src/bundles/analytics.test.js index e58d9dd7b..6fc16f611 100644 --- a/src/bundles/analytics.test.js +++ b/src/bundles/analytics.test.js @@ -23,7 +23,8 @@ function createStore (analyticsOpts = {}) { }, { name: 'mockIpfsDesktopBundle', - selectIsIpfsDesktop: () => false + selectIsIpfsDesktop: () => false, + selectDesktopCountlyActions: () => ([]) }, createAnalyticsBundle(analyticsOpts) )() From cb7cf6aa181006cfd1ac1ab285b381f5d40fcfab Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 2 Sep 2019 12:02:29 +0100 Subject: [PATCH 7/9] feat: track sessions on web ui after all License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index c998b8ab3..85d8ddf38 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -83,13 +83,10 @@ const createAnalyticsBundle = ({ if (store.selectIsIpfsDesktop()) { Countly.app_version = store.selectDesktopVersion() Countly.q.push(['change_id', store.selectDesktopCountlyDeviceId()]) - } else { - // Sessions will only be shared by Web UI when we're not in a - // IPFS Desktop environment. - Countly.q.push(['track_sessions']) } - + // Configure what to track. Nothing is sent without user consent. + Countly.q.push(['track_sessions']) Countly.q.push(['track_errors']) // Don't track clicks or links as it can include full url. From e176b38f1cdb7f7b98f75535119ac37692ca8367 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Mon, 2 Sep 2019 12:04:07 +0100 Subject: [PATCH 8/9] feat: fix linting License: MIT Signed-off-by: Henrique Dias --- src/bundles/analytics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundles/analytics.js b/src/bundles/analytics.js index 85d8ddf38..3bb79560a 100644 --- a/src/bundles/analytics.js +++ b/src/bundles/analytics.js @@ -84,7 +84,7 @@ const createAnalyticsBundle = ({ Countly.app_version = store.selectDesktopVersion() Countly.q.push(['change_id', store.selectDesktopCountlyDeviceId()]) } - + // Configure what to track. Nothing is sent without user consent. Countly.q.push(['track_sessions']) Countly.q.push(['track_errors']) From ceb5392eefce3c035a63d704ddcf351ca0c6b53f Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Sun, 8 Sep 2019 09:17:12 +0100 Subject: [PATCH 9/9] feat: show error message when toggling option fails License: MIT Signed-off-by: Henrique Dias --- public/locales/en/notify.json | 6 ++++++ src/bundles/notify.js | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/public/locales/en/notify.json b/public/locales/en/notify.json index 7173ab18a..7d95ae84b 100644 --- a/public/locales/en/notify.json +++ b/public/locales/en/notify.json @@ -16,5 +16,11 @@ "connectedToPeer": "Successfully connected to the provided peer.", "experimentsErrors": { "npmOnIpfs": "We couldn't make changes to your system. Please install or uninstall 'ipfs-npm' package manually." + }, + "desktopToggleErrors": { + "autoLaunch": "Could not toggle launch at startup option.", + "ipfsOnPath": "Could not toggle IPFS command line tools.", + "downloadHashShortcut": "Could not toggle download hash shortcut.", + "screenshotShortcut": "Could not toggle screenshot shortcut." } } diff --git a/src/bundles/notify.js b/src/bundles/notify.js index 24c650a05..f02d53e12 100644 --- a/src/bundles/notify.js +++ b/src/bundles/notify.js @@ -1,6 +1,7 @@ import { createSelector } from 'redux-bundler' import { ACTIONS as EXP_ACTIONS } from './experiments' import { ACTIONS as FILES_ACTIONS } from './files' +import { ACTIONS as DESK_ACTIONS } from './ipfs-desktop' /* # Notify @@ -70,6 +71,15 @@ const notify = { } } + if (action.type === DESK_ACTIONS.SETTING_TOGGLE_FAILED) { + return { + ...state, + show: true, + error: true, + eventId: `desktopToggleErrors.${action.payload.key}` + } + } + return state },