Merge branch 'master' into soru/fix-members-requests
This commit is contained in:
		
						commit
						0ece2717e0
					
				|  | @ -0,0 +1,6 @@ | ||||||
|  | targets: | ||||||
|  |   $default: | ||||||
|  |     builders: | ||||||
|  |       moor_generator: | ||||||
|  |         options: | ||||||
|  |           generate_connect_constructor: true | ||||||
|  | @ -194,8 +194,14 @@ class KeyVerification { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   bool _handlePayloadLock = false; | ||||||
|  | 
 | ||||||
|   Future<void> handlePayload(String type, Map<String, dynamic> payload, |   Future<void> handlePayload(String type, Map<String, dynamic> payload, | ||||||
|       [String eventId]) async { |       [String eventId]) async { | ||||||
|  |     while (_handlePayloadLock) { | ||||||
|  |       await Future.delayed(Duration(milliseconds: 50)); | ||||||
|  |     } | ||||||
|  |     _handlePayloadLock = true; | ||||||
|     print('[Key Verification] Received type ${type}: ' + payload.toString()); |     print('[Key Verification] Received type ${type}: ' + payload.toString()); | ||||||
|     try { |     try { | ||||||
|       var thisLastStep = lastStep; |       var thisLastStep = lastStep; | ||||||
|  | @ -307,6 +313,8 @@ class KeyVerification { | ||||||
|       if (deviceId != null) { |       if (deviceId != null) { | ||||||
|         await cancel('m.invalid_message'); |         await cancel('m.invalid_message'); | ||||||
|       } |       } | ||||||
|  |     } finally { | ||||||
|  |       _handlePayloadLock = false; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -529,8 +537,8 @@ class KeyVerification { | ||||||
|   Future<void> send(String type, Map<String, dynamic> payload) async { |   Future<void> send(String type, Map<String, dynamic> payload) async { | ||||||
|     makePayload(payload); |     makePayload(payload); | ||||||
|     print('[Key Verification] Sending type ${type}: ' + payload.toString()); |     print('[Key Verification] Sending type ${type}: ' + payload.toString()); | ||||||
|     print('[Key Verification] Sending to ${userId} device ${deviceId}'); |  | ||||||
|     if (room != null) { |     if (room != null) { | ||||||
|  |       print('[Key Verification] Sending to ${userId} in room ${room.id}'); | ||||||
|       if (['m.key.verification.request'].contains(type)) { |       if (['m.key.verification.request'].contains(type)) { | ||||||
|         payload['msgtype'] = type; |         payload['msgtype'] = type; | ||||||
|         payload['to'] = userId; |         payload['to'] = userId; | ||||||
|  | @ -544,6 +552,7 @@ class KeyVerification { | ||||||
|         encryption.keyVerificationManager.addRequest(this); |         encryption.keyVerificationManager.addRequest(this); | ||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
|  |       print('[Key Verification] Sending to ${userId} device ${deviceId}'); | ||||||
|       await client.sendToDevice( |       await client.sendToDevice( | ||||||
|           [client.userDeviceKeys[userId].deviceKeys[deviceId]], type, payload); |           [client.userDeviceKeys[userId].deviceKeys[deviceId]], type, payload); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -74,7 +74,9 @@ class PusherData { | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   PusherData.fromJson(Map<String, dynamic> json) { |   PusherData.fromJson(Map<String, dynamic> json) { | ||||||
|  |     if (json.containsKey('url')) { | ||||||
|       url = Uri.parse(json['url']); |       url = Uri.parse(json['url']); | ||||||
|  |     } | ||||||
|     format = json['format']; |     format = json['format']; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -87,7 +87,8 @@ class Client { | ||||||
|       this.enableE2eeRecovery = false, |       this.enableE2eeRecovery = false, | ||||||
|       this.verificationMethods, |       this.verificationMethods, | ||||||
|       http.Client httpClient, |       http.Client httpClient, | ||||||
|       this.importantStateEvents}) { |       this.importantStateEvents, | ||||||
|  |       this.pinUnreadRooms = false}) { | ||||||
|     verificationMethods ??= <KeyVerificationMethod>{}; |     verificationMethods ??= <KeyVerificationMethod>{}; | ||||||
|     importantStateEvents ??= <String>{}; |     importantStateEvents ??= <String>{}; | ||||||
|     importantStateEvents.addAll([ |     importantStateEvents.addAll([ | ||||||
|  | @ -1101,13 +1102,16 @@ class Client { | ||||||
| 
 | 
 | ||||||
|   bool _sortLock = false; |   bool _sortLock = false; | ||||||
| 
 | 
 | ||||||
|  |   /// If [true] then unread rooms are pinned at the top of the room list. | ||||||
|  |   bool pinUnreadRooms; | ||||||
|  | 
 | ||||||
|   /// The compare function how the rooms should be sorted internally. By default |   /// The compare function how the rooms should be sorted internally. By default | ||||||
|   /// rooms are sorted by timestamp of the last m.room.message event or the last |   /// rooms are sorted by timestamp of the last m.room.message event or the last | ||||||
|   /// event if there is no known message. |   /// event if there is no known message. | ||||||
|   RoomSorter sortRoomsBy = (a, b) => (a.membership != b.membership) |   RoomSorter get sortRoomsBy => (a, b) => (a.isFavourite != b.isFavourite) | ||||||
|       ? (a.membership == Membership.invite ? -1 : 1) |  | ||||||
|       : (a.isFavourite != b.isFavourite) |  | ||||||
|       ? (a.isFavourite ? -1 : 1) |       ? (a.isFavourite ? -1 : 1) | ||||||
|  |       : (pinUnreadRooms && a.notificationCount != b.notificationCount) | ||||||
|  |           ? b.notificationCount.compareTo(a.notificationCount) | ||||||
|           : b.timeCreated.millisecondsSinceEpoch |           : b.timeCreated.millisecondsSinceEpoch | ||||||
|               .compareTo(a.timeCreated.millisecondsSinceEpoch); |               .compareTo(a.timeCreated.millisecondsSinceEpoch); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,6 +15,8 @@ part 'database.g.dart'; | ||||||
| class Database extends _$Database { | class Database extends _$Database { | ||||||
|   Database(QueryExecutor e) : super(e); |   Database(QueryExecutor e) : super(e); | ||||||
| 
 | 
 | ||||||
|  |   Database.connect(DatabaseConnection connection) : super.connect(connection); | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   int get schemaVersion => 5; |   int get schemaVersion => 5; | ||||||
| 
 | 
 | ||||||
|  | @ -48,7 +50,6 @@ class Database extends _$Database { | ||||||
|           } |           } | ||||||
|           if (from == 3) { |           if (from == 3) { | ||||||
|             await m.createTable(userCrossSigningKeys); |             await m.createTable(userCrossSigningKeys); | ||||||
|             await m.createIndex(userCrossSigningKeysIndex); |  | ||||||
|             await m.createTable(ssssCache); |             await m.createTable(ssssCache); | ||||||
|             // mark all keys as outdated so that the cross signing keys will be fetched |             // mark all keys as outdated so that the cross signing keys will be fetched | ||||||
|             await m.issueCustomQuery( |             await m.issueCustomQuery( | ||||||
|  |  | ||||||
|  | @ -5361,6 +5361,7 @@ class Files extends Table with TableInfo<Files, DbFile> { | ||||||
| 
 | 
 | ||||||
| abstract class _$Database extends GeneratedDatabase { | abstract class _$Database extends GeneratedDatabase { | ||||||
|   _$Database(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); |   _$Database(QueryExecutor e) : super(SqlTypeSystem.defaultInstance, e); | ||||||
|  |   _$Database.connect(DatabaseConnection c) : super.connect(c); | ||||||
|   Clients _clients; |   Clients _clients; | ||||||
|   Clients get clients => _clients ??= Clients(this); |   Clients get clients => _clients ??= Clients(this); | ||||||
|   UserDeviceKeys _userDeviceKeys; |   UserDeviceKeys _userDeviceKeys; | ||||||
|  |  | ||||||
|  | @ -89,7 +89,13 @@ class Event extends MatrixEvent { | ||||||
|     this.roomId = roomId ?? room?.id; |     this.roomId = roomId ?? room?.id; | ||||||
|     this.senderId = senderId; |     this.senderId = senderId; | ||||||
|     this.unsigned = unsigned; |     this.unsigned = unsigned; | ||||||
|     this.prevContent = prevContent; |     // synapse unfortunatley isn't following the spec and tosses the prev_content | ||||||
|  |     // into the unsigned block | ||||||
|  |     this.prevContent = prevContent != null && prevContent.isNotEmpty | ||||||
|  |         ? prevContent | ||||||
|  |         : (unsigned != null && unsigned['prev_content'] is Map | ||||||
|  |             ? unsigned['prev_content'] | ||||||
|  |             : null); | ||||||
|     this.stateKey = stateKey; |     this.stateKey = stateKey; | ||||||
|     this.originServerTs = originServerTs; |     this.originServerTs = originServerTs; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -71,7 +71,10 @@ class User extends Event { | ||||||
|   String get id => stateKey; |   String get id => stateKey; | ||||||
| 
 | 
 | ||||||
|   /// The displayname of the user if the user has set one. |   /// The displayname of the user if the user has set one. | ||||||
|   String get displayName => content != null ? content['displayname'] : null; |   String get displayName => | ||||||
|  |       content != null && content.containsKey('displayname') | ||||||
|  |           ? content['displayname'] | ||||||
|  |           : (prevContent != null ? prevContent['displayname'] : null); | ||||||
| 
 | 
 | ||||||
|   /// Returns the power level of this user. |   /// Returns the power level of this user. | ||||||
|   int get powerLevel => room?.getPowerLevelByUserId(id); |   int get powerLevel => room?.getPowerLevelByUserId(id); | ||||||
|  | @ -89,9 +92,13 @@ class User extends Event { | ||||||
|       }, orElse: () => Membership.join); |       }, orElse: () => Membership.join); | ||||||
| 
 | 
 | ||||||
|   /// The avatar if the user has one. |   /// The avatar if the user has one. | ||||||
|   Uri get avatarUrl => content != null && content['avatar_url'] is String |   Uri get avatarUrl => content != null && content.containsKey('avatar_url') | ||||||
|  |       ? (content['avatar_url'] is String | ||||||
|           ? Uri.parse(content['avatar_url']) |           ? Uri.parse(content['avatar_url']) | ||||||
|       : null; |           : null) | ||||||
|  |       : (prevContent != null && prevContent['avatar_url'] is String | ||||||
|  |           ? Uri.parse(prevContent['avatar_url']) | ||||||
|  |           : null); | ||||||
| 
 | 
 | ||||||
|   /// Returns the displayname or the local part of the Matrix ID if the user |   /// Returns the displayname or the local part of the Matrix ID if the user | ||||||
|   /// has no displayname. If [formatLocalpart] is true, then the localpart will |   /// has no displayname. If [formatLocalpart] is true, then the localpart will | ||||||
|  |  | ||||||
							
								
								
									
										43
									
								
								pubspec.lock
								
								
								
								
							
							
						
						
									
										43
									
								
								pubspec.lock
								
								
								
								
							|  | @ -22,13 +22,6 @@ packages: | ||||||
|       url: "https://pub.dartlang.org" |       url: "https://pub.dartlang.org" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.2.2" |     version: "0.2.2" | ||||||
|   archive: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: archive |  | ||||||
|       url: "https://pub.dartlang.org" |  | ||||||
|     source: hosted |  | ||||||
|     version: "2.0.13" |  | ||||||
|   args: |   args: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  | @ -326,12 +319,10 @@ packages: | ||||||
|   matrix_file_e2ee: |   matrix_file_e2ee: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       path: "." |       name: matrix_file_e2ee | ||||||
|       ref: "1.x.y" |       url: "https://pub.dartlang.org" | ||||||
|       resolved-ref: "32edeff765369a7a77a0822f4b19302ca24a017b" |     source: hosted | ||||||
|       url: "https://gitlab.com/famedly/libraries/matrix_file_e2ee.git" |     version: "1.0.4" | ||||||
|     source: git |  | ||||||
|     version: "1.0.3" |  | ||||||
|   meta: |   meta: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  | @ -340,7 +331,7 @@ packages: | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.1.8" |     version: "1.1.8" | ||||||
|   mime: |   mime: | ||||||
|     dependency: transitive |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: mime |       name: mime | ||||||
|       url: "https://pub.dartlang.org" |       url: "https://pub.dartlang.org" | ||||||
|  | @ -398,12 +389,10 @@ packages: | ||||||
|   olm: |   olm: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       path: "." |       name: olm | ||||||
|       ref: "1.x.y" |       url: "https://pub.dartlang.org" | ||||||
|       resolved-ref: "8e4fcccff7a2d4d0bd5142964db092bf45061905" |     source: hosted | ||||||
|       url: "https://gitlab.com/famedly/libraries/dart-olm.git" |     version: "1.2.1" | ||||||
|     source: git |  | ||||||
|     version: "1.2.0" |  | ||||||
|   package_config: |   package_config: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  | @ -432,13 +421,6 @@ packages: | ||||||
|       url: "https://pub.dartlang.org" |       url: "https://pub.dartlang.org" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.9.0" |     version: "1.9.0" | ||||||
|   petitparser: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: petitparser |  | ||||||
|       url: "https://pub.dartlang.org" |  | ||||||
|     source: hosted |  | ||||||
|     version: "3.0.2" |  | ||||||
|   pointycastle: |   pointycastle: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  | @ -670,13 +652,6 @@ packages: | ||||||
|       url: "https://pub.dartlang.org" |       url: "https://pub.dartlang.org" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.5.4" |     version: "0.5.4" | ||||||
|   xml: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: xml |  | ||||||
|       url: "https://pub.dartlang.org" |  | ||||||
|     source: hosted |  | ||||||
|     version: "3.7.0" |  | ||||||
|   yaml: |   yaml: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								pubspec.yaml
								
								
								
								
							
							
						
						
									
										12
									
								
								pubspec.yaml
								
								
								
								
							|  | @ -19,16 +19,8 @@ dependencies: | ||||||
|   crypto: ^2.1.4 |   crypto: ^2.1.4 | ||||||
|   base58check: ^1.0.1 |   base58check: ^1.0.1 | ||||||
|   password_hash: ^2.0.0 |   password_hash: ^2.0.0 | ||||||
| 
 |   olm: ^1.2.1 | ||||||
|   olm: |   matrix_file_e2ee: ^1.0.4 | ||||||
|     git: |  | ||||||
|       url: https://gitlab.com/famedly/libraries/dart-olm.git |  | ||||||
|       ref: 1.x.y |  | ||||||
| 
 |  | ||||||
|   matrix_file_e2ee: |  | ||||||
|     git: |  | ||||||
|       url: https://gitlab.com/famedly/libraries/matrix_file_e2ee.git |  | ||||||
|       ref: 1.x.y |  | ||||||
| 
 | 
 | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   test: ^1.0.0 |   test: ^1.0.0 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue