UNPKG

matrix-react-sdk

Version:
76 lines (73 loc) 9.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _SettingsHandler = _interopRequireDefault(require("./SettingsHandler")); /* Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2017 Travis Ralston SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /** * A wrapper for a SettingsHandler that performs local echo on * changes to settings. This wrapper will use the underlying * handler as much as possible to ensure values are not stale. */ class LocalEchoWrapper extends _SettingsHandler.default { /** * Creates a new local echo wrapper * @param {SettingsHandler} handler The handler to wrap * @param {SettingLevel} level The level to notify updates at */ constructor(handler, level) { super(); (0, _defineProperty2.default)(this, "cache", {}); this.handler = handler; this.level = level; } getValue(settingName, roomId) { const cacheRoomId = roomId ?? "UNDEFINED"; // avoid weird keys const bySetting = this.cache[settingName]; if (bySetting?.hasOwnProperty(cacheRoomId)) { return bySetting[cacheRoomId]; } return this.handler.getValue(settingName, roomId); } async setValue(settingName, roomId, newValue) { if (!this.cache[settingName]) this.cache[settingName] = {}; const bySetting = this.cache[settingName]; const cacheRoomId = roomId ?? "UNDEFINED"; // avoid weird keys bySetting[cacheRoomId] = newValue; const currentValue = this.handler.getValue(settingName, roomId); const handlerPromise = this.handler.setValue(settingName, roomId, newValue); this.handler.watchers?.notifyUpdate(settingName, roomId, this.level, newValue); try { await handlerPromise; } catch (e) { // notify of a rollback this.handler.watchers?.notifyUpdate(settingName, roomId, this.level, currentValue); } finally { // only expire the cache if our value hasn't been overwritten yet if (bySetting[cacheRoomId] === newValue) { delete bySetting[cacheRoomId]; } } } canSetValue(settingName, roomId) { return this.handler.canSetValue(settingName, roomId); } isSupported() { return this.handler.isSupported(); } reset() { this.cache = {}; this.handler.reset(); } } exports.default = LocalEchoWrapper; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfU2V0dGluZ3NIYW5kbGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJMb2NhbEVjaG9XcmFwcGVyIiwiU2V0dGluZ3NIYW5kbGVyIiwiY29uc3RydWN0b3IiLCJoYW5kbGVyIiwibGV2ZWwiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImdldFZhbHVlIiwic2V0dGluZ05hbWUiLCJyb29tSWQiLCJjYWNoZVJvb21JZCIsImJ5U2V0dGluZyIsImNhY2hlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwiY3VycmVudFZhbHVlIiwiaGFuZGxlclByb21pc2UiLCJ3YXRjaGVycyIsIm5vdGlmeVVwZGF0ZSIsImUiLCJjYW5TZXRWYWx1ZSIsImlzU3VwcG9ydGVkIiwicmVzZXQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NldHRpbmdzL2hhbmRsZXJzL0xvY2FsRWNob1dyYXBwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTksIDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE3IFRyYXZpcyBSYWxzdG9uXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBTZXR0aW5nc0hhbmRsZXIgZnJvbSBcIi4vU2V0dGluZ3NIYW5kbGVyXCI7XG5pbXBvcnQgeyBTZXR0aW5nTGV2ZWwgfSBmcm9tIFwiLi4vU2V0dGluZ0xldmVsXCI7XG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBhIFNldHRpbmdzSGFuZGxlciB0aGF0IHBlcmZvcm1zIGxvY2FsIGVjaG8gb25cbiAqIGNoYW5nZXMgdG8gc2V0dGluZ3MuIFRoaXMgd3JhcHBlciB3aWxsIHVzZSB0aGUgdW5kZXJseWluZ1xuICogaGFuZGxlciBhcyBtdWNoIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB2YWx1ZXMgYXJlIG5vdCBzdGFsZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9jYWxFY2hvV3JhcHBlciBleHRlbmRzIFNldHRpbmdzSGFuZGxlciB7XG4gICAgcHJpdmF0ZSBjYWNoZToge1xuICAgICAgICBbc2V0dGluZ05hbWU6IHN0cmluZ106IHtcbiAgICAgICAgICAgIFtyb29tSWQ6IHN0cmluZ106IGFueTtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGxvY2FsIGVjaG8gd3JhcHBlclxuICAgICAqIEBwYXJhbSB7U2V0dGluZ3NIYW5kbGVyfSBoYW5kbGVyIFRoZSBoYW5kbGVyIHRvIHdyYXBcbiAgICAgKiBAcGFyYW0ge1NldHRpbmdMZXZlbH0gbGV2ZWwgVGhlIGxldmVsIHRvIG5vdGlmeSB1cGRhdGVzIGF0XG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZXI6IFNldHRpbmdzSGFuZGxlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsZXZlbDogU2V0dGluZ0xldmVsLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShzZXR0aW5nTmFtZTogc3RyaW5nLCByb29tSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNhY2hlUm9vbUlkID0gcm9vbUlkID8/IFwiVU5ERUZJTkVEXCI7IC8vIGF2b2lkIHdlaXJkIGtleXNcbiAgICAgICAgY29uc3QgYnlTZXR0aW5nID0gdGhpcy5jYWNoZVtzZXR0aW5nTmFtZV07XG4gICAgICAgIGlmIChieVNldHRpbmc/Lmhhc093blByb3BlcnR5KGNhY2hlUm9vbUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ5U2V0dGluZ1tjYWNoZVJvb21JZF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmdldFZhbHVlKHNldHRpbmdOYW1lLCByb29tSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRWYWx1ZShzZXR0aW5nTmFtZTogc3RyaW5nLCByb29tSWQ6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbc2V0dGluZ05hbWVdKSB0aGlzLmNhY2hlW3NldHRpbmdOYW1lXSA9IHt9O1xuICAgICAgICBjb25zdCBieVNldHRpbmcgPSB0aGlzLmNhY2hlW3NldHRpbmdOYW1lXTtcblxuICAgICAgICBjb25zdCBjYWNoZVJvb21JZCA9IHJvb21JZCA/PyBcIlVOREVGSU5FRFwiOyAvLyBhdm9pZCB3ZWlyZCBrZXlzXG4gICAgICAgIGJ5U2V0dGluZ1tjYWNoZVJvb21JZF0gPSBuZXdWYWx1ZTtcblxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmhhbmRsZXIuZ2V0VmFsdWUoc2V0dGluZ05hbWUsIHJvb21JZCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJQcm9taXNlID0gdGhpcy5oYW5kbGVyLnNldFZhbHVlKHNldHRpbmdOYW1lLCByb29tSWQsIG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLndhdGNoZXJzPy5ub3RpZnlVcGRhdGUoc2V0dGluZ05hbWUsIHJvb21JZCwgdGhpcy5sZXZlbCwgbmV3VmFsdWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGVyUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm90aWZ5IG9mIGEgcm9sbGJhY2tcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci53YXRjaGVycz8ubm90aWZ5VXBkYXRlKHNldHRpbmdOYW1lLCByb29tSWQsIHRoaXMubGV2ZWwsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBvbmx5IGV4cGlyZSB0aGUgY2FjaGUgaWYgb3VyIHZhbHVlIGhhc24ndCBiZWVuIG92ZXJ3cml0dGVuIHlldFxuICAgICAgICAgICAgaWYgKGJ5U2V0dGluZ1tjYWNoZVJvb21JZF0gPT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGJ5U2V0dGluZ1tjYWNoZVJvb21JZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuU2V0VmFsdWUoc2V0dGluZ05hbWU6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5jYW5TZXRWYWx1ZShzZXR0aW5nTmFtZSwgcm9vbUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaXNTdXBwb3J0ZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLnJlc2V0KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLGdCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQyxnQkFBZ0IsU0FBU0Msd0JBQWUsQ0FBQztFQU8xRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ1dDLFdBQVdBLENBQ0dDLE9BQXdCLEVBQ3hCQyxLQUFtQixFQUN0QztJQUNFLEtBQUssQ0FBQyxDQUFDO0lBQUMsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxpQkFYUixDQUFDLENBQUM7SUFB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