From 8dec435e50ace23f7fcc947817fd28f93c2cf66a Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:12:05 -0600 Subject: [PATCH 1/6] Bring breadcrumbs into new Riot config standard --- .../handlers/AccountSettingsHandler.js | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/settings/handlers/AccountSettingsHandler.js b/src/settings/handlers/AccountSettingsHandler.js index 71cef52c4e..1450bed494 100644 --- a/src/settings/handlers/AccountSettingsHandler.js +++ b/src/settings/handlers/AccountSettingsHandler.js @@ -19,7 +19,9 @@ import MatrixClientPeg from '../../MatrixClientPeg'; import MatrixClientBackedSettingsHandler from "./MatrixClientBackedSettingsHandler"; import {SettingLevel} from "../SettingsStore"; -const BREADCRUMBS_EVENT_TYPE = "im.vector.riot.breadcrumb_rooms"; +const BREADCRUMBS_LEGACY_EVENT_TYPE = "im.vector.riot.breadcrumb_rooms"; +const BREADCRUMBS_EVENT_TYPE = "im.vector.setting.breadcrumbs"; +const BREADCRUMBS_EVENT_TYPES = [BREADCRUMBS_LEGACY_EVENT_TYPE, BREADCRUMBS_EVENT_TYPE]; /** * Gets and sets settings at the "account" level for the current user. @@ -57,9 +59,8 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa const val = event.getContent()[settingName]; this._watchers.notifyUpdate(settingName, null, SettingLevel.ACCOUNT, val); } - } else if (event.getType() === BREADCRUMBS_EVENT_TYPE) { - const val = event.getContent()['rooms'] || []; - this._watchers.notifyUpdate("breadcrumb_rooms", null, SettingLevel.ACCOUNT, val); + } else if (BREADCRUMBS_EVENT_TYPES.includes(event.getType())) { + this._notifyBreadcrumbsUpdate(event); } } @@ -75,8 +76,15 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa // Special case for breadcrumbs if (settingName === "breadcrumb_rooms") { - const content = this._getSettings(BREADCRUMBS_EVENT_TYPE) || {}; - return content['rooms'] || []; + let content = this._getSettings(BREADCRUMBS_EVENT_TYPE); + if (!content || !content['recent_rooms']) { + content = this._getSettings(BREADCRUMBS_LEGACY_EVENT_TYPE); + + // This is a bit of a hack, but it makes things slightly easier + if (content) content['recent_rooms'] = content['rooms']; + } + + return content && content['recent_rooms'] ? content['recent_rooms'] : []; } const settings = this._getSettings() || {}; @@ -102,8 +110,13 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa // Special case for breadcrumbs if (settingName === "breadcrumb_rooms") { - const content = this._getSettings(BREADCRUMBS_EVENT_TYPE) || {}; - content['rooms'] = newValue; + // We read the value first just to make sure we preserve whatever random keys might be present. + let content = this._getSettings(BREADCRUMBS_EVENT_TYPE); + if (!content || !content['recent_rooms']) { + content = this._getSettings(BREADCRUMBS_LEGACY_EVENT_TYPE); + } + + content['recent_rooms'] = newValue; return MatrixClientPeg.get().setAccountData(BREADCRUMBS_EVENT_TYPE, content); } @@ -129,4 +142,19 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa if (!event || !event.getContent()) return null; return event.getContent(); } + + _notifyBreadcrumbsUpdate(event) { + let val = []; + if (event.getType() === BREADCRUMBS_LEGACY_EVENT_TYPE) { + // This seems fishy - try and get the event for the new rooms + const newType = this._getSettings(BREADCRUMBS_EVENT_TYPE); + if (newType) val = newType['recent_rooms']; + else val = event.getContent()['rooms']; + } else if (event.getType() === BREADCRUMBS_EVENT_TYPE) { + val = event.getContent()['recent_rooms']; + } else { + return; // for sanity, not because we expect to be here. + } + this._watchers.notifyUpdate("breadcrumb_rooms", null, SettingLevel.ACCOUNT, val || []); + } } From dd8f26a3f68e4ba4a6ae3d7861d3335ad2463c39 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:20:53 -0600 Subject: [PATCH 2/6] Add integration manager provisioning setting To be used later by a future implementation --- src/settings/Settings.js | 4 ++++ .../handlers/AccountSettingsHandler.js | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 7470641359..586ec7d1cf 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -279,6 +279,10 @@ export const SETTINGS = { supportedLevels: ['account'], default: [], }, + "integration_provisioning": { + supportedLevels: ['account'], + default: true, + }, "analyticsOptIn": { supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, displayName: _td('Send analytics data'), diff --git a/src/settings/handlers/AccountSettingsHandler.js b/src/settings/handlers/AccountSettingsHandler.js index 1450bed494..435c8f3388 100644 --- a/src/settings/handlers/AccountSettingsHandler.js +++ b/src/settings/handlers/AccountSettingsHandler.js @@ -23,6 +23,8 @@ const BREADCRUMBS_LEGACY_EVENT_TYPE = "im.vector.riot.breadcrumb_rooms"; const BREADCRUMBS_EVENT_TYPE = "im.vector.setting.breadcrumbs"; const BREADCRUMBS_EVENT_TYPES = [BREADCRUMBS_LEGACY_EVENT_TYPE, BREADCRUMBS_EVENT_TYPE]; +const INTEG_PROVISIONING_EVENT_TYPE = "im.vector.setting.integration_provisioning"; + /** * Gets and sets settings at the "account" level for the current user. * This handler does not make use of the roomId parameter. @@ -61,6 +63,9 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa } } else if (BREADCRUMBS_EVENT_TYPES.includes(event.getType())) { this._notifyBreadcrumbsUpdate(event); + } else if (event.getType() === INTEG_PROVISIONING_EVENT_TYPE) { + let val = event.getContent()['enabled']; + this._watchers.notifyUpdate("integration_provisioning", null, SettingLevel.ACCOUNT, val); } } @@ -87,6 +92,12 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa return content && content['recent_rooms'] ? content['recent_rooms'] : []; } + // Special case integration manager provisioning + if (settingName === "integration_provisioning") { + const content = this._getSettings(INTEG_PROVISIONING_EVENT_TYPE); + return content ? content['enabled'] : null; + } + const settings = this._getSettings() || {}; let preferredValue = settings[settingName]; @@ -120,6 +131,13 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa return MatrixClientPeg.get().setAccountData(BREADCRUMBS_EVENT_TYPE, content); } + // Special case integration manager provisioning + if (settingName === "integration_provisioning") { + const content = this._getSettings(INTEG_PROVISIONING_EVENT_TYPE) || {}; + content['enabled'] = newValue; + return MatrixClientPeg.get().setAccountData(INTEG_PROVISIONING_EVENT_TYPE, content); + } + const content = this._getSettings() || {}; content[settingName] = newValue; return MatrixClientPeg.get().setAccountData("im.vector.web.settings", content); From 3b771f682d1b5dd44358dfbd629b50b936e3d639 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:23:59 -0600 Subject: [PATCH 3/6] let -> const --- src/settings/handlers/AccountSettingsHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/handlers/AccountSettingsHandler.js b/src/settings/handlers/AccountSettingsHandler.js index 435c8f3388..7f05dc22c6 100644 --- a/src/settings/handlers/AccountSettingsHandler.js +++ b/src/settings/handlers/AccountSettingsHandler.js @@ -64,7 +64,7 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa } else if (BREADCRUMBS_EVENT_TYPES.includes(event.getType())) { this._notifyBreadcrumbsUpdate(event); } else if (event.getType() === INTEG_PROVISIONING_EVENT_TYPE) { - let val = event.getContent()['enabled']; + const val = event.getContent()['enabled']; this._watchers.notifyUpdate("integration_provisioning", null, SettingLevel.ACCOUNT, val); } } From 28e098832578f291e17bfd9d884880c7373e0fc0 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:26:35 -0600 Subject: [PATCH 4/6] Fix naming of integrationProvisioning --- src/settings/Settings.js | 2 +- src/settings/handlers/AccountSettingsHandler.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 586ec7d1cf..54446a467b 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -279,7 +279,7 @@ export const SETTINGS = { supportedLevels: ['account'], default: [], }, - "integration_provisioning": { + "integrationProvisioning": { supportedLevels: ['account'], default: true, }, diff --git a/src/settings/handlers/AccountSettingsHandler.js b/src/settings/handlers/AccountSettingsHandler.js index 7f05dc22c6..f738bf7971 100644 --- a/src/settings/handlers/AccountSettingsHandler.js +++ b/src/settings/handlers/AccountSettingsHandler.js @@ -65,7 +65,7 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa this._notifyBreadcrumbsUpdate(event); } else if (event.getType() === INTEG_PROVISIONING_EVENT_TYPE) { const val = event.getContent()['enabled']; - this._watchers.notifyUpdate("integration_provisioning", null, SettingLevel.ACCOUNT, val); + this._watchers.notifyUpdate("integrationProvisioning", null, SettingLevel.ACCOUNT, val); } } @@ -93,7 +93,7 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa } // Special case integration manager provisioning - if (settingName === "integration_provisioning") { + if (settingName === "integrationProvisioning") { const content = this._getSettings(INTEG_PROVISIONING_EVENT_TYPE); return content ? content['enabled'] : null; } @@ -132,7 +132,7 @@ export default class AccountSettingsHandler extends MatrixClientBackedSettingsHa } // Special case integration manager provisioning - if (settingName === "integration_provisioning") { + if (settingName === "integrationProvisioning") { const content = this._getSettings(INTEG_PROVISIONING_EVENT_TYPE) || {}; content['enabled'] = newValue; return MatrixClientPeg.get().setAccountData(INTEG_PROVISIONING_EVENT_TYPE, content); From 5af6d979c2f3ae13633ea1183a633d7ce0ec033d Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:35:35 -0600 Subject: [PATCH 5/6] Support a setting for allowed widgets Hooking this setting up is left as a problem for a different issue. --- src/settings/Settings.js | 4 ++++ .../handlers/RoomAccountSettingsHandler.js | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 54446a467b..2220435cb9 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -283,6 +283,10 @@ export const SETTINGS = { supportedLevels: ['account'], default: true, }, + "allowedWidgets": { + supportedLevels: ['room-account'], + default: {}, // none allowed + }, "analyticsOptIn": { supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, displayName: _td('Send analytics data'), diff --git a/src/settings/handlers/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js index 3c8a1f9941..f3a3cb643d 100644 --- a/src/settings/handlers/RoomAccountSettingsHandler.js +++ b/src/settings/handlers/RoomAccountSettingsHandler.js @@ -19,6 +19,8 @@ import MatrixClientPeg from '../../MatrixClientPeg'; import MatrixClientBackedSettingsHandler from "./MatrixClientBackedSettingsHandler"; import {SettingLevel} from "../SettingsStore"; +const ALLOWED_WIDGETS_EVENT_TYPE = "im.vector.setting.allowed_widgets"; + /** * Gets and sets settings at the "room-account" level for the current user. */ @@ -58,6 +60,8 @@ export default class RoomAccountSettingsHandler extends MatrixClientBackedSettin const val = event.getContent()[settingName]; this._watchers.notifyUpdate(settingName, roomId, SettingLevel.ROOM_ACCOUNT, val); } + } else if (event.getType() === ALLOWED_WIDGETS_EVENT_TYPE) { + this._watchers.notifyUpdate("allowedWidgets", roomId, SettingLevel.ROOM_ACCOUNT, event.getContent()); } } @@ -79,6 +83,11 @@ export default class RoomAccountSettingsHandler extends MatrixClientBackedSettin return this._getSettings(roomId, "org.matrix.room.color_scheme"); } + // Special case allowed widgets + if (settingName === "allowedWidgets") { + return this._getSettings(roomId, ALLOWED_WIDGETS_EVENT_TYPE); + } + const settings = this._getSettings(roomId) || {}; return settings[settingName]; } @@ -97,6 +106,11 @@ export default class RoomAccountSettingsHandler extends MatrixClientBackedSettin return MatrixClientPeg.get().setRoomAccountData(roomId, "org.matrix.room.color_scheme", newValue); } + // Special case allowed widgets + if (settingName === "allowedWidgets") { + return return MatrixClientPeg.get().setRoomAccountData(roomId, ALLOWED_WIDGETS_EVENT_TYPE, newValue); + } + const content = this._getSettings(roomId) || {}; content[settingName] = newValue; return MatrixClientPeg.get().setRoomAccountData(roomId, "im.vector.web.settings", content); From 9d0d1d3b36bac8448660e37ea105bc85a1b6c278 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 29 Oct 2019 14:38:39 -0600 Subject: [PATCH 6/6] Our code should probably compile... --- src/settings/handlers/RoomAccountSettingsHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/handlers/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js index f3a3cb643d..0206711db2 100644 --- a/src/settings/handlers/RoomAccountSettingsHandler.js +++ b/src/settings/handlers/RoomAccountSettingsHandler.js @@ -108,7 +108,7 @@ export default class RoomAccountSettingsHandler extends MatrixClientBackedSettin // Special case allowed widgets if (settingName === "allowedWidgets") { - return return MatrixClientPeg.get().setRoomAccountData(roomId, ALLOWED_WIDGETS_EVENT_TYPE, newValue); + return MatrixClientPeg.get().setRoomAccountData(roomId, ALLOWED_WIDGETS_EVENT_TYPE, newValue); } const content = this._getSettings(roomId) || {};