fix: clean expired member state events in group calls
This commit is contained in:
parent
0e26e44d8c
commit
0c9e129347
|
|
@ -667,8 +667,8 @@ class Client extends MatrixApi {
|
|||
if (groupCall) {
|
||||
powerLevelContentOverride ??= {};
|
||||
powerLevelContentOverride['events'] = <String, dynamic>{
|
||||
'org.matrix.msc3401.call.member': 0,
|
||||
'org.matrix.msc3401.call': 0,
|
||||
EventTypes.GroupCallMemberPrefix: 0,
|
||||
EventTypes.GroupCallPrefix: 0,
|
||||
};
|
||||
}
|
||||
final roomId = await createRoom(
|
||||
|
|
|
|||
|
|
@ -1740,10 +1740,10 @@ class Room {
|
|||
}
|
||||
|
||||
bool get canCreateGroupCall =>
|
||||
canChangeStateEvent('org.matrix.msc3401.call') && groupCallsEnabled;
|
||||
canChangeStateEvent(EventTypes.GroupCallPrefix) && groupCallsEnabled;
|
||||
|
||||
bool get canJoinGroupCall =>
|
||||
canChangeStateEvent('org.matrix.msc3401.call.member') &&
|
||||
canChangeStateEvent(EventTypes.GroupCallMemberPrefix) &&
|
||||
groupCallsEnabled;
|
||||
|
||||
/// if returned value is not null `org.matrix.msc3401.call.member` is present
|
||||
|
|
@ -1751,9 +1751,9 @@ class Room {
|
|||
bool get groupCallsEnabled {
|
||||
final powerLevelMap = getState(EventTypes.RoomPowerLevels)?.content;
|
||||
if (powerLevelMap == null) return false;
|
||||
return powerForChangingStateEvent('org.matrix.msc3401.call.member') <=
|
||||
return powerForChangingStateEvent(EventTypes.GroupCallMemberPrefix) <=
|
||||
getDefaultPowerLevel(powerLevelMap) &&
|
||||
powerForChangingStateEvent('org.matrix.msc3401.call') <=
|
||||
powerForChangingStateEvent(EventTypes.GroupCallPrefix) <=
|
||||
getDefaultPowerLevel(powerLevelMap);
|
||||
}
|
||||
|
||||
|
|
@ -1766,8 +1766,8 @@ class Room {
|
|||
final newPowerLevelMap = currentPowerLevelsMap;
|
||||
final eventsMap = newPowerLevelMap['events'] ?? {};
|
||||
eventsMap.addAll({
|
||||
'org.matrix.msc3401.call': getDefaultPowerLevel(currentPowerLevelsMap),
|
||||
'org.matrix.msc3401.call.member':
|
||||
EventTypes.GroupCallPrefix: getDefaultPowerLevel(currentPowerLevelsMap),
|
||||
EventTypes.GroupCallMemberPrefix:
|
||||
getDefaultPowerLevel(currentPowerLevelsMap)
|
||||
});
|
||||
newPowerLevelMap.addAll({'events': eventsMap});
|
||||
|
|
|
|||
|
|
@ -733,7 +733,31 @@ class GroupCall {
|
|||
if (currentStateEvent != null) {
|
||||
final memberStateEvent =
|
||||
IGroupCallRoomMemberState.fromJson(currentStateEvent);
|
||||
calls = memberStateEvent.calls;
|
||||
final unCheckedCalls = memberStateEvent.calls;
|
||||
|
||||
// don't keep pushing stale devices every update
|
||||
final validCalls = <IGroupCallRoomMemberCallState>[];
|
||||
for (final call in unCheckedCalls) {
|
||||
final validDevices = [];
|
||||
for (final device in call.devices) {
|
||||
if (device.expires_ts != null &&
|
||||
device.expires_ts! >
|
||||
DateTime.now()
|
||||
// safety buffer just incase we were slow to process a
|
||||
// call event, if the device is actually dead it should
|
||||
// get removed pretty soon
|
||||
.add(Duration(seconds: 10))
|
||||
.millisecondsSinceEpoch) {
|
||||
validDevices.add(device);
|
||||
}
|
||||
}
|
||||
if (validDevices.isNotEmpty) {
|
||||
validCalls.add(call);
|
||||
}
|
||||
}
|
||||
|
||||
calls = validCalls;
|
||||
|
||||
final existingCallIndex =
|
||||
calls.indexWhere((element) => groupCallId == element.call_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -494,7 +494,7 @@ void main() {
|
|||
room: room,
|
||||
eventId: '123a',
|
||||
content: {
|
||||
'events': {'org.matrix.msc3401.call.member': 100},
|
||||
'events': {EventTypes.GroupCallMemberPrefix: 100},
|
||||
'state_default': 50,
|
||||
'users_default': 0
|
||||
},
|
||||
|
|
@ -512,7 +512,7 @@ void main() {
|
|||
room: room,
|
||||
eventId: '123a',
|
||||
content: {
|
||||
'events': {'org.matrix.msc3401.call.member': 27},
|
||||
'events': {EventTypes.GroupCallMemberPrefix: 27},
|
||||
'state_default': 50,
|
||||
'users_default': 49
|
||||
},
|
||||
|
|
@ -532,8 +532,8 @@ void main() {
|
|||
eventId: '123a',
|
||||
content: {
|
||||
'events': {
|
||||
'org.matrix.msc3401.call.member': 27,
|
||||
'org.matrix.msc3401.call': 0
|
||||
EventTypes.GroupCallMemberPrefix: 27,
|
||||
EventTypes.GroupCallPrefix: 0
|
||||
},
|
||||
'state_default': 50,
|
||||
'users_default': 2
|
||||
|
|
@ -555,8 +555,8 @@ void main() {
|
|||
eventId: '123a',
|
||||
content: {
|
||||
'events': {
|
||||
'org.matrix.msc3401.call.member': 25,
|
||||
'org.matrix.msc3401.call': 25
|
||||
EventTypes.GroupCallMemberPrefix: 25,
|
||||
EventTypes.GroupCallPrefix: 25
|
||||
},
|
||||
'state_default': 50,
|
||||
'users_default': 26
|
||||
|
|
|
|||
Loading…
Reference in New Issue