diff --git a/src/matrix/room/members/MemberList.js b/src/matrix/room/members/MemberList.js index 734887fd..05e6ea9a 100644 --- a/src/matrix/room/members/MemberList.js +++ b/src/matrix/room/members/MemberList.js @@ -15,15 +15,15 @@ limitations under the License. */ import {ObservableMap} from "../../../observable/map/ObservableMap.js"; +import {RetainedValue} from "../../../utils/RetainedValue.js"; -export class MemberList { +export class MemberList extends RetainedValue { constructor({members, closeCallback}) { + super(closeCallback); this._members = new ObservableMap(); for (const member of members) { this._members.add(member.userId, member); } - this._closeCallback = closeCallback; - this._retentionCount = 1; } afterSync(memberChanges) { @@ -35,15 +35,4 @@ export class MemberList { get members() { return this._members; } - - retain() { - this._retentionCount += 1; - } - - release() { - this._retentionCount -= 1; - if (this._retentionCount === 0) { - this._closeCallback(); - } - } } diff --git a/src/utils/RetainedValue.js b/src/utils/RetainedValue.js new file mode 100644 index 00000000..b3ed7a91 --- /dev/null +++ b/src/utils/RetainedValue.js @@ -0,0 +1,33 @@ +/* +Copyright 2021 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. +*/ + +export class RetainedValue { + constructor(freeCallback) { + this._freeCallback = freeCallback; + this._retentionCount = 1; + } + + retain() { + this._retentionCount += 1; + } + + release() { + this._retentionCount -= 1; + if (this._retentionCount === 0) { + this._freeCallback(); + } + } +}