diff --git a/src/components/views/elements/SettingsFlag.js b/src/components/views/elements/SettingsFlag.js index 96fe704acb..3640b5538e 100644 --- a/src/components/views/elements/SettingsFlag.js +++ b/src/components/views/elements/SettingsFlag.js @@ -55,7 +55,12 @@ module.exports = React.createClass({ }, save: function(val = null) { - SettingsStore.setValue(this.props.name, this.props.roomId, this.props.level, val ? val : this.state.value); + return SettingsStore.setValue( + this.props.name, + this.props.roomId, + this.props.level, + val ? val : this.state.value + ); }, render: function() { diff --git a/src/components/views/rooms/RoomSettings.js b/src/components/views/rooms/RoomSettings.js index a7606a2bdd..50243ae65f 100644 --- a/src/components/views/rooms/RoomSettings.js +++ b/src/components/views/rooms/RoomSettings.js @@ -363,28 +363,11 @@ module.exports = React.createClass({ }, saveBlacklistUnverifiedDevicesPerRoom: function() { - if (!this.refs.blacklistUnverified) return; - if (this._isRoomBlacklistUnverified() !== this.refs.blacklistUnverified.checked) { - this._setRoomBlacklistUnverified(this.refs.blacklistUnverified.checked); - } - }, - - _isRoomBlacklistUnverified: function() { - // TODO: {Travis} Use generic blacklistUnverifiedDevices - const blacklistUnverifiedDevicesPerRoom = SettingsStore.getValue("blacklistUnverifiedDevicesPerRoom"); - if (blacklistUnverifiedDevicesPerRoom) { - return blacklistUnverifiedDevicesPerRoom[this.props.room.roomId]; - } - return false; - }, - - _setRoomBlacklistUnverified: function(value) { - // TODO: {Travis} Use generic blacklistUnverifiedDevices - const blacklistUnverifiedDevicesPerRoom = SettingsStore.getValue("blacklistUnverifiedDevicesPerRoom"); - blacklistUnverifiedDevicesPerRoom[this.props.room.roomId] = value; - SettingsStore.setValue("blacklistUnverifiedDevicesPerRoom", null, SettingLevel.DEVICE, blacklistUnverifiedDevicesPerRoom); - - this.props.room.setBlacklistUnverifiedDevices(value); + if (!this.refs.blacklistUnverifiedDevices) return; + this.refs.blacklistUnverifiedDevices.save().then(() => { + const value = SettingsStore.getValue("blacklistUnverifiedDevices", this.props.room.roomId); + this.props.room.setBlacklistUnverifiedDevices(value); + }); }, _hasDiff: function(strA, strB) { @@ -590,20 +573,20 @@ module.exports = React.createClass({ }, _renderEncryptionSection: function() { + const SettingsFlag = sdk.getComponent("elements.SettingsFlag"); + const cli = MatrixClientPeg.get(); const roomState = this.props.room.currentState; const isEncrypted = cli.isRoomEncrypted(this.props.room.roomId); - const isGlobalBlacklistUnverified = SettingsStore.getValue("blacklistUnverifiedDevices"); - const isRoomBlacklistUnverified = this._isRoomBlacklistUnverified(); - // TODO: {Travis} Convert to blacklistUnverifiedDevices with SettingsFlag - const settings = - ; + const settings = ( + + ); if (!isEncrypted && roomState.mayClientSendStateEvent("m.room.encryption", cli)) { return ( diff --git a/src/settings/DefaultSettingsHandler.js b/src/settings/DefaultSettingsHandler.js index 2c3a05a18a..cf2e660411 100644 --- a/src/settings/DefaultSettingsHandler.js +++ b/src/settings/DefaultSettingsHandler.js @@ -14,7 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import Promise from 'bluebird'; import SettingsHandler from "./SettingsHandler"; /** diff --git a/src/settings/RoomDeviceSettingsHandler.js b/src/settings/RoomDeviceSettingsHandler.js index 394d8cd319..186be3041f 100644 --- a/src/settings/RoomDeviceSettingsHandler.js +++ b/src/settings/RoomDeviceSettingsHandler.js @@ -23,12 +23,30 @@ import SettingsHandler from "./SettingsHandler"; */ export default class RoomDeviceSettingsHandler extends SettingsHandler { getValue(settingName, roomId) { - const value = localStorage.getItem(this._getKey(settingName, roomId)); - if (!value) return null; - return JSON.parse(value).value; + // Special case blacklist setting to use legacy values + if (settingName === "blacklistUnverifiedDevices") { + const value = this._read("mx_local_settings"); + if (value && value['blacklistUnverifiedDevicesPerRoom']) { + return value['blacklistUnverifiedDevicesPerRoom'][roomId]; + } + } + + const value = this._read(this._getKey(settingName, roomId)); + if (value) return value.value; + return null; } setValue(settingName, roomId, newValue) { + // Special case blacklist setting for legacy structure + if (settingName === "blacklistUnverifiedDevices") { + let value = this._read("mx_local_settings"); + if (!value) value = {}; + if (!value["blacklistUnverifiedDevicesPerRoom"]) value["blacklistUnverifiedDevicesPerRoom"] = {}; + value["blacklistUnverifiedDevicesPerRoom"][roomId] = newValue; + localStorage.setItem("mx_local_settings", JSON.stringify(value)); + return Promise.resolve(); + } + if (newValue === null) { localStorage.removeItem(this._getKey(settingName, roomId)); } else { @@ -47,6 +65,12 @@ export default class RoomDeviceSettingsHandler extends SettingsHandler { return localStorage !== undefined && localStorage !== null; } + _read(key) { + const rawValue = localStorage.getItem(key); + if (!rawValue) return null; + return JSON.parse(rawValue); + } + _getKey(settingName, roomId) { return "mx_setting_" + settingName + "_" + roomId; } diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 4bab7acb40..1408762cc2 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -188,16 +188,12 @@ export const SETTINGS = { supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG, default: 200, }, - "blacklistUnverifiedDevicesPerRoom": { - // TODO: {Travis} Write a migration path to support blacklistUnverifiedDevices - supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, - displayName: _td('Never send encrypted messages to unverified devices from this device'), - default: {}, - }, "blacklistUnverifiedDevices": { - // TODO: {Travis} Write a migration path to support blacklistUnverifiedDevices supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, - displayName: _td('Never send encrypted messages to unverified devices from this device'), + displayName: { + "default": _td('Never send encrypted messages to unverified devices from this device'), + "room-device": _td('Never send encrypted messages to unverified devices in this room from this device'), + }, default: false, }, "urlPreviewsEnabled": {