From b90a98b5c1e46751dcd412ddd842d04c4d6d7171 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 17 Jan 2018 18:06:19 +0000 Subject: [PATCH 1/3] don't pass back {} when we have no `org.matrix.room.color_scheme` Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/settings/handlers/RoomAccountSettingsHandler.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/settings/handlers/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js index e946581807..72355b43be 100644 --- a/src/settings/handlers/RoomAccountSettingsHandler.js +++ b/src/settings/handlers/RoomAccountSettingsHandler.js @@ -24,7 +24,7 @@ export default class RoomAccountSettingsHandler extends SettingsHandler { getValue(settingName, roomId) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings(roomId, "org.matrix.room.preview_urls"); + const content = this._getSettings(roomId, "org.matrix.room.preview_urls") || {}; // Check to make sure that we actually got a boolean if (typeof(content['disable']) !== "boolean") return null; @@ -38,13 +38,14 @@ export default class RoomAccountSettingsHandler extends SettingsHandler { return this._getSettings(roomId, "org.matrix.room.color_scheme"); } - return this._getSettings(roomId)[settingName]; + const settings = this._getSettings(roomId) || {}; + return settings[settingName]; } setValue(settingName, roomId, newValue) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings(roomId, "org.matrix.room.preview_urls"); + const content = this._getSettings(roomId, "org.matrix.room.preview_urls") || {}; content['disable'] = !newValue; return MatrixClientPeg.get().setRoomAccountData(roomId, "org.matrix.room.preview_urls", content); } @@ -55,7 +56,7 @@ export default class RoomAccountSettingsHandler extends SettingsHandler { return MatrixClientPeg.get().setRoomAccountData(roomId, "org.matrix.room.color_scheme", newValue); } - const content = this._getSettings(roomId); + const content = this._getSettings(roomId) || {}; content[settingName] = newValue; return MatrixClientPeg.get().setRoomAccountData(roomId, "im.vector.web.settings", content); } @@ -74,10 +75,10 @@ export default class RoomAccountSettingsHandler extends SettingsHandler { _getSettings(roomId, eventType = "im.vector.settings") { const room = MatrixClientPeg.get().getRoom(roomId); - if (!room) return {}; + if (!room) return null; const event = room.getAccountData(eventType); - if (!event || !event.getContent()) return {}; + if (!event || !event.getContent()) return null; return event.getContent(); } } From 43bb8c561d3e70e7b19682bde727338d520d2164 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 17 Jan 2018 18:10:19 +0000 Subject: [PATCH 2/3] add comment Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/settings/handlers/RoomAccountSettingsHandler.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings/handlers/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js index 72355b43be..74dbf9eed0 100644 --- a/src/settings/handlers/RoomAccountSettingsHandler.js +++ b/src/settings/handlers/RoomAccountSettingsHandler.js @@ -35,6 +35,7 @@ export default class RoomAccountSettingsHandler extends SettingsHandler { if (settingName === "roomColor") { // The event content should already be in an appropriate format, we just need // to get the right value. + // don't fallback to {} because thats truthy and would imply there is an event specifying tint return this._getSettings(roomId, "org.matrix.room.color_scheme"); } From b7204e79a7479dc1f1a2d429e4e9c55da7485dc0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 17 Jan 2018 18:17:26 +0000 Subject: [PATCH 3/3] fallback after receiving settings rather than {} because its truthy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/settings/handlers/AccountSettingsHandler.js | 16 +++++++++------- src/settings/handlers/DeviceSettingsHandler.js | 7 ++++--- src/settings/handlers/RoomSettingsHandler.js | 14 ++++++++------ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/settings/handlers/AccountSettingsHandler.js b/src/settings/handlers/AccountSettingsHandler.js index e50358a728..b822709573 100644 --- a/src/settings/handlers/AccountSettingsHandler.js +++ b/src/settings/handlers/AccountSettingsHandler.js @@ -25,19 +25,20 @@ export default class AccountSettingHandler extends SettingsHandler { getValue(settingName, roomId) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings("org.matrix.preview_urls"); + const content = this._getSettings("org.matrix.preview_urls") || {}; // Check to make sure that we actually got a boolean if (typeof(content['disable']) !== "boolean") return null; return !content['disable']; } - let preferredValue = this._getSettings()[settingName]; + const settings = this._getSettings() || {}; + let preferredValue = settings[settingName]; if (preferredValue === null || preferredValue === undefined) { // Honour the old setting on read only if (settingName === "hideAvatarChanges" || settingName === "hideDisplaynameChanges") { - preferredValue = this._getSettings()["hideAvatarDisplaynameChanges"]; + preferredValue = settings["hideAvatarDisplaynameChanges"]; } } @@ -47,12 +48,12 @@ export default class AccountSettingHandler extends SettingsHandler { setValue(settingName, roomId, newValue) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings("org.matrix.preview_urls"); + const content = this._getSettings("org.matrix.preview_urls") || {}; content['disable'] = !newValue; return MatrixClientPeg.get().setAccountData("org.matrix.preview_urls", content); } - const content = this._getSettings(); + const content = this._getSettings() || {}; content[settingName] = newValue; return MatrixClientPeg.get().setAccountData("im.vector.web.settings", content); } @@ -68,9 +69,10 @@ export default class AccountSettingHandler extends SettingsHandler { _getSettings(eventType = "im.vector.web.settings") { const cli = MatrixClientPeg.get(); - if (!cli) return {}; + if (!cli) return null; + const event = cli.getAccountData(eventType); - if (!event || !event.getContent()) return {}; + if (!event || !event.getContent()) return null; return event.getContent(); } } diff --git a/src/settings/handlers/DeviceSettingsHandler.js b/src/settings/handlers/DeviceSettingsHandler.js index 22f6140a80..13117f7498 100644 --- a/src/settings/handlers/DeviceSettingsHandler.js +++ b/src/settings/handlers/DeviceSettingsHandler.js @@ -53,7 +53,8 @@ export default class DeviceSettingsHandler extends SettingsHandler { return null; // wrong type or otherwise not set } - return this._getSettings()[settingName]; + const settings = this._getSettings() || {}; + return settings[settingName]; } setValue(settingName, roomId, newValue) { @@ -74,7 +75,7 @@ export default class DeviceSettingsHandler extends SettingsHandler { return Promise.resolve(); } - const settings = this._getSettings(); + const settings = this._getSettings() || {}; settings[settingName] = newValue; localStorage.setItem("mx_local_settings", JSON.stringify(settings)); @@ -91,7 +92,7 @@ export default class DeviceSettingsHandler extends SettingsHandler { _getSettings() { const value = localStorage.getItem("mx_local_settings"); - if (!value) return {}; + if (!value) return null; return JSON.parse(value); } diff --git a/src/settings/handlers/RoomSettingsHandler.js b/src/settings/handlers/RoomSettingsHandler.js index cb3e836c7f..71abff94f6 100644 --- a/src/settings/handlers/RoomSettingsHandler.js +++ b/src/settings/handlers/RoomSettingsHandler.js @@ -24,25 +24,26 @@ export default class RoomSettingsHandler extends SettingsHandler { getValue(settingName, roomId) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings(roomId, "org.matrix.room.preview_urls"); + const content = this._getSettings(roomId, "org.matrix.room.preview_urls") || {}; // Check to make sure that we actually got a boolean if (typeof(content['disable']) !== "boolean") return null; return !content['disable']; } - return this._getSettings(roomId)[settingName]; + const settings = this._getSettings(roomId) || {}; + return settings[settingName]; } setValue(settingName, roomId, newValue) { // Special case URL previews if (settingName === "urlPreviewsEnabled") { - const content = this._getSettings(roomId, "org.matrix.room.preview_urls"); + const content = this._getSettings(roomId, "org.matrix.room.preview_urls") || {}; content['disable'] = !newValue; return MatrixClientPeg.get().sendStateEvent(roomId, "org.matrix.room.preview_urls", content); } - const content = this._getSettings(roomId); + const content = this._getSettings(roomId) || {}; content[settingName] = newValue; return MatrixClientPeg.get().sendStateEvent(roomId, "im.vector.web.settings", content, ""); } @@ -65,9 +66,10 @@ export default class RoomSettingsHandler extends SettingsHandler { _getSettings(roomId, eventType = "im.vector.web.settings") { const room = MatrixClientPeg.get().getRoom(roomId); - if (!room) return {}; + if (!room) return null; + const event = room.currentState.getStateEvents(eventType, ""); - if (!event || !event.getContent()) return {}; + if (!event || !event.getContent()) return null; return event.getContent(); } }