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": {