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/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js index e946581807..74dbf9eed0 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; @@ -35,16 +35,18 @@ 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"); } - 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 +57,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 +76,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(); } } 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(); } }