diff --git a/src/settings/handlers/RoomDeviceSettingsHandler.js b/src/settings/handlers/RoomDeviceSettingsHandler.ts similarity index 66% rename from src/settings/handlers/RoomDeviceSettingsHandler.js rename to src/settings/handlers/RoomDeviceSettingsHandler.ts index cd1f9e9265..2fcd58c27c 100644 --- a/src/settings/handlers/RoomDeviceSettingsHandler.js +++ b/src/settings/handlers/RoomDeviceSettingsHandler.ts @@ -1,6 +1,6 @@ /* Copyright 2017 Travis Ralston -Copyright 2019 New Vector Ltd. +Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,71 +16,70 @@ limitations under the License. */ import SettingsHandler from "./SettingsHandler"; -import {SettingLevel} from "../SettingLevel"; +import { SettingLevel } from "../SettingLevel"; +import { WatchManager } from "../WatchManager"; /** * Gets and sets settings at the "room-device" level for the current device in a particular * room. */ export default class RoomDeviceSettingsHandler extends SettingsHandler { - constructor(watchManager) { + constructor(private watchers: WatchManager) { super(); - - this._watchers = watchManager; } - getValue(settingName, roomId) { + public getValue(settingName: string, roomId: string): any { // Special case blacklist setting to use legacy values if (settingName === "blacklistUnverifiedDevices") { - const value = this._read("mx_local_settings"); + const value = this.read("mx_local_settings"); if (value && value['blacklistUnverifiedDevicesPerRoom']) { return value['blacklistUnverifiedDevicesPerRoom'][roomId]; } } - const value = this._read(this._getKey(settingName, roomId)); + const value = this.read(this.getKey(settingName, roomId)); if (value) return value.value; return null; } - setValue(settingName, roomId, newValue) { + public setValue(settingName: string, roomId: string, newValue: any): Promise { // Special case blacklist setting for legacy structure if (settingName === "blacklistUnverifiedDevices") { - let value = this._read("mx_local_settings"); + 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)); - this._watchers.notifyUpdate(settingName, roomId, SettingLevel.ROOM_DEVICE, newValue); + this.watchers.notifyUpdate(settingName, roomId, SettingLevel.ROOM_DEVICE, newValue); return Promise.resolve(); } if (newValue === null) { - localStorage.removeItem(this._getKey(settingName, roomId)); + localStorage.removeItem(this.getKey(settingName, roomId)); } else { newValue = JSON.stringify({value: newValue}); - localStorage.setItem(this._getKey(settingName, roomId), newValue); + localStorage.setItem(this.getKey(settingName, roomId), newValue); } - this._watchers.notifyUpdate(settingName, roomId, SettingLevel.ROOM_DEVICE, newValue); + this.watchers.notifyUpdate(settingName, roomId, SettingLevel.ROOM_DEVICE, newValue); return Promise.resolve(); } - canSetValue(settingName, roomId) { + public canSetValue(settingName: string, roomId: string): boolean { return true; // It's their device, so they should be able to } - isSupported() { + public isSupported(): boolean { return localStorage !== undefined && localStorage !== null; } - _read(key) { + private read(key: string): any { const rawValue = localStorage.getItem(key); if (!rawValue) return null; return JSON.parse(rawValue); } - _getKey(settingName, roomId) { + private getKey(settingName: string, roomId: string): string { return "mx_setting_" + settingName + "_" + roomId; } } diff --git a/src/settings/handlers/SettingsHandler.ts b/src/settings/handlers/SettingsHandler.ts index 53adb9aca6..4b1c3459da 100644 --- a/src/settings/handlers/SettingsHandler.ts +++ b/src/settings/handlers/SettingsHandler.ts @@ -44,7 +44,7 @@ export default abstract class SettingsHandler { * @param {*} newValue The new value for the setting, may be null. * @returns {Promise} Resolves when the setting has been saved. */ - public setValue(settingName: string, roomId: string, newValue): Promise { + public setValue(settingName: string, roomId: string, newValue: any): Promise { console.error("Invalid operation: setValue was not overridden"); return Promise.reject(new Error("Invalid operation: setValue was not overridden")); }