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) {
|
if (groupCall) {
|
||||||
powerLevelContentOverride ??= {};
|
powerLevelContentOverride ??= {};
|
||||||
powerLevelContentOverride['events'] = <String, dynamic>{
|
powerLevelContentOverride['events'] = <String, dynamic>{
|
||||||
'org.matrix.msc3401.call.member': 0,
|
EventTypes.GroupCallMemberPrefix: 0,
|
||||||
'org.matrix.msc3401.call': 0,
|
EventTypes.GroupCallPrefix: 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
final roomId = await createRoom(
|
final roomId = await createRoom(
|
||||||
|
|
|
||||||
|
|
@ -1740,10 +1740,10 @@ class Room {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get canCreateGroupCall =>
|
bool get canCreateGroupCall =>
|
||||||
canChangeStateEvent('org.matrix.msc3401.call') && groupCallsEnabled;
|
canChangeStateEvent(EventTypes.GroupCallPrefix) && groupCallsEnabled;
|
||||||
|
|
||||||
bool get canJoinGroupCall =>
|
bool get canJoinGroupCall =>
|
||||||
canChangeStateEvent('org.matrix.msc3401.call.member') &&
|
canChangeStateEvent(EventTypes.GroupCallMemberPrefix) &&
|
||||||
groupCallsEnabled;
|
groupCallsEnabled;
|
||||||
|
|
||||||
/// if returned value is not null `org.matrix.msc3401.call.member` is present
|
/// if returned value is not null `org.matrix.msc3401.call.member` is present
|
||||||
|
|
@ -1751,9 +1751,9 @@ class Room {
|
||||||
bool get groupCallsEnabled {
|
bool get groupCallsEnabled {
|
||||||
final powerLevelMap = getState(EventTypes.RoomPowerLevels)?.content;
|
final powerLevelMap = getState(EventTypes.RoomPowerLevels)?.content;
|
||||||
if (powerLevelMap == null) return false;
|
if (powerLevelMap == null) return false;
|
||||||
return powerForChangingStateEvent('org.matrix.msc3401.call.member') <=
|
return powerForChangingStateEvent(EventTypes.GroupCallMemberPrefix) <=
|
||||||
getDefaultPowerLevel(powerLevelMap) &&
|
getDefaultPowerLevel(powerLevelMap) &&
|
||||||
powerForChangingStateEvent('org.matrix.msc3401.call') <=
|
powerForChangingStateEvent(EventTypes.GroupCallPrefix) <=
|
||||||
getDefaultPowerLevel(powerLevelMap);
|
getDefaultPowerLevel(powerLevelMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1766,8 +1766,8 @@ class Room {
|
||||||
final newPowerLevelMap = currentPowerLevelsMap;
|
final newPowerLevelMap = currentPowerLevelsMap;
|
||||||
final eventsMap = newPowerLevelMap['events'] ?? {};
|
final eventsMap = newPowerLevelMap['events'] ?? {};
|
||||||
eventsMap.addAll({
|
eventsMap.addAll({
|
||||||
'org.matrix.msc3401.call': getDefaultPowerLevel(currentPowerLevelsMap),
|
EventTypes.GroupCallPrefix: getDefaultPowerLevel(currentPowerLevelsMap),
|
||||||
'org.matrix.msc3401.call.member':
|
EventTypes.GroupCallMemberPrefix:
|
||||||
getDefaultPowerLevel(currentPowerLevelsMap)
|
getDefaultPowerLevel(currentPowerLevelsMap)
|
||||||
});
|
});
|
||||||
newPowerLevelMap.addAll({'events': eventsMap});
|
newPowerLevelMap.addAll({'events': eventsMap});
|
||||||
|
|
|
||||||
|
|
@ -733,7 +733,31 @@ class GroupCall {
|
||||||
if (currentStateEvent != null) {
|
if (currentStateEvent != null) {
|
||||||
final memberStateEvent =
|
final memberStateEvent =
|
||||||
IGroupCallRoomMemberState.fromJson(currentStateEvent);
|
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 =
|
final existingCallIndex =
|
||||||
calls.indexWhere((element) => groupCallId == element.call_id);
|
calls.indexWhere((element) => groupCallId == element.call_id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -494,7 +494,7 @@ void main() {
|
||||||
room: room,
|
room: room,
|
||||||
eventId: '123a',
|
eventId: '123a',
|
||||||
content: {
|
content: {
|
||||||
'events': {'org.matrix.msc3401.call.member': 100},
|
'events': {EventTypes.GroupCallMemberPrefix: 100},
|
||||||
'state_default': 50,
|
'state_default': 50,
|
||||||
'users_default': 0
|
'users_default': 0
|
||||||
},
|
},
|
||||||
|
|
@ -512,7 +512,7 @@ void main() {
|
||||||
room: room,
|
room: room,
|
||||||
eventId: '123a',
|
eventId: '123a',
|
||||||
content: {
|
content: {
|
||||||
'events': {'org.matrix.msc3401.call.member': 27},
|
'events': {EventTypes.GroupCallMemberPrefix: 27},
|
||||||
'state_default': 50,
|
'state_default': 50,
|
||||||
'users_default': 49
|
'users_default': 49
|
||||||
},
|
},
|
||||||
|
|
@ -532,8 +532,8 @@ void main() {
|
||||||
eventId: '123a',
|
eventId: '123a',
|
||||||
content: {
|
content: {
|
||||||
'events': {
|
'events': {
|
||||||
'org.matrix.msc3401.call.member': 27,
|
EventTypes.GroupCallMemberPrefix: 27,
|
||||||
'org.matrix.msc3401.call': 0
|
EventTypes.GroupCallPrefix: 0
|
||||||
},
|
},
|
||||||
'state_default': 50,
|
'state_default': 50,
|
||||||
'users_default': 2
|
'users_default': 2
|
||||||
|
|
@ -555,8 +555,8 @@ void main() {
|
||||||
eventId: '123a',
|
eventId: '123a',
|
||||||
content: {
|
content: {
|
||||||
'events': {
|
'events': {
|
||||||
'org.matrix.msc3401.call.member': 25,
|
EventTypes.GroupCallMemberPrefix: 25,
|
||||||
'org.matrix.msc3401.call': 25
|
EventTypes.GroupCallPrefix: 25
|
||||||
},
|
},
|
||||||
'state_default': 50,
|
'state_default': 50,
|
||||||
'users_default': 26
|
'users_default': 26
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue