From 82de1d45643e00c79aadaa876bdff6926a286375 Mon Sep 17 00:00:00 2001 From: Quang Lam Date: Tue, 16 Feb 2021 17:24:17 +0700 Subject: [PATCH] Allow changing telemetry preference without restarting app (#333) --- main-src/windows/shared-preload.js | 1 - src/amplitude.js | 4 +++- src/components/dialog-preferences/index.js | 1 - src/components/main/telemetry-manager.js | 10 ++++++++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/main-src/windows/shared-preload.js b/main-src/windows/shared-preload.js index 04a1553ce..e7bc18cc3 100644 --- a/main-src/windows/shared-preload.js +++ b/main-src/windows/shared-preload.js @@ -21,5 +21,4 @@ contextMenu({ window.remote = remote; window.ipcRenderer = ipcRenderer; -window.optOutTelemetry = !ipcRenderer.sendSync('get-preference', 'telemetry'); window.machineId = machineId.machineIdSync(); diff --git a/src/amplitude.js b/src/amplitude.js index 8725ca832..124a231cd 100644 --- a/src/amplitude.js +++ b/src/amplitude.js @@ -6,7 +6,9 @@ import { v5 as uuidv5 } from 'uuid'; amplitude.getInstance().init(process.env.REACT_APP_AMPLITUDE_API_KEY); amplitude.getInstance().setVersionName(`engine@${window.remote.app.getVersion()}`); -amplitude.getInstance().setOptOut(window.optOutTelemetry); +// opt out by default +// we sync this with user pref in TelemetryManager +amplitude.getInstance().setOptOut(true); // custom device id to unify uniques between webcatalog-app & webcatalog-engine if (window.machineId) { diff --git a/src/components/dialog-preferences/index.js b/src/components/dialog-preferences/index.js index 631c88d25..a80e299c0 100644 --- a/src/components/dialog-preferences/index.js +++ b/src/components/dialog-preferences/index.js @@ -1423,7 +1423,6 @@ const Preferences = ({ checked={telemetry} onChange={(e) => { requestSetPreference('telemetry', e.target.checked); - enqueueRequestRestartSnackbar(); }} /> diff --git a/src/components/main/telemetry-manager.js b/src/components/main/telemetry-manager.js index b013b02be..9ca78ff8f 100644 --- a/src/components/main/telemetry-manager.js +++ b/src/components/main/telemetry-manager.js @@ -11,12 +11,14 @@ import getStaticGlobal from '../../helpers/get-static-global'; import amplitude from '../../amplitude'; -const TelemetryManager = ({ iapPurchased }) => { +const TelemetryManager = ({ iapPurchased, telemetry }) => { const appJson = getStaticGlobal('appJson'); const registered = appJson.registered || iapPurchased; + // run after setUserProperties // https://blog.logrocket.com/post-hooks-guide-react-call-order useEffect(() => { + amplitude.getInstance().setOptOut(!telemetry); amplitude.getInstance().setUserProperties({ registered, distributionChannel: (() => { @@ -37,20 +39,24 @@ const TelemetryManager = ({ iapPurchased }) => { return () => { window.ipcRenderer.removeListener('log-focus', logFocus); }; - }, [registered]); + }, [registered, telemetry]); + return null; }; TelemetryManager.defaultProps = { iapPurchased: false, + telemetry: false, }; TelemetryManager.propTypes = { iapPurchased: PropTypes.bool, + telemetry: PropTypes.bool, }; const mapStateToProps = (state) => ({ iapPurchased: state.preferences.iapPurchased, + telemetry: state.preferences.telemetry, }); export default connectComponent(