@@ -36,6 +36,7 @@ import 'package:matrix/src/models/timeline_chunk.dart';
3636import 'package:matrix/src/utils/cached_stream_controller.dart' ;
3737import 'package:matrix/src/utils/client_init_exception.dart' ;
3838import 'package:matrix/src/utils/multilock.dart' ;
39+ import 'package:matrix/src/utils/on_tofu_event.dart' ;
3940import 'package:matrix/src/utils/request_and_cache.dart' ;
4041import 'package:matrix/src/utils/run_benchmarked.dart' ;
4142import 'package:matrix/src/utils/run_in_root.dart' ;
@@ -199,6 +200,7 @@ class Client extends MatrixApi {
199200 this .customImageResizer,
200201 this .shareKeysWith = ShareKeysWith .crossVerifiedIfEnabled,
201202 this .enableDehydratedDevices = false ,
203+ this .onTofuEvent = sendTofuEvent,
202204 this .receiptsPublicByDefault = true ,
203205
204206 /// Implement your https://spec.matrix.org/v1.9/client-server-api/#soft-logout
@@ -382,6 +384,8 @@ class Client extends MatrixApi {
382384
383385 bool enableDehydratedDevices = false ;
384386
387+ void Function (Room room, Set <String > userIds)? onTofuEvent;
388+
385389 final String dehydratedDeviceDisplayName;
386390
387391 /// Whether read receipts are sent as public receipts by default or just as private receipts.
@@ -3536,11 +3540,18 @@ class Client extends MatrixApi {
35363540 final oldKeys =
35373541 Map <String , CrossSigningKey >.from (userKeys.crossSigningKeys);
35383542 userKeys.crossSigningKeys = {};
3543+
3544+ final entry = CrossSigningKey .fromMatrixCrossSigningKey (
3545+ crossSigningKeyListEntry.value,
3546+ this ,
3547+ );
3548+
35393549 // add the types we aren't handling atm back
35403550 for (final oldEntry in oldKeys.entries) {
35413551 if (! oldEntry.value.usage.contains (keyType)) {
35423552 userKeys.crossSigningKeys[oldEntry.key] = oldEntry.value;
35433553 } else {
3554+ entry.lastSeenPublicKey = oldEntry.value.lastSeenPublicKey;
35443555 // There is a previous cross-signing key with this usage, that we no
35453556 // longer need/use. Clear it from the database.
35463557 dbActions.add (
@@ -3549,10 +3560,6 @@ class Client extends MatrixApi {
35493560 );
35503561 }
35513562 }
3552- final entry = CrossSigningKey .fromMatrixCrossSigningKey (
3553- crossSigningKeyListEntry.value,
3554- this ,
3555- );
35563563 final publicKey = entry.publicKey;
35573564 if (entry.isValid && publicKey != null ) {
35583565 final oldKey = oldKeys[publicKey];
@@ -3577,6 +3584,7 @@ class Client extends MatrixApi {
35773584 json.encode (entry.toJson ()),
35783585 entry.directVerified,
35793586 entry.blocked,
3587+ entry.lastSeenPublicKey,
35803588 ),
35813589 );
35823590 }
@@ -4135,6 +4143,7 @@ class Client extends MatrixApi {
41354143 jsonEncode (crossSigningKey.toJson ()),
41364144 crossSigningKey.directVerified,
41374145 crossSigningKey.blocked,
4146+ crossSigningKey.lastSeenPublicKey,
41384147 );
41394148 }
41404149 }
0 commit comments