matrix-react-sdk
Version:
SDK for matrix.org using React
94 lines (89 loc) • 12.9 kB
JavaScript
"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 _MatrixClientBackedController = _interopRequireDefault(require("./MatrixClientBackedController"));
var _SettingsStore = _interopRequireDefault(require("../SettingsStore"));
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Disables a given setting if the server unstable feature it requires is not supported
* When a setting gets disabled or enabled from this controller it notifies the given WatchManager
*/
class ServerSupportUnstableFeatureController extends _MatrixClientBackedController.default {
/**
* Construct a new ServerSupportUnstableFeatureController.
*
* @param unstableFeatureGroups - If any one of the feature groups is satisfied,
* then the setting is considered enabled. A feature group is satisfied if all of
* the features in the group are supported (all features in a group are required).
*/
constructor(settingName, watchers, unstableFeatureGroups, stableVersion, disabledMessage, forcedValue = false) {
super();
// Starts off as `undefined` so when we first compare the `newDisabledValue`, it sees
// it as a change and updates the watchers.
(0, _defineProperty2.default)(this, "enabled", void 0);
this.settingName = settingName;
this.watchers = watchers;
this.unstableFeatureGroups = unstableFeatureGroups;
this.stableVersion = stableVersion;
this.disabledMessage = disabledMessage;
this.forcedValue = forcedValue;
}
get disabled() {
return !this.enabled;
}
set disabled(newDisabledValue) {
if (!newDisabledValue === this.enabled) return;
this.enabled = !newDisabledValue;
const level = _SettingsStore.default.firstSupportedLevel(this.settingName);
if (!level) return;
const settingValue = _SettingsStore.default.getValue(this.settingName, null);
this.watchers.notifyUpdate(this.settingName, null, level, settingValue);
}
async initMatrixClient() {
// Check for stable version support first
if (this.stableVersion && (await this.client.isVersionSupported(this.stableVersion))) {
this.disabled = false;
return;
}
// Otherwise, only one of the unstable feature groups needs to be satisfied in
// order for this setting overall to be enabled
let isEnabled = false;
for (const featureGroup of this.unstableFeatureGroups) {
const featureSupportList = await Promise.all(featureGroup.map(async feature => {
const isFeatureSupported = await this.client.doesServerSupportUnstableFeature(feature);
return isFeatureSupported;
}));
// Every feature in a feature group is required in order
// for this setting overall to be enabled.
const isFeatureGroupSatisfied = featureSupportList.every(isFeatureSupported => isFeatureSupported);
if (isFeatureGroupSatisfied) {
isEnabled = true;
break;
}
}
this.disabled = !isEnabled;
}
getValueOverride(level, roomId, calculatedValue, calculatedAtLevel) {
if (this.settingDisabled) {
return this.forcedValue;
}
return null; // no override
}
get settingDisabled() {
if (this.disabled) {
return this.disabledMessage ?? true;
}
return false;
}
}
exports.default = ServerSupportUnstableFeatureController;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTWF0cml4Q2xpZW50QmFja2VkQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1NldHRpbmdzU3RvcmUiLCJTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlQ29udHJvbGxlciIsIk1hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsInNldHRpbmdOYW1lIiwid2F0Y2hlcnMiLCJ1bnN0YWJsZUZlYXR1cmVHcm91cHMiLCJzdGFibGVWZXJzaW9uIiwiZGlzYWJsZWRNZXNzYWdlIiwiZm9yY2VkVmFsdWUiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImRpc2FibGVkIiwiZW5hYmxlZCIsIm5ld0Rpc2FibGVkVmFsdWUiLCJsZXZlbCIsIlNldHRpbmdzU3RvcmUiLCJmaXJzdFN1cHBvcnRlZExldmVsIiwic2V0dGluZ1ZhbHVlIiwiZ2V0VmFsdWUiLCJub3RpZnlVcGRhdGUiLCJpbml0TWF0cml4Q2xpZW50IiwiY2xpZW50IiwiaXNWZXJzaW9uU3VwcG9ydGVkIiwiaXNFbmFibGVkIiwiZmVhdHVyZUdyb3VwIiwiZmVhdHVyZVN1cHBvcnRMaXN0IiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZlYXR1cmUiLCJpc0ZlYXR1cmVTdXBwb3J0ZWQiLCJkb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZSIsImlzRmVhdHVyZUdyb3VwU2F0aXNmaWVkIiwiZXZlcnkiLCJnZXRWYWx1ZU92ZXJyaWRlIiwicm9vbUlkIiwiY2FsY3VsYXRlZFZhbHVlIiwiY2FsY3VsYXRlZEF0TGV2ZWwiLCJzZXR0aW5nRGlzYWJsZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NldHRpbmdzL2NvbnRyb2xsZXJzL1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmVDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IFNldHRpbmdMZXZlbCB9IGZyb20gXCIuLi9TZXR0aW5nTGV2ZWxcIjtcbmltcG9ydCBNYXRyaXhDbGllbnRCYWNrZWRDb250cm9sbGVyIGZyb20gXCIuL01hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFdhdGNoTWFuYWdlciB9IGZyb20gXCIuLi9XYXRjaE1hbmFnZXJcIjtcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi9TZXR0aW5nc1N0b3JlXCI7XG5cbi8qKlxuICogRGlzYWJsZXMgYSBnaXZlbiBzZXR0aW5nIGlmIHRoZSBzZXJ2ZXIgdW5zdGFibGUgZmVhdHVyZSBpdCByZXF1aXJlcyBpcyBub3Qgc3VwcG9ydGVkXG4gKiBXaGVuIGEgc2V0dGluZyBnZXRzIGRpc2FibGVkIG9yIGVuYWJsZWQgZnJvbSB0aGlzIGNvbnRyb2xsZXIgaXQgbm90aWZpZXMgdGhlIGdpdmVuIFdhdGNoTWFuYWdlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlQ29udHJvbGxlciBleHRlbmRzIE1hdHJpeENsaWVudEJhY2tlZENvbnRyb2xsZXIge1xuICAgIC8vIFN0YXJ0cyBvZmYgYXMgYHVuZGVmaW5lZGAgc28gd2hlbiB3ZSBmaXJzdCBjb21wYXJlIHRoZSBgbmV3RGlzYWJsZWRWYWx1ZWAsIGl0IHNlZXNcbiAgICAvLyBpdCBhcyBhIGNoYW5nZSBhbmQgdXBkYXRlcyB0aGUgd2F0Y2hlcnMuXG4gICAgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgbmV3IFNlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmVDb250cm9sbGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVuc3RhYmxlRmVhdHVyZUdyb3VwcyAtIElmIGFueSBvbmUgb2YgdGhlIGZlYXR1cmUgZ3JvdXBzIGlzIHNhdGlzZmllZCxcbiAgICAgKiB0aGVuIHRoZSBzZXR0aW5nIGlzIGNvbnNpZGVyZWQgZW5hYmxlZC4gQSBmZWF0dXJlIGdyb3VwIGlzIHNhdGlzZmllZCBpZiBhbGwgb2ZcbiAgICAgKiB0aGUgZmVhdHVyZXMgaW4gdGhlIGdyb3VwIGFyZSBzdXBwb3J0ZWQgKGFsbCBmZWF0dXJlcyBpbiBhIGdyb3VwIGFyZSByZXF1aXJlZCkuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdOYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2F0Y2hlcnM6IFdhdGNoTWFuYWdlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1bnN0YWJsZUZlYXR1cmVHcm91cHM6IHN0cmluZ1tdW10sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhYmxlVmVyc2lvbj86IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZE1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9yY2VkVmFsdWU6IGFueSA9IGZhbHNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lbmFibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQobmV3RGlzYWJsZWRWYWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIW5ld0Rpc2FibGVkVmFsdWUgPT09IHRoaXMuZW5hYmxlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSAhbmV3RGlzYWJsZWRWYWx1ZTtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBTZXR0aW5nc1N0b3JlLmZpcnN0U3VwcG9ydGVkTGV2ZWwodGhpcy5zZXR0aW5nTmFtZSk7XG4gICAgICAgIGlmICghbGV2ZWwpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2V0dGluZ1ZhbHVlID0gU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZSh0aGlzLnNldHRpbmdOYW1lLCBudWxsKTtcbiAgICAgICAgdGhpcy53YXRjaGVycy5ub3RpZnlVcGRhdGUodGhpcy5zZXR0aW5nTmFtZSwgbnVsbCwgbGV2ZWwsIHNldHRpbmdWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGluaXRNYXRyaXhDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIENoZWNrIGZvciBzdGFibGUgdmVyc2lvbiBzdXBwb3J0IGZpcnN0XG4gICAgICAgIGlmICh0aGlzLnN0YWJsZVZlcnNpb24gJiYgKGF3YWl0IHRoaXMuY2xpZW50IS5pc1ZlcnNpb25TdXBwb3J0ZWQodGhpcy5zdGFibGVWZXJzaW9uKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgb25seSBvbmUgb2YgdGhlIHVuc3RhYmxlIGZlYXR1cmUgZ3JvdXBzIG5lZWRzIHRvIGJlIHNhdGlzZmllZCBpblxuICAgICAgICAvLyBvcmRlciBmb3IgdGhpcyBzZXR0aW5nIG92ZXJhbGwgdG8gYmUgZW5hYmxlZFxuICAgICAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZUdyb3VwIG9mIHRoaXMudW5zdGFibGVGZWF0dXJlR3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlU3VwcG9ydExpc3QgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBmZWF0dXJlR3JvdXAubWFwKGFzeW5jIChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmVhdHVyZVN1cHBvcnRlZCA9IGF3YWl0IHRoaXMuY2xpZW50IS5kb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRmVhdHVyZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEV2ZXJ5IGZlYXR1cmUgaW4gYSBmZWF0dXJlIGdyb3VwIGlzIHJlcXVpcmVkIGluIG9yZGVyXG4gICAgICAgICAgICAvLyBmb3IgdGhpcyBzZXR0aW5nIG92ZXJhbGwgdG8gYmUgZW5hYmxlZC5cbiAgICAgICAgICAgIGNvbnN0IGlzRmVhdHVyZUdyb3VwU2F0aXNmaWVkID0gZmVhdHVyZVN1cHBvcnRMaXN0LmV2ZXJ5KChpc0ZlYXR1cmVTdXBwb3J0ZWQpID0+IGlzRmVhdHVyZVN1cHBvcnRlZCk7XG4gICAgICAgICAgICBpZiAoaXNGZWF0dXJlR3JvdXBTYXRpc2ZpZWQpIHtcbiAgICAgICAgICAgICAgICBpc0VuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9ICFpc0VuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlT3ZlcnJpZGUoXG4gICAgICAgIGxldmVsOiBTZXR0aW5nTGV2ZWwsXG4gICAgICAgIHJvb21JZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgY2FsY3VsYXRlZFZhbHVlOiBhbnksXG4gICAgICAgIGNhbGN1bGF0ZWRBdExldmVsOiBTZXR0aW5nTGV2ZWwgfCBudWxsLFxuICAgICk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9yY2VkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIG92ZXJyaWRlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0aW5nRGlzYWJsZWQoKTogYm9vbGVhbiB8IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZE1lc3NhZ2UgPz8gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLDZCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxjQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLE1BQU1FLHNDQUFzQyxTQUFTQyxxQ0FBNEIsQ0FBQztFQUs3RjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNXQyxXQUFXQSxDQUNHQyxXQUFtQixFQUNuQkMsUUFBc0IsRUFDdEJDLHFCQUFpQyxFQUNqQ0MsYUFBc0IsRUFDdEJDLGVBQXdCLEVBQ3hCQyxXQUFnQixHQUFHLEtBQUssRUFDM0M7SUFDRSxLQUFLLENBQUMsQ0FBQztJQW5CWDtJQUNBO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLEtBV3FCUCxXQUFtQixHQUFuQkEsV0FBbUI7SUFBQSxLQUNuQkMsUUFBc0IsR0FBdEJBLFFBQXNCO0lBQUEsS0FDdEJDLHFCQUFpQyxHQUFqQ0EscUJBQWlDO0lBQUEsS0FDakNDLGFBQXNCLEdBQXRCQSxhQUFzQjtJQUFBLEtBQ3RCQyxlQUF3QixHQUF4QkEsZUFBd0I7SUFBQSxLQUN4QkMsV0FBZ0IsR0FBaEJBLFdBQWdCO0VBR3JDO0VBRUEsSUFBV0csUUFBUUEsQ0FBQSxFQUFZO0lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUNDLE9BQU87RUFDeEI7RUFFQSxJQUFXRCxRQUFRQSxDQUFDRSxnQkFBeUIsRUFBRTtJQUMzQyxJQUFJLENBQUNBLGdCQUFnQixLQUFLLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ3hDLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUNDLGdCQUFnQjtJQUNoQyxNQUFNQyxLQUFLLEdBQUdDLHNCQUFhLENBQUNDLG1CQUFtQixDQUFDLElBQUksQ0FBQ2IsV0FBVyxDQUFDO0lBQ2pFLElBQUksQ0FBQ1csS0FBSyxFQUFFO0lBQ1osTUFBTUcsWUFBWSxHQUFHRixzQkFBYSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDZixXQUFXLEVBQUUsSUFBSSxDQUFDO0lBQ25FLElBQUksQ0FBQ0MsUUFBUSxDQUFDZSxZQUFZLENBQUMsSUFBSSxDQUFDaEIsV0FBVyxFQUFFLElBQUksRUFBRVcsS0FBSyxFQUFFRyxZQUFZLENBQUM7RUFDM0U7RUFFQSxNQUFnQkcsZ0JBQWdCQSxDQUFBLEVBQWtCO0lBQzlDO0lBQ0EsSUFBSSxJQUFJLENBQUNkLGFBQWEsS0FBSyxNQUFNLElBQUksQ0FBQ2UsTUFBTSxDQUFFQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUNoQixhQUFhLENBQUMsQ0FBQyxFQUFFO01BQ25GLElBQUksQ0FBQ0ssUUFBUSxHQUFHLEtBQUs7TUFDckI7SUFDSjs7SUFFQTtJQUNBO0lBQ0EsSUFBSVksU0FBUyxHQUFHLEtBQUs7SUFDckIsS0FBSyxNQUFNQyxZQUFZLElBQUksSUFBSSxDQUFDbkIscUJBQXFCLEVBQUU7TUFDbkQsTUFBTW9CLGtCQUFrQixHQUFHLE1BQU1DLE9BQU8sQ0FBQ0MsR0FBRyxDQUN4Q0gsWUFBWSxDQUFDSSxHQUFHLENBQUMsTUFBT0MsT0FBTyxJQUFLO1FBQ2hDLE1BQU1DLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDVCxNQUFNLENBQUVVLGdDQUFnQyxDQUFDRixPQUFPLENBQUM7UUFDdkYsT0FBT0Msa0JBQWtCO01BQzdCLENBQUMsQ0FDTCxDQUFDOztNQUVEO01BQ0E7TUFDQSxNQUFNRSx1QkFBdUIsR0FBR1Asa0JBQWtCLENBQUNRLEtBQUssQ0FBRUgsa0JBQWtCLElBQUtBLGtCQUFrQixDQUFDO01BQ3BHLElBQUlFLHVCQUF1QixFQUFFO1FBQ3pCVCxTQUFTLEdBQUcsSUFBSTtRQUNoQjtNQUNKO0lBQ0o7SUFFQSxJQUFJLENBQUNaLFFBQVEsR0FBRyxDQUFDWSxTQUFTO0VBQzlCO0VBRU9XLGdCQUFnQkEsQ0FDbkJwQixLQUFtQixFQUNuQnFCLE1BQXFCLEVBQ3JCQyxlQUFvQixFQUNwQkMsaUJBQXNDLEVBQ25DO0lBQ0gsSUFBSSxJQUFJLENBQUNDLGVBQWUsRUFBRTtNQUN0QixPQUFPLElBQUksQ0FBQzlCLFdBQVc7SUFDM0I7SUFDQSxPQUFPLElBQUksQ0FBQyxDQUFDO0VBQ2pCO0VBRUEsSUFBVzhCLGVBQWVBLENBQUEsRUFBcUI7SUFDM0MsSUFBSSxJQUFJLENBQUMzQixRQUFRLEVBQUU7TUFDZixPQUFPLElBQUksQ0FBQ0osZUFBZSxJQUFJLElBQUk7SUFDdkM7SUFDQSxPQUFPLEtBQUs7RUFDaEI7QUFDSjtBQUFDZ0MsT0FBQSxDQUFBN0IsT0FBQSxHQUFBVixzQ0FBQSIsImlnbm9yZUxpc3QiOltdfQ==