UNPKG

matrix-react-sdk

Version:
149 lines (115 loc) 13.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RoomNotificationStateStore = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _AsyncStoreWithClient = require("../AsyncStoreWithClient"); var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher")); var _models = require("../room-list/models"); var _ListNotificationState = require("./ListNotificationState"); var _RoomNotificationState = require("./RoomNotificationState"); var _SummarizedNotificationState = require("./SummarizedNotificationState"); var _VisibilityProvider = require("../room-list/filters/VisibilityProvider"); /* Copyright 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. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ class RoomNotificationStateStore extends _AsyncStoreWithClient.AsyncStoreWithClient /*:: <IState>*/ { constructor() { super(_dispatcher.default, {}); (0, _defineProperty2.default)(this, "roomMap", new Map()); (0, _defineProperty2.default)(this, "listMap", new Map()); } /** * Gets a snapshot of notification state for all visible rooms. The number of states recorded * on the SummarizedNotificationState is equivalent to rooms. */ get globalState() /*: SummarizedNotificationState*/ { // If we're not ready yet, just return an empty state if (!this.matrixClient) return new _SummarizedNotificationState.SummarizedNotificationState(); // Only count visible rooms to not torment the user with notification counts in rooms they can't see. // This will include highlights from the previous version of the room internally const globalState = new _SummarizedNotificationState.SummarizedNotificationState(); for (const room of this.matrixClient.getVisibleRooms()) { if (_VisibilityProvider.VisibilityProvider.instance.isRoomVisible(room)) { globalState.add(this.getRoomState(room)); } } return globalState; } /** * Gets an instance of the list state class for the given tag. * @param tagId The tag to get the notification state for. * @returns The notification state for the tag. */ getListState(tagId /*: TagID*/ ) /*: ListNotificationState*/ { if (this.listMap.has(tagId)) { return this.listMap.get(tagId); } // TODO: Update if/when invites move out of the room list. const useTileCount = tagId === _models.DefaultTagID.Invite; const getRoomFn /*: FetchRoomFn*/ = (room /*: Room*/ ) => { return this.getRoomState(room); }; const state = new _ListNotificationState.ListNotificationState(useTileCount, tagId, getRoomFn); this.listMap.set(tagId, state); return state; } /** * Gets a copy of the notification state for a room. The consumer should not * attempt to destroy the returned state as it may be shared with other * consumers. * @param room The room to get the notification state for. * @returns The room's notification state. */ getRoomState(room /*: Room*/ ) /*: RoomNotificationState*/ { if (!this.roomMap.has(room)) { this.roomMap.set(room, new _RoomNotificationState.RoomNotificationState(room)); } return this.roomMap.get(room); } static get instance() /*: RoomNotificationStateStore*/ { return RoomNotificationStateStore.internalInstance; } async onNotReady() /*: Promise<any>*/ { for (const roomState of this.roomMap.values()) { roomState.destroy(); } } // We don't need this, but our contract says we do. async onAction(payload /*: ActionPayload*/ ) { return Promise.resolve(); } } exports.RoomNotificationStateStore = RoomNotificationStateStore; (0, _defineProperty2.default)(RoomNotificationStateStore, "internalInstance", new RoomNotificationStateStore()); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZXMvbm90aWZpY2F0aW9ucy9Sb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZS50cyJdLCJuYW1lcyI6WyJSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSIsIkFzeW5jU3RvcmVXaXRoQ2xpZW50IiwiY29uc3RydWN0b3IiLCJkZWZhdWx0RGlzcGF0Y2hlciIsIk1hcCIsImdsb2JhbFN0YXRlIiwibWF0cml4Q2xpZW50IiwiU3VtbWFyaXplZE5vdGlmaWNhdGlvblN0YXRlIiwicm9vbSIsImdldFZpc2libGVSb29tcyIsIlZpc2liaWxpdHlQcm92aWRlciIsImluc3RhbmNlIiwiaXNSb29tVmlzaWJsZSIsImFkZCIsImdldFJvb21TdGF0ZSIsImdldExpc3RTdGF0ZSIsInRhZ0lkIiwibGlzdE1hcCIsImhhcyIsImdldCIsInVzZVRpbGVDb3VudCIsIkRlZmF1bHRUYWdJRCIsIkludml0ZSIsImdldFJvb21GbiIsInN0YXRlIiwiTGlzdE5vdGlmaWNhdGlvblN0YXRlIiwic2V0Iiwicm9vbU1hcCIsIlJvb21Ob3RpZmljYXRpb25TdGF0ZSIsImludGVybmFsSW5zdGFuY2UiLCJvbk5vdFJlYWR5Iiwicm9vbVN0YXRlIiwidmFsdWVzIiwiZGVzdHJveSIsIm9uQWN0aW9uIiwicGF5bG9hZCIsIlByb21pc2UiLCJyZXNvbHZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWlCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUF4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY08sTUFBTUEsMEJBQU4sU0FBeUNDO0FBQXpDO0FBQXNFO0FBTWpFQyxFQUFBQSxXQUFSLEdBQXNCO0FBQ2xCLFVBQU1DLG1CQUFOLEVBQXlCLEVBQXpCO0FBRGtCLG1EQUhKLElBQUlDLEdBQUosRUFHSTtBQUFBLG1EQUZKLElBQUlBLEdBQUosRUFFSTtBQUVyQjtBQUVEO0FBQ0o7QUFDQTtBQUNBOzs7QUFDSSxNQUFXQyxXQUFYO0FBQUE7QUFBc0Q7QUFDbEQ7QUFDQSxRQUFJLENBQUMsS0FBS0MsWUFBVixFQUF3QixPQUFPLElBQUlDLHdEQUFKLEVBQVAsQ0FGMEIsQ0FJbEQ7QUFDQTs7QUFDQSxVQUFNRixXQUFXLEdBQUcsSUFBSUUsd0RBQUosRUFBcEI7O0FBQ0EsU0FBSyxNQUFNQyxJQUFYLElBQW1CLEtBQUtGLFlBQUwsQ0FBa0JHLGVBQWxCLEVBQW5CLEVBQXdEO0FBQ3BELFVBQUlDLHVDQUFtQkMsUUFBbkIsQ0FBNEJDLGFBQTVCLENBQTBDSixJQUExQyxDQUFKLEVBQXFEO0FBQ2pESCxRQUFBQSxXQUFXLENBQUNRLEdBQVosQ0FBZ0IsS0FBS0MsWUFBTCxDQUFrQk4sSUFBbEIsQ0FBaEI7QUFDSDtBQUNKOztBQUNELFdBQU9ILFdBQVA7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNXVSxFQUFBQSxZQUFQLENBQW9CQztBQUFwQjtBQUFBO0FBQUE7QUFBeUQ7QUFDckQsUUFBSSxLQUFLQyxPQUFMLENBQWFDLEdBQWIsQ0FBaUJGLEtBQWpCLENBQUosRUFBNkI7QUFDekIsYUFBTyxLQUFLQyxPQUFMLENBQWFFLEdBQWIsQ0FBaUJILEtBQWpCLENBQVA7QUFDSCxLQUhvRCxDQUtyRDs7O0FBQ0EsVUFBTUksWUFBWSxHQUFHSixLQUFLLEtBQUtLLHFCQUFhQyxNQUE1Qzs7QUFDQSxVQUFNQztBQUFzQjtBQUFBLE1BQUcsQ0FBQ2Y7QUFBRDtBQUFBLFNBQWdCO0FBQzNDLGFBQU8sS0FBS00sWUFBTCxDQUFrQk4sSUFBbEIsQ0FBUDtBQUNILEtBRkQ7O0FBR0EsVUFBTWdCLEtBQUssR0FBRyxJQUFJQyw0Q0FBSixDQUEwQkwsWUFBMUIsRUFBd0NKLEtBQXhDLEVBQStDTyxTQUEvQyxDQUFkO0FBQ0EsU0FBS04sT0FBTCxDQUFhUyxHQUFiLENBQWlCVixLQUFqQixFQUF3QlEsS0FBeEI7QUFDQSxXQUFPQSxLQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1dWLEVBQUFBLFlBQVAsQ0FBb0JOO0FBQXBCO0FBQUE7QUFBQTtBQUF1RDtBQUNuRCxRQUFJLENBQUMsS0FBS21CLE9BQUwsQ0FBYVQsR0FBYixDQUFpQlYsSUFBakIsQ0FBTCxFQUE2QjtBQUN6QixXQUFLbUIsT0FBTCxDQUFhRCxHQUFiLENBQWlCbEIsSUFBakIsRUFBdUIsSUFBSW9CLDRDQUFKLENBQTBCcEIsSUFBMUIsQ0FBdkI7QUFDSDs7QUFDRCxXQUFPLEtBQUttQixPQUFMLENBQWFSLEdBQWIsQ0FBaUJYLElBQWpCLENBQVA7QUFDSDs7QUFFRCxhQUFrQkcsUUFBbEI7QUFBQTtBQUF5RDtBQUNyRCxXQUFPWCwwQkFBMEIsQ0FBQzZCLGdCQUFsQztBQUNIOztBQUVELFFBQWdCQyxVQUFoQjtBQUFBO0FBQTJDO0FBQ3ZDLFNBQUssTUFBTUMsU0FBWCxJQUF3QixLQUFLSixPQUFMLENBQWFLLE1BQWIsRUFBeEIsRUFBK0M7QUFDM0NELE1BQUFBLFNBQVMsQ0FBQ0UsT0FBVjtBQUNIO0FBQ0osR0F2RXdFLENBeUV6RTs7O0FBQ0EsUUFBZ0JDLFFBQWhCLENBQXlCQztBQUF6QjtBQUFBLElBQWlEO0FBQzdDLFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0g7O0FBNUV3RTs7OzhCQUFoRXJDLDBCLHNCQUN5QixJQUFJQSwwQkFBSixFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHsgQWN0aW9uUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzXCI7XG5pbXBvcnQgeyBBc3luY1N0b3JlV2l0aENsaWVudCB9IGZyb20gXCIuLi9Bc3luY1N0b3JlV2l0aENsaWVudFwiO1xuaW1wb3J0IGRlZmF1bHREaXNwYXRjaGVyIGZyb20gXCIuLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IERlZmF1bHRUYWdJRCwgVGFnSUQgfSBmcm9tIFwiLi4vcm9vbS1saXN0L21vZGVsc1wiO1xuaW1wb3J0IHsgRmV0Y2hSb29tRm4sIExpc3ROb3RpZmljYXRpb25TdGF0ZSB9IGZyb20gXCIuL0xpc3ROb3RpZmljYXRpb25TdGF0ZVwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tb2RlbHMvcm9vbVwiO1xuaW1wb3J0IHsgUm9vbU5vdGlmaWNhdGlvblN0YXRlIH0gZnJvbSBcIi4vUm9vbU5vdGlmaWNhdGlvblN0YXRlXCI7XG5pbXBvcnQgeyBTdW1tYXJpemVkTm90aWZpY2F0aW9uU3RhdGUgfSBmcm9tIFwiLi9TdW1tYXJpemVkTm90aWZpY2F0aW9uU3RhdGVcIjtcbmltcG9ydCB7IFZpc2liaWxpdHlQcm92aWRlciB9IGZyb20gXCIuLi9yb29tLWxpc3QvZmlsdGVycy9WaXNpYmlsaXR5UHJvdmlkZXJcIjtcblxuaW50ZXJmYWNlIElTdGF0ZSB7fVxuXG5leHBvcnQgY2xhc3MgUm9vbU5vdGlmaWNhdGlvblN0YXRlU3RvcmUgZXh0ZW5kcyBBc3luY1N0b3JlV2l0aENsaWVudDxJU3RhdGU+IHtcbiAgICBwcml2YXRlIHN0YXRpYyBpbnRlcm5hbEluc3RhbmNlID0gbmV3IFJvb21Ob3RpZmljYXRpb25TdGF0ZVN0b3JlKCk7XG5cbiAgICBwcml2YXRlIHJvb21NYXAgPSBuZXcgTWFwPFJvb20sIFJvb21Ob3RpZmljYXRpb25TdGF0ZT4oKTtcbiAgICBwcml2YXRlIGxpc3RNYXAgPSBuZXcgTWFwPFRhZ0lELCBMaXN0Tm90aWZpY2F0aW9uU3RhdGU+KCk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihkZWZhdWx0RGlzcGF0Y2hlciwge30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzbmFwc2hvdCBvZiBub3RpZmljYXRpb24gc3RhdGUgZm9yIGFsbCB2aXNpYmxlIHJvb21zLiBUaGUgbnVtYmVyIG9mIHN0YXRlcyByZWNvcmRlZFxuICAgICAqIG9uIHRoZSBTdW1tYXJpemVkTm90aWZpY2F0aW9uU3RhdGUgaXMgZXF1aXZhbGVudCB0byByb29tcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdsb2JhbFN0YXRlKCk6IFN1bW1hcml6ZWROb3RpZmljYXRpb25TdGF0ZSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCByZWFkeSB5ZXQsIGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0YXRlXG4gICAgICAgIGlmICghdGhpcy5tYXRyaXhDbGllbnQpIHJldHVybiBuZXcgU3VtbWFyaXplZE5vdGlmaWNhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgLy8gT25seSBjb3VudCB2aXNpYmxlIHJvb21zIHRvIG5vdCB0b3JtZW50IHRoZSB1c2VyIHdpdGggbm90aWZpY2F0aW9uIGNvdW50cyBpbiByb29tcyB0aGV5IGNhbid0IHNlZS5cbiAgICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgaGlnaGxpZ2h0cyBmcm9tIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSByb29tIGludGVybmFsbHlcbiAgICAgICAgY29uc3QgZ2xvYmFsU3RhdGUgPSBuZXcgU3VtbWFyaXplZE5vdGlmaWNhdGlvblN0YXRlKCk7XG4gICAgICAgIGZvciAoY29uc3Qgcm9vbSBvZiB0aGlzLm1hdHJpeENsaWVudC5nZXRWaXNpYmxlUm9vbXMoKSkge1xuICAgICAgICAgICAgaWYgKFZpc2liaWxpdHlQcm92aWRlci5pbnN0YW5jZS5pc1Jvb21WaXNpYmxlKHJvb20pKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsU3RhdGUuYWRkKHRoaXMuZ2V0Um9vbVN0YXRlKHJvb20pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbiBpbnN0YW5jZSBvZiB0aGUgbGlzdCBzdGF0ZSBjbGFzcyBmb3IgdGhlIGdpdmVuIHRhZy5cbiAgICAgKiBAcGFyYW0gdGFnSWQgVGhlIHRhZyB0byBnZXQgdGhlIG5vdGlmaWNhdGlvbiBzdGF0ZSBmb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5vdGlmaWNhdGlvbiBzdGF0ZSBmb3IgdGhlIHRhZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TGlzdFN0YXRlKHRhZ0lkOiBUYWdJRCk6IExpc3ROb3RpZmljYXRpb25TdGF0ZSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RNYXAuaGFzKHRhZ0lkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdE1hcC5nZXQodGFnSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogVXBkYXRlIGlmL3doZW4gaW52aXRlcyBtb3ZlIG91dCBvZiB0aGUgcm9vbSBsaXN0LlxuICAgICAgICBjb25zdCB1c2VUaWxlQ291bnQgPSB0YWdJZCA9PT0gRGVmYXVsdFRhZ0lELkludml0ZTtcbiAgICAgICAgY29uc3QgZ2V0Um9vbUZuOiBGZXRjaFJvb21GbiA9IChyb29tOiBSb29tKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSb29tU3RhdGUocm9vbSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IExpc3ROb3RpZmljYXRpb25TdGF0ZSh1c2VUaWxlQ291bnQsIHRhZ0lkLCBnZXRSb29tRm4pO1xuICAgICAgICB0aGlzLmxpc3RNYXAuc2V0KHRhZ0lkLCBzdGF0ZSk7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgY29weSBvZiB0aGUgbm90aWZpY2F0aW9uIHN0YXRlIGZvciBhIHJvb20uIFRoZSBjb25zdW1lciBzaG91bGQgbm90XG4gICAgICogYXR0ZW1wdCB0byBkZXN0cm95IHRoZSByZXR1cm5lZCBzdGF0ZSBhcyBpdCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXJcbiAgICAgKiBjb25zdW1lcnMuXG4gICAgICogQHBhcmFtIHJvb20gVGhlIHJvb20gdG8gZ2V0IHRoZSBub3RpZmljYXRpb24gc3RhdGUgZm9yLlxuICAgICAqIEByZXR1cm5zIFRoZSByb29tJ3Mgbm90aWZpY2F0aW9uIHN0YXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb29tU3RhdGUocm9vbTogUm9vbSk6IFJvb21Ob3RpZmljYXRpb25TdGF0ZSB7XG4gICAgICAgIGlmICghdGhpcy5yb29tTWFwLmhhcyhyb29tKSkge1xuICAgICAgICAgICAgdGhpcy5yb29tTWFwLnNldChyb29tLCBuZXcgUm9vbU5vdGlmaWNhdGlvblN0YXRlKHJvb20pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yb29tTWFwLmdldChyb29tKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpOiBSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSB7XG4gICAgICAgIHJldHVybiBSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZS5pbnRlcm5hbEluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBvbk5vdFJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGZvciAoY29uc3Qgcm9vbVN0YXRlIG9mIHRoaXMucm9vbU1hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgcm9vbVN0YXRlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGRvbid0IG5lZWQgdGhpcywgYnV0IG91ciBjb250cmFjdCBzYXlzIHdlIGRvLlxuICAgIHByb3RlY3RlZCBhc3luYyBvbkFjdGlvbihwYXlsb2FkOiBBY3Rpb25QYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59XG4iXX0=