From 57286d4c289b39c5f6a1924e6adaa9e32370df69 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Sat, 19 Dec 2020 12:04:25 +0000 Subject: [PATCH] feat: Use logger package --- lib/encryption/encryption.dart | 9 +-- lib/encryption/key_manager.dart | 60 ++++++++----------- lib/encryption/olm_manager.dart | 11 ++-- lib/encryption/ssss.dart | 32 +++++----- lib/encryption/utils/bootstrap.dart | 15 ++--- .../utils/json_signature_check_extension.dart | 2 +- lib/encryption/utils/key_verification.dart | 23 +++---- lib/encryption/utils/olm_session.dart | 2 +- .../utils/outbound_group_session.dart | 6 +- lib/encryption/utils/session_key.dart | 4 +- lib/matrix_api.dart | 1 + lib/matrix_api/utils/logs.dart | 37 +++--------- .../utils/try_get_map_extension.dart | 4 +- lib/src/client.dart | 33 +++++----- lib/src/database/database.dart | 11 ++-- lib/src/room.dart | 7 +-- lib/src/timeline.dart | 2 +- lib/src/utils/event_update.dart | 2 +- lib/src/utils/run_in_root.dart | 2 +- pubspec.yaml | 2 +- test/client_test.dart | 7 ++- test/device_keys_list_test.dart | 6 +- test/encryption/bootstrap_test.dart | 6 +- test/encryption/cross_signing_test.dart | 6 +- .../encrypt_decrypt_room_message_test.dart | 6 +- .../encrypt_decrypt_to_device_test.dart | 6 +- test/encryption/key_manager_test.dart | 6 +- test/encryption/key_request_test.dart | 8 +-- test/encryption/key_verification_test.dart | 6 +- test/encryption/olm_manager_test.dart | 6 +- test/encryption/online_key_backup_test.dart | 6 +- test/encryption/ssss_test.dart | 6 +- test/event_test.dart | 6 +- test/matrix_api_test.dart | 15 +++++ test_driver/famedlysdk_test.dart | 54 ++++++++--------- 35 files changed, 189 insertions(+), 226 deletions(-) diff --git a/lib/encryption/encryption.dart b/lib/encryption/encryption.dart index d6fd371a..f23b74b0 100644 --- a/lib/encryption/encryption.dart +++ b/lib/encryption/encryption.dart @@ -135,8 +135,9 @@ class Encryption { try { return await olmManager.decryptToDeviceEvent(event); } catch (e, s) { - Logs.error( - '[LibOlm] Could not decrypt to device event from ${event.sender} with content: ${event.content}\n${e.toString()}', + Logs().e( + '[LibOlm] Could not decrypt to device event from ${event.sender} with content: ${event.content}', + e, s); client.onEncryptionError.add( SdkError( @@ -178,7 +179,7 @@ class Encryption { var haveIndex = inboundGroupSession.indexes.containsKey(messageIndexKey); if (haveIndex && inboundGroupSession.indexes[messageIndexKey] != messageIndexValue) { - Logs.error('[Decrypt] Could not decrypt due to a corrupted session.'); + Logs().e('[Decrypt] Could not decrypt due to a corrupted session.'); throw (DecryptError.CHANNEL_CORRUPTED); } inboundGroupSession.indexes[messageIndexKey] = messageIndexValue; @@ -282,7 +283,7 @@ class Encryption { } return event; } catch (e, s) { - Logs.error('[Decrypt] Could not decrpyt event: ' + e.toString(), s); + Logs().e('[Decrypt] Could not decrpyt event', e, s); return event; } } diff --git a/lib/encryption/key_manager.dart b/lib/encryption/key_manager.dart index 7e51cf57..e507a387 100644 --- a/lib/encryption/key_manager.dart +++ b/lib/encryption/key_manager.dart @@ -111,9 +111,7 @@ class KeyManager { } } catch (e, s) { inboundGroupSession.free(); - Logs.error( - '[LibOlm] Could not create new InboundGroupSession: ' + e.toString(), - s); + Logs().e('[LibOlm] Could not create new InboundGroupSession', e, s); return; } final newSession = SessionKey( @@ -356,9 +354,9 @@ class KeyManager { devicesToReceive, 'm.room_key', rawSession); } } catch (e, s) { - Logs.error( - '[LibOlm] Unable to re-send the session key at later index to new devices: ' + - e.toString(), + Logs().e( + '[LibOlm] Unable to re-send the session key at later index to new devices', + e, s); } return false; @@ -411,9 +409,7 @@ class KeyManager { outboundGroupSession.create(); } catch (e, s) { outboundGroupSession.free(); - Logs.error( - '[LibOlm] Unable to create new outboundGroupSession: ' + e.toString(), - s); + Logs().e('[LibOlm] Unable to create new outboundGroupSession', e, s); return null; } final rawSession = { @@ -437,9 +433,9 @@ class KeyManager { await storeOutboundGroupSession(roomId, sess); _outboundGroupSessions[roomId] = sess; } catch (e, s) { - Logs.error( - '[LibOlm] Unable to send the session key to the participating devices: ' + - e.toString(), + Logs().e( + '[LibOlm] Unable to send the session key to the participating devices', + e, s); sess.dispose(); return null; @@ -531,8 +527,7 @@ class KeyManager { decrypted = json.decode(decryption.decrypt(sessionData['ephemeral'], sessionData['mac'], sessionData['ciphertext'])); } catch (e, s) { - Logs.error( - '[LibOlm] Error decrypting room key: ' + e.toString(), s); + Logs().e('[LibOlm] Error decrypting room key', e, s); } if (decrypted != null) { decrypted['session_id'] = sessionId; @@ -584,12 +579,10 @@ class KeyManager { await loadSingleKey(room.id, sessionId); } catch (err, stacktrace) { if (err is MatrixException && err.errcode == 'M_NOT_FOUND') { - Logs.info( + Logs().i( '[KeyManager] Key not in online key backup, requesting it from other devices...'); } else { - Logs.error( - '[KeyManager] Failed to access online key backup: ' + - err.toString(), + Logs().e('[KeyManager] Failed to access online key backup', err, stacktrace); } } @@ -632,10 +625,7 @@ class KeyManager { ); outgoingShareRequests[request.requestId] = request; } catch (e, s) { - Logs.error( - '[Key Manager] Sending key verification request failed: ' + - e.toString(), - s); + Logs().e('[Key Manager] Sending key verification request failed', e, s); } } @@ -693,7 +683,7 @@ class KeyManager { final roomKeys = await runInBackground( _generateUploadKeys, args); - Logs.info('[Key Manager] Uploading ${dbSessions.length} room keys...'); + Logs().i('[Key Manager] Uploading ${dbSessions.length} room keys...'); // upload the payload... await client.storeRoomKeys(info.version, roomKeys); // and now finally mark all the keys as uploaded @@ -706,7 +696,7 @@ class KeyManager { decryption.free(); } } catch (e, s) { - Logs.error('[Key Manager] Error uploading room keys: ' + e.toString(), s); + Logs().e('[Key Manager] Error uploading room keys', e, s); } finally { _isUploadingKeys = false; } @@ -720,27 +710,27 @@ class KeyManager { } if (event.content['action'] == 'request') { // we are *receiving* a request - Logs.info('[KeyManager] Received key sharing request...'); + Logs().i('[KeyManager] Received key sharing request...'); if (!event.content.containsKey('body')) { - Logs.info('[KeyManager] No body, doing nothing'); + Logs().i('[KeyManager] No body, doing nothing'); return; // no body } if (!client.userDeviceKeys.containsKey(event.sender) || !client.userDeviceKeys[event.sender].deviceKeys .containsKey(event.content['requesting_device_id'])) { - Logs.info('[KeyManager] Device not found, doing nothing'); + Logs().i('[KeyManager] Device not found, doing nothing'); return; // device not found } final device = client.userDeviceKeys[event.sender] .deviceKeys[event.content['requesting_device_id']]; if (device.userId == client.userID && device.deviceId == client.deviceID) { - Logs.info('[KeyManager] Request is by ourself, ignoring'); + Logs().i('[KeyManager] Request is by ourself, ignoring'); return; // ignore requests by ourself } final room = client.getRoomById(event.content['body']['room_id']); if (room == null) { - Logs.info('[KeyManager] Unknown room, ignoring'); + Logs().i('[KeyManager] Unknown room, ignoring'); return; // unknown room } final sessionId = event.content['body']['session_id']; @@ -748,7 +738,7 @@ class KeyManager { // okay, let's see if we have this session at all if ((await loadInboundGroupSession(room.id, sessionId, senderKey)) == null) { - Logs.info('[KeyManager] Unknown session, ignoring'); + Logs().i('[KeyManager] Unknown session, ignoring'); return; // we don't have this session anyways } final request = KeyManagerKeyShareRequest( @@ -759,7 +749,7 @@ class KeyManager { senderKey: senderKey, ); if (incomingShareRequests.containsKey(request.requestId)) { - Logs.info('[KeyManager] Already processed this request, ignoring'); + Logs().i('[KeyManager] Already processed this request, ignoring'); return; // we don't want to process one and the same request multiple times } incomingShareRequests[request.requestId] = request; @@ -768,12 +758,12 @@ class KeyManager { if (device.userId == client.userID && device.verified && !device.blocked) { - Logs.info('[KeyManager] All checks out, forwarding key...'); + Logs().i('[KeyManager] All checks out, forwarding key...'); // alright, we can forward the key await roomKeyRequest.forwardKey(); } else { - Logs.info( - '[KeyManager] Asking client, if the key should be forwarded'); + Logs() + .i('[KeyManager] Asking client, if the key should be forwarded'); client.onRoomKeyRequest .add(roomKeyRequest); // let the client handle this } @@ -988,7 +978,7 @@ RoomKeys _generateUploadKeys(_GenerateUploadKeysArgs args) { } return roomKeys; } catch (e, s) { - Logs.error('[Key Manager] Error generating payload ' + e.toString(), s); + Logs().e('[Key Manager] Error generating payload', e, s); rethrow; } finally { enc.free(); diff --git a/lib/encryption/olm_manager.dart b/lib/encryption/olm_manager.dart index 2b9e8973..81d71f8c 100644 --- a/lib/encryption/olm_manager.dart +++ b/lib/encryption/olm_manager.dart @@ -127,7 +127,7 @@ class OlmManager { isValid = true; } catch (e, s) { isValid = false; - Logs.error('[LibOlm] Signature check failed: ' + e.toString(), s); + Logs().e('[LibOlm] Signature check failed', e, s); } finally { olmutil.free(); } @@ -442,10 +442,8 @@ class OlmManager { )); } catch (e, s) { session.free(); - Logs.error( - '[LibOlm] Could not create new outbound olm session: ' + - e.toString(), - s); + Logs() + .e('[LibOlm] Could not create new outbound olm session', e, s); } } } @@ -518,8 +516,7 @@ class OlmManager { data[device.userId][device.deviceId] = await encryptToDeviceMessagePayload(device, type, payload); } catch (e, s) { - Logs.error( - '[LibOlm] Error encrypting to-device event: ' + e.toString(), s); + Logs().e('[LibOlm] Error encrypting to-device event', e, s); continue; } } diff --git a/lib/encryption/ssss.dart b/lib/encryption/ssss.dart index cd2c0ac2..ecec05cd 100644 --- a/lib/encryption/ssss.dart +++ b/lib/encryption/ssss.dart @@ -384,10 +384,10 @@ class SSSS { Future request(String type, [List devices]) async { // only send to own, verified devices - Logs.info('[SSSS] Requesting type ${type}...'); + Logs().i('[SSSS] Requesting type ${type}...'); if (devices == null || devices.isEmpty) { if (!client.userDeviceKeys.containsKey(client.userID)) { - Logs.warning('[SSSS] User does not have any devices'); + Logs().w('[SSSS] User does not have any devices'); return; } devices = client.userDeviceKeys[client.userID].deviceKeys.values.toList(); @@ -398,7 +398,7 @@ class SSSS { d.blocked || d.deviceId == client.deviceID); if (devices.isEmpty) { - Logs.warning('[SSSS] No devices'); + Logs().w('[SSSS] No devices'); return; } final requestId = client.generateUniqueTransactionId(); @@ -440,32 +440,32 @@ class SSSS { Future handleToDeviceEvent(ToDeviceEvent event) async { if (event.type == 'm.secret.request') { // got a request to share a secret - Logs.info('[SSSS] Received sharing request...'); + Logs().i('[SSSS] Received sharing request...'); if (event.sender != client.userID || !client.userDeviceKeys.containsKey(client.userID)) { - Logs.info('[SSSS] Not sent by us'); + Logs().i('[SSSS] Not sent by us'); return; // we aren't asking for it ourselves, so ignore } if (event.content['action'] != 'request') { - Logs.info('[SSSS] it is actually a cancelation'); + Logs().i('[SSSS] it is actually a cancelation'); return; // not actually requesting, so ignore } final device = client.userDeviceKeys[client.userID] .deviceKeys[event.content['requesting_device_id']]; if (device == null || !device.verified || device.blocked) { - Logs.info('[SSSS] Unknown / unverified devices, ignoring'); + Logs().i('[SSSS] Unknown / unverified devices, ignoring'); return; // nope....unknown or untrusted device } // alright, all seems fine...let's check if we actually have the secret they are asking for final type = event.content['name']; final secret = await getCached(type); if (secret == null) { - Logs.info( + Logs().i( '[SSSS] We don\'t have the secret for ${type} ourself, ignoring'); return; // seems like we don't have this, either } // okay, all checks out...time to share this secret! - Logs.info('[SSSS] Replying with secret for ${type}'); + Logs().i('[SSSS] Replying with secret for ${type}'); await client.sendToDeviceEncrypted( [device], 'm.secret.send', @@ -475,11 +475,11 @@ class SSSS { }); } else if (event.type == 'm.secret.send') { // receiving a secret we asked for - Logs.info('[SSSS] Received shared secret...'); + Logs().i('[SSSS] Received shared secret...'); if (event.sender != client.userID || !pendingShareRequests.containsKey(event.content['request_id']) || event.encryptedContent == null) { - Logs.info('[SSSS] Not by us or unknown request'); + Logs().i('[SSSS] Not by us or unknown request'); return; // we have no idea what we just received } final request = pendingShareRequests[event.content['request_id']]; @@ -490,26 +490,26 @@ class SSSS { d.curve25519Key == event.encryptedContent['sender_key'], orElse: () => null); if (device == null) { - Logs.info('[SSSS] Someone else replied?'); + Logs().i('[SSSS] Someone else replied?'); return; // someone replied whom we didn't send the share request to } final secret = event.content['secret']; if (!(event.content['secret'] is String)) { - Logs.info('[SSSS] Secret wasn\'t a string'); + Logs().i('[SSSS] Secret wasn\'t a string'); return; // the secret wasn't a string....wut? } // let's validate if the secret is, well, valid if (_validators.containsKey(request.type) && !(await _validators[request.type](secret))) { - Logs.info('[SSSS] The received secret was invalid'); + Logs().i('[SSSS] The received secret was invalid'); return; // didn't pass the validator } pendingShareRequests.remove(request.requestId); if (request.start.add(Duration(minutes: 15)).isBefore(DateTime.now())) { - Logs.info('[SSSS] Request is too far in the past'); + Logs().i('[SSSS] Request is too far in the past'); return; // our request is more than 15min in the past...better not trust it anymore } - Logs.info('[SSSS] Secret for type ${request.type} is ok, storing it'); + Logs().i('[SSSS] Secret for type ${request.type} is ok, storing it'); if (client.database != null) { final keyId = keyIdFromType(request.type); if (keyId != null) { diff --git a/lib/encryption/utils/bootstrap.dart b/lib/encryption/utils/bootstrap.dart index a3264f46..72fecc97 100644 --- a/lib/encryption/utils/bootstrap.dart +++ b/lib/encryption/utils/bootstrap.dart @@ -236,8 +236,7 @@ class Bootstrap { } } catch (e) { // very bad - Logs.error( - '[Bootstrapping] Error construction ssss key: ' + e.toString()); + Logs().e('[Bootstrapping] Error construction ssss key', e); state = BootstrapState.error; return; } @@ -296,10 +295,7 @@ class Bootstrap { await newSsssKey.maybeCacheAll(); } } catch (e, s) { - Logs.error( - '[Bootstrapping] Error trying to migrate old secrets: ' + - e.toString(), - s); + Logs().e('[Bootstrapping] Error trying to migrate old secrets', e, s); state = BootstrapState.error; return; } @@ -494,8 +490,7 @@ class Bootstrap { } await encryption.crossSigning.sign(keysToSign); } catch (e, s) { - Logs.error( - '[Bootstrapping] Error setting up cross signing: ' + e.toString(), s); + Logs().e('[Bootstrapping] Error setting up cross signing', e, s); state = BootstrapState.error; return; } @@ -553,9 +548,7 @@ class Bootstrap { // and finally set all megolm keys as needing to be uploaded again await client.database?.markInboundGroupSessionsAsNeedingUpload(client.id); } catch (e, s) { - Logs.error( - '[Bootstrapping] Error setting up online key backup: ' + e.toString(), - s); + Logs().e('[Bootstrapping] Error setting up online key backup', e, s); state = BootstrapState.error; encryption.client.onEncryptionError.add( SdkError(exception: e, stackTrace: s), diff --git a/lib/encryption/utils/json_signature_check_extension.dart b/lib/encryption/utils/json_signature_check_extension.dart index e729537f..20cef691 100644 --- a/lib/encryption/utils/json_signature_check_extension.dart +++ b/lib/encryption/utils/json_signature_check_extension.dart @@ -20,7 +20,7 @@ extension JsonSignatureCheckExtension on Map { isValid = true; } catch (e, s) { isValid = false; - Logs.error('[LibOlm] Signature check failed: ' + e.toString(), s); + Logs().e('[LibOlm] Signature check failed', e, s); } finally { olmutil.free(); } diff --git a/lib/encryption/utils/key_verification.dart b/lib/encryption/utils/key_verification.dart index 78fbaae1..4b9546aa 100644 --- a/lib/encryption/utils/key_verification.dart +++ b/lib/encryption/utils/key_verification.dart @@ -155,7 +155,7 @@ class KeyVerification { } void dispose() { - Logs.info('[Key Verification] disposing object...'); + Logs().i('[Key Verification] disposing object...'); method?.dispose(); } @@ -210,8 +210,7 @@ class KeyVerification { await Future.delayed(Duration(milliseconds: 50)); } _handlePayloadLock = true; - Logs.info( - '[Key Verification] Received type ${type}: ' + payload.toString()); + Logs().i('[Key Verification] Received type ${type}: ' + payload.toString()); try { var thisLastStep = lastStep; switch (type) { @@ -321,7 +320,7 @@ class KeyVerification { startPaylaod = payload; setState(KeyVerificationState.askAccept); } else { - Logs.info('handling start in method.....'); + Logs().i('handling start in method.....'); await method.handlePayload(type, payload); } break; @@ -346,8 +345,7 @@ class KeyVerification { lastStep = type; } } catch (err, stacktrace) { - Logs.error( - '[Key Verification] An error occured: ' + err.toString(), stacktrace); + Logs().e('[Key Verification] An error occured', err, stacktrace); await cancel('m.invalid_message'); } finally { _handlePayloadLock = false; @@ -583,10 +581,9 @@ class KeyVerification { Future send(String type, Map payload) async { makePayload(payload); - Logs.info('[Key Verification] Sending type ${type}: ' + payload.toString()); + Logs().i('[Key Verification] Sending type ${type}: ' + payload.toString()); if (room != null) { - Logs.info( - '[Key Verification] Sending to ${userId} in room ${room.id}...'); + Logs().i('[Key Verification] Sending to ${userId} in room ${room.id}...'); if ({'m.key.verification.request'}.contains(type)) { payload['msgtype'] = type; payload['to'] = userId; @@ -600,13 +597,12 @@ class KeyVerification { encryption.keyVerificationManager.addRequest(this); } } else { - Logs.info( - '[Key Verification] Sending to ${userId} device ${deviceId}...'); + Logs().i('[Key Verification] Sending to ${userId} device ${deviceId}...'); if (deviceId == '*') { if ({'m.key.verification.request'}.contains(type)) { await client.sendToDevicesOfUserIds({userId}, type, payload); } else { - Logs.error( + Logs().e( '[Key Verification] Tried to broadcast and un-broadcastable type: ${type}'); } } else { @@ -739,8 +735,7 @@ class _KeyVerificationMethodSas extends _KeyVerificationMethod { break; } } catch (err, stacktrace) { - Logs.error('[Key Verification SAS] An error occured: ' + err.toString(), - stacktrace); + Logs().e('[Key Verification SAS] An error occured', err, stacktrace); if (request.deviceId != null) { await request.cancel('m.invalid_message'); } diff --git a/lib/encryption/utils/olm_session.dart b/lib/encryption/utils/olm_session.dart index 10fd21e4..fe987269 100644 --- a/lib/encryption/utils/olm_session.dart +++ b/lib/encryption/utils/olm_session.dart @@ -49,7 +49,7 @@ class OlmSession { DateTime.fromMillisecondsSinceEpoch(dbEntry.lastReceived ?? 0); assert(sessionId == session.session_id()); } catch (e, s) { - Logs.error('[LibOlm] Could not unpickle olm session: ' + e.toString(), s); + Logs().e('[LibOlm] Could not unpickle olm session', e, s); dispose(); } } diff --git a/lib/encryption/utils/outbound_group_session.dart b/lib/encryption/utils/outbound_group_session.dart index 13910c27..ac3bdd2c 100644 --- a/lib/encryption/utils/outbound_group_session.dart +++ b/lib/encryption/utils/outbound_group_session.dart @@ -51,7 +51,7 @@ class OutboundGroupSession { } } catch (e) { // devices is bad (old data), so just not use this session - Logs.info( + Logs().i( '[OutboundGroupSession] Session in database is old, not using it. ' + e.toString()); return; @@ -63,9 +63,7 @@ class OutboundGroupSession { sentMessages = dbEntry.sentMessages; } catch (e, s) { dispose(); - Logs.error( - '[LibOlm] Unable to unpickle outboundGroupSession: ' + e.toString(), - s); + Logs().e('[LibOlm] Unable to unpickle outboundGroupSession', e, s); } } diff --git a/lib/encryption/utils/session_key.dart b/lib/encryption/utils/session_key.dart index 4ccd0a3f..6ffc9bf5 100644 --- a/lib/encryption/utils/session_key.dart +++ b/lib/encryption/utils/session_key.dart @@ -78,9 +78,7 @@ class SessionKey { inboundGroupSession.unpickle(key, dbEntry.pickle); } catch (e, s) { dispose(); - Logs.error( - '[LibOlm] Unable to unpickle inboundGroupSession: ' + e.toString(), - s); + Logs().e('[LibOlm] Unable to unpickle inboundGroupSession', e, s); } } diff --git a/lib/matrix_api.dart b/lib/matrix_api.dart index 669dd917..682a6966 100644 --- a/lib/matrix_api.dart +++ b/lib/matrix_api.dart @@ -19,6 +19,7 @@ library matrix_api; export 'matrix_api/matrix_api.dart'; +export 'matrix_api/utils/logs.dart'; export 'matrix_api/model/algorithm_types.dart'; export 'matrix_api/model/basic_event.dart'; export 'matrix_api/model/basic_event_with_sender.dart'; diff --git a/lib/matrix_api/utils/logs.dart b/lib/matrix_api/utils/logs.dart index 42c76bd6..67391d67 100644 --- a/lib/matrix_api/utils/logs.dart +++ b/lib/matrix_api/utils/logs.dart @@ -16,37 +16,16 @@ * along with this program. If not, see . */ -import 'package:ansicolor/ansicolor.dart'; +import 'package:logger/logger.dart'; -abstract class Logs { - static final AnsiPen _infoPen = AnsiPen()..blue(); - static final AnsiPen _warningPen = AnsiPen()..yellow(); - static final AnsiPen _successPen = AnsiPen()..green(); - static final AnsiPen _errorPen = AnsiPen()..red(); +class Logs extends Logger { + static final Logs _singleton = Logs._internal(); - static const String _prefixText = '[Famedly Matrix SDK] '; + factory Logs() { + return _singleton; + } - // ignore: avoid_print - static void info(dynamic info) => print( - _prefixText + _infoPen(info.toString()), - ); + set level(Level newLevel) => Logger.level = newLevel; - // ignore: avoid_print - static void success(dynamic obj, [dynamic stackTrace]) => print( - _prefixText + _successPen(obj.toString()), - ); - - // ignore: avoid_print - static void warning(dynamic warning, [dynamic stackTrace]) => print( - _prefixText + - _warningPen(warning.toString()) + - (stackTrace != null ? '\n${stackTrace.toString()}' : ''), - ); - - // ignore: avoid_print - static void error(dynamic obj, [dynamic stackTrace]) => print( - _prefixText + - _errorPen(obj.toString()) + - (stackTrace != null ? '\n${stackTrace.toString()}' : ''), - ); + Logs._internal() : super(printer: PrettyPrinter(methodCount: 0)); } diff --git a/lib/matrix_api/utils/try_get_map_extension.dart b/lib/matrix_api/utils/try_get_map_extension.dart index 398aee71..fe8f306c 100644 --- a/lib/matrix_api/utils/try_get_map_extension.dart +++ b/lib/matrix_api/utils/try_get_map_extension.dart @@ -4,12 +4,12 @@ extension TryGetMapExtension on Map { T tryGet(String key, [T fallbackValue]) { final value = this[key]; if (value != null && !(value is T)) { - Logs.warning( + Logs().w( 'Expected "${T.runtimeType}" in event content for the Key "$key" but got "${value.runtimeType}".'); return fallbackValue; } if (value == null && fallbackValue != null) { - Logs.warning( + Logs().w( 'Required field in event content for the Key "$key" is null. Set to "$fallbackValue".'); return fallbackValue; } diff --git a/lib/src/client.dart b/lib/src/client.dart index 5bec6059..512e359d 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -163,7 +163,7 @@ class Client extends MatrixApi { /// Warning! This endpoint is for testing only! set rooms(List newList) { - Logs.warning('Warning! This endpoint is for testing only!'); + Logs().w('Warning! This endpoint is for testing only!'); _rooms = newList; } @@ -390,7 +390,7 @@ class Client extends MatrixApi { try { await super.logout(); } catch (e, s) { - Logs.error(e, s); + Logs().e('Logout failed', e, s); rethrow; } finally { await clear(); @@ -404,7 +404,7 @@ class Client extends MatrixApi { try { await super.logoutAll(); } catch (e, s) { - Logs.error(e, s); + Logs().e('Logout all failed', e, s); rethrow; } finally { await clear(); @@ -690,7 +690,7 @@ class Client extends MatrixApi { if (_initLock) throw Exception('[init()] has been called multiple times!'); _initLock = true; try { - Logs.info('Initialize client $clientName'); + Logs().i('Initialize client $clientName'); if (isLogged()) { throw Exception('User is already logged in! Call [logout()] first!'); } @@ -734,7 +734,7 @@ class Client extends MatrixApi { encryption?.dispose(); encryption = null; onLoginStateChanged.add(LoginState.loggedOut); - Logs.info('User is not logged in.'); + Logs().i('User is not logged in.'); _initLock = false; return; } @@ -777,12 +777,12 @@ class Client extends MatrixApi { } onLoginStateChanged.add(LoginState.logged); - Logs.success( + Logs().i( 'Successfully connected as ${userID.localpart} with ${homeserver.toString()}', ); return _sync(); } catch (e, s) { - Logs.error('Initialization failed: ${e.toString()}', s); + Logs().e('Initialization failed', e, s); clear(); onLoginStateChanged.addError(e, s); _initLock = false; @@ -880,15 +880,15 @@ class Client extends MatrixApi { } on MatrixException catch (e, s) { onSyncError.add(SdkError(exception: e, stackTrace: s)); if (e.error == MatrixError.M_UNKNOWN_TOKEN) { - Logs.warning('The user has been logged out!'); + Logs().w('The user has been logged out!'); clear(); } } on MatrixConnectionException catch (e, s) { - Logs.warning('Synchronization connection failed: ${e.toString()}'); + Logs().w('Synchronization connection failed', e); onSyncError.add(SdkError(exception: e, stackTrace: s)); } catch (e, s) { if (!isLogged() || _disposed) return; - Logs.error('Error during processing events: ${e.toString()}', s); + Logs().e('Error during processing events', e, s); onSyncError.add(SdkError( exception: e is Exception ? e : Exception(e), stackTrace: s)); } @@ -1255,7 +1255,7 @@ class Client extends MatrixApi { Event.fromJson(eventUpdate.content, room, eventUpdate.sortOrder); var prevState = room.getState(stateEvent.type, stateEvent.stateKey); if (prevState != null && prevState.sortOrder > stateEvent.sortOrder) { - Logs.warning(''' + Logs().w(''' A new ${eventUpdate.type} event of the type ${stateEvent.type} has arrived with a previews sort order ${stateEvent.sortOrder} than the current ${stateEvent.type} event with a sort order of ${prevState.sortOrder}. This should never happen...'''); @@ -1341,7 +1341,7 @@ sort order of ${prevState.sortOrder}. This should never happen...'''); } } } catch (e, s) { - Logs.error('[E2EE] Failed to fetch participants: ' + e.toString(), s); + Logs().e('[E2EE] Failed to fetch participants', e, s); } } } @@ -1530,8 +1530,7 @@ sort order of ${prevState.sortOrder}. This should never happen...'''); }); } } catch (e, s) { - Logs.error( - '[LibOlm] Unable to update user device keys: ' + e.toString(), s); + Logs().e('[LibOlm] Unable to update user device keys', e, s); } } @@ -1715,11 +1714,13 @@ sort order of ${prevState.sortOrder}. This should never happen...'''); encryption = null; try { if (closeDatabase && database != null) { - await database.close().catchError((e, s) => Logs.warning(e, s)); + await database + .close() + .catchError((e, s) => Logs().w('Failed to close database: ', e, s)); _database = null; } } catch (error, stacktrace) { - Logs.warning('Failed to close database: ' + error.toString(), stacktrace); + Logs().w('Failed to close database: ', error, stacktrace); } return; } diff --git a/lib/src/database/database.dart b/lib/src/database/database.dart index 16532656..9e90d0ff 100644 --- a/lib/src/database/database.dart +++ b/lib/src/database/database.dart @@ -67,7 +67,7 @@ class Database extends _$Database { try { await m.createAll(); } catch (e, s) { - Logs.error(e, s); + Logs().e('Create all failed in database migrator', e, s); onError.add(SdkError(exception: e, stackTrace: s)); rethrow; } @@ -138,7 +138,7 @@ class Database extends _$Database { await customStatement('UPDATE clients SET prev_batch = null'); } } catch (e, s) { - Logs.error(e, s); + Logs().e('Database migration failed', e, s); onError.add(SdkError(exception: e, stackTrace: s)); rethrow; } @@ -148,12 +148,12 @@ class Database extends _$Database { if (executor.dialect == SqlDialect.sqlite) { final ret = await customSelect('PRAGMA journal_mode=WAL').get(); if (ret.isNotEmpty) { - Logs.info('[Moor] Switched database to mode ' + + Logs().i('[Moor] Switched database to mode ' + ret.first.data['journal_mode'].toString()); } } } catch (e, s) { - Logs.error(e, s); + Logs().e('Database before open failed', e, s); onError.add(SdkError(exception: e, stackTrace: s)); rethrow; } @@ -202,8 +202,7 @@ class Database extends _$Database { session.unpickle(userId, row.pickle); res[row.identityKey].add(session); } catch (e, s) { - Logs.error( - '[LibOlm] Could not unpickle olm session: ' + e.toString(), s); + Logs().e('[LibOlm] Could not unpickle olm session', e, s); } } return res; diff --git a/lib/src/room.dart b/lib/src/room.dart index 2c9b1126..f89d1a72 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -139,7 +139,7 @@ class Room { try { state = client.encryption.decryptRoomEventSync(id, state); } catch (e, s) { - Logs.error('[LibOlm] Could not decrypt room state: ' + e.toString(), s); + Logs().e('[LibOlm] Could not decrypt room state', e, s); } } if (!(state.stateKey is String) && @@ -794,13 +794,12 @@ class Room { if ((DateTime.now().millisecondsSinceEpoch - sentDate.millisecondsSinceEpoch) < (1000 * client.sendMessageTimeoutSeconds)) { - Logs.warning('[Client] Problem while sending message because of "' + + Logs().w('[Client] Problem while sending message because of "' + e.toString() + '". Try again in 1 seconds...'); await Future.delayed(Duration(seconds: 1)); } else { - Logs.warning( - '[Client] Problem while sending message: ' + e.toString(), s); + Logs().w('[Client] Problem while sending message', e, s); syncUpdate.rooms.join.values.first.timeline.events.first .unsigned[MessageSendingStatusKey] = -1; await _handleFakeSync(syncUpdate); diff --git a/lib/src/timeline.dart b/lib/src/timeline.dart index aa39667e..52879bb7 100644 --- a/lib/src/timeline.dart +++ b/lib/src/timeline.dart @@ -317,7 +317,7 @@ class Timeline { if (onUpdate != null) onUpdate(); } } catch (e, s) { - Logs.warning('Handle event update failed: ${e.toString()}', s); + Logs().w('Handle event update failed', e, s); } } diff --git a/lib/src/utils/event_update.dart b/lib/src/utils/event_update.dart index eb2c5fd3..df9734aa 100644 --- a/lib/src/utils/event_update.dart +++ b/lib/src/utils/event_update.dart @@ -68,7 +68,7 @@ class EventUpdate { sortOrder: sortOrder, ); } catch (e, s) { - Logs.error('[LibOlm] Could not decrypt megolm event: ' + e.toString(), s); + Logs().e('[LibOlm] Could not decrypt megolm event', e, s); return this; } } diff --git a/lib/src/utils/run_in_root.dart b/lib/src/utils/run_in_root.dart index cc0014ae..f6df1fa8 100644 --- a/lib/src/utils/run_in_root.dart +++ b/lib/src/utils/run_in_root.dart @@ -25,7 +25,7 @@ Future runInRoot(FutureOr Function() fn) async { try { return await fn(); } catch (e, s) { - Logs.error('Error thrown in root zone: ' + e.toString(), s); + Logs().e('Error thrown in root zone', e, s); } return null; }); diff --git a/pubspec.yaml b/pubspec.yaml index cb3f35df..b781809f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,8 +21,8 @@ dependencies: password_hash: ^2.0.0 olm: ^1.2.1 matrix_file_e2ee: ^1.0.5 - ansicolor: ^1.1.1 isolate: ^2.0.3 + logger: 0.7.0 dev_dependencies: test: ^1.15.7 diff --git a/test/client_test.dart b/test/client_test.dart index 79d2dcdf..5782dbfe 100644 --- a/test/client_test.dart +++ b/test/client_test.dart @@ -55,15 +55,16 @@ void main() { roomUpdateListFuture = matrix.onRoomUpdate.stream.toList(); eventUpdateListFuture = matrix.onEvent.stream.toList(); toDeviceUpdateListFuture = matrix.onToDeviceEvent.stream.toList(); + var olmEnabled = true; try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().w('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().w('[LibOlm] Enabled: $olmEnabled'); test('Login', () async { var presenceCounter = 0; diff --git a/test/device_keys_list_test.dart b/test/device_keys_list_test.dart index f00efa8b..d99ad7ad 100644 --- a/test/device_keys_list_test.dart +++ b/test/device_keys_list_test.dart @@ -76,11 +76,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.error('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/bootstrap_test.dart b/test/encryption/bootstrap_test.dart index e51c481c..34790857 100644 --- a/test/encryption/bootstrap_test.dart +++ b/test/encryption/bootstrap_test.dart @@ -33,11 +33,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/cross_signing_test.dart b/test/encryption/cross_signing_test.dart index 8cb0023b..d3f682e8 100644 --- a/test/encryption/cross_signing_test.dart +++ b/test/encryption/cross_signing_test.dart @@ -32,11 +32,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/encrypt_decrypt_room_message_test.dart b/test/encryption/encrypt_decrypt_room_message_test.dart index 6908ce18..7ed415ec 100644 --- a/test/encryption/encrypt_decrypt_room_message_test.dart +++ b/test/encryption/encrypt_decrypt_room_message_test.dart @@ -29,11 +29,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/encrypt_decrypt_to_device_test.dart b/test/encryption/encrypt_decrypt_to_device_test.dart index b9503479..2e6f65cc 100644 --- a/test/encryption/encrypt_decrypt_to_device_test.dart +++ b/test/encryption/encrypt_decrypt_to_device_test.dart @@ -35,11 +35,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/key_manager_test.dart b/test/encryption/key_manager_test.dart index b38640be..e57ba6ca 100644 --- a/test/encryption/key_manager_test.dart +++ b/test/encryption/key_manager_test.dart @@ -31,11 +31,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/key_request_test.dart b/test/encryption/key_request_test.dart index c4ce123a..132426f1 100644 --- a/test/encryption/key_request_test.dart +++ b/test/encryption/key_request_test.dart @@ -44,11 +44,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; @@ -107,7 +107,7 @@ void main() { 'requesting_device_id': 'OTHERDEVICE', }); await matrix.encryption.keyManager.handleToDeviceEvent(event); - Logs.info(FakeMatrixApi.calledEndpoints.keys.toString()); + Logs().i(FakeMatrixApi.calledEndpoints.keys.toString()); expect( FakeMatrixApi.calledEndpoints.keys.any( (k) => k.startsWith('/client/r0/sendToDevice/m.room.encrypted')), diff --git a/test/encryption/key_verification_test.dart b/test/encryption/key_verification_test.dart index 604eb0c1..8f24400d 100644 --- a/test/encryption/key_verification_test.dart +++ b/test/encryption/key_verification_test.dart @@ -66,11 +66,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/olm_manager_test.dart b/test/encryption/olm_manager_test.dart index 56973af4..6690cf80 100644 --- a/test/encryption/olm_manager_test.dart +++ b/test/encryption/olm_manager_test.dart @@ -32,11 +32,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/online_key_backup_test.dart b/test/encryption/online_key_backup_test.dart index 7d46191d..b067c4c2 100644 --- a/test/encryption/online_key_backup_test.dart +++ b/test/encryption/online_key_backup_test.dart @@ -33,11 +33,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/encryption/ssss_test.dart b/test/encryption/ssss_test.dart index 5b2589e9..a7aedfe4 100644 --- a/test/encryption/ssss_test.dart +++ b/test/encryption/ssss_test.dart @@ -49,11 +49,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); if (!olmEnabled) return; diff --git a/test/event_test.dart b/test/event_test.dart index a7ad061c..a070460a 100644 --- a/test/event_test.dart +++ b/test/event_test.dart @@ -38,11 +38,11 @@ void main() { try { olm.init(); olm.Account(); - } catch (_) { + } catch (e) { olmEnabled = false; - Logs.warning('[LibOlm] Failed to load LibOlm: ' + _.toString()); + Logs().e('[LibOlm] Failed to load LibOlm', e); } - Logs.success('[LibOlm] Enabled: $olmEnabled'); + Logs().i('[LibOlm] Enabled: $olmEnabled'); final timestamp = DateTime.now().millisecondsSinceEpoch; final id = '!4fsdfjisjf:server.abc'; diff --git a/test/matrix_api_test.dart b/test/matrix_api_test.dart index bd32927d..cc1dbd80 100644 --- a/test/matrix_api_test.dart +++ b/test/matrix_api_test.dart @@ -24,6 +24,7 @@ import 'package:famedlysdk/matrix_api/model/matrix_exception.dart'; import 'package:famedlysdk/matrix_api/model/presence_content.dart'; import 'package:famedlysdk/matrix_api/model/push_rule_set.dart'; import 'package:famedlysdk/matrix_api/model/pusher.dart'; +import 'package:famedlysdk/matrix_api/utils/logs.dart'; import 'package:test/test.dart'; import 'fake_matrix_api.dart'; @@ -34,6 +35,20 @@ void main() { final matrixApi = MatrixApi( httpClient: FakeMatrixApi(), ); + + test('Logs', () { + Logs().i('Info'); + Logs().d('Debug'); + Logs().v('Verbose'); + Logs().w('Warning'); + Logs().wtf('Critical Error'); + Logs().e('Error'); + try { + throw 'Exception'; + } catch (e, s) { + Logs().e('Caught', e, s); + } + }); test('MatrixException test', () async { final exception = MatrixException.fromJson({ 'flows': [ diff --git a/test_driver/famedlysdk_test.dart b/test_driver/famedlysdk_test.dart index 2bfc9d89..1bae4031 100644 --- a/test_driver/famedlysdk_test.dart +++ b/test_driver/famedlysdk_test.dart @@ -19,23 +19,23 @@ void test() async { try { await olm.init(); olm.Account(); - Logs.success('[LibOlm] Enabled'); + Logs().i('[LibOlm] Enabled'); - Logs.success('++++ Login Alice at ++++'); + Logs().i('++++ Login Alice at ++++'); testClientA = Client('TestClientA', databaseBuilder: getDatabase); await testClientA.checkHomeserver(TestUser.homeserver); await testClientA.login( user: TestUser.username, password: TestUser.password); assert(testClientA.encryptionEnabled); - Logs.success('++++ Login Bob ++++'); + Logs().i('++++ Login Bob ++++'); testClientB = Client('TestClientB', databaseBuilder: getDatabase); await testClientB.checkHomeserver(TestUser.homeserver); await testClientB.login( user: TestUser.username2, password: TestUser.password); assert(testClientB.encryptionEnabled); - Logs.success('++++ (Alice) Leave all rooms ++++'); + Logs().i('++++ (Alice) Leave all rooms ++++'); while (testClientA.rooms.isNotEmpty) { var room = testClientA.rooms.first; if (room.canonicalAlias?.isNotEmpty ?? false) { @@ -47,7 +47,7 @@ void test() async { } catch (_) {} } - Logs.success('++++ (Bob) Leave all rooms ++++'); + Logs().i('++++ (Bob) Leave all rooms ++++'); for (var i = 0; i < 3; i++) { if (testClientB.rooms.isNotEmpty) { var room = testClientB.rooms.first; @@ -58,7 +58,7 @@ void test() async { } } - Logs.success('++++ Check if own olm device is verified by default ++++'); + Logs().i('++++ Check if own olm device is verified by default ++++'); assert(testClientA.userDeviceKeys.containsKey(TestUser.username)); assert(testClientA.userDeviceKeys[TestUser.username].deviceKeys .containsKey(testClientA.deviceID)); @@ -74,20 +74,20 @@ void test() async { assert(!testClientB.userDeviceKeys[TestUser.username2] .deviceKeys[testClientB.deviceID].blocked); - Logs.success('++++ (Alice) Create room and invite Bob ++++'); + Logs().i('++++ (Alice) Create room and invite Bob ++++'); await testClientA.createRoom(invite: [TestUser.username2]); await Future.delayed(Duration(seconds: 1)); var room = testClientA.rooms.first; assert(room != null); final roomId = room.id; - Logs.success('++++ (Bob) Join room ++++'); + Logs().i('++++ (Bob) Join room ++++'); var inviteRoom = testClientB.getRoomById(roomId); await inviteRoom.join(); await Future.delayed(Duration(seconds: 1)); assert(inviteRoom.membership == Membership.join); - Logs.success('++++ (Alice) Enable encryption ++++'); + Logs().i('++++ (Alice) Enable encryption ++++'); assert(room.encrypted == false); await room.enableEncryption(); await Future.delayed(Duration(seconds: 5)); @@ -95,7 +95,7 @@ void test() async { assert(room.client.encryption.keyManager.getOutboundGroupSession(room.id) == null); - Logs.success('++++ (Alice) Check known olm devices ++++'); + Logs().i('++++ (Alice) Check known olm devices ++++'); assert(testClientA.userDeviceKeys.containsKey(TestUser.username2)); assert(testClientA.userDeviceKeys[TestUser.username2].deviceKeys .containsKey(testClientB.deviceID)); @@ -114,7 +114,7 @@ void test() async { .userDeviceKeys[TestUser.username2].deviceKeys[testClientB.deviceID] .setVerified(true); - Logs.success('++++ Check if own olm device is verified by default ++++'); + Logs().i('++++ Check if own olm device is verified by default ++++'); assert(testClientA.userDeviceKeys.containsKey(TestUser.username)); assert(testClientA.userDeviceKeys[TestUser.username].deviceKeys .containsKey(testClientA.deviceID)); @@ -126,7 +126,7 @@ void test() async { assert(testClientB.userDeviceKeys[TestUser.username2] .deviceKeys[testClientB.deviceID].verified); - Logs.success("++++ (Alice) Send encrypted message: '$testMessage' ++++"); + Logs().i("++++ (Alice) Send encrypted message: '$testMessage' ++++"); await room.sendTextEvent(testMessage); await Future.delayed(Duration(seconds: 5)); assert(room.client.encryption.keyManager.getOutboundGroupSession(room.id) != @@ -153,11 +153,10 @@ void test() async { null);*/ assert(room.lastMessage == testMessage); assert(inviteRoom.lastMessage == testMessage); - Logs.success( + Logs().i( "++++ (Bob) Received decrypted message: '${inviteRoom.lastMessage}' ++++"); - Logs.success( - "++++ (Alice) Send again encrypted message: '$testMessage2' ++++"); + Logs().i("++++ (Alice) Send again encrypted message: '$testMessage2' ++++"); await room.sendTextEvent(testMessage2); await Future.delayed(Duration(seconds: 5)); assert(testClientA.encryption.olmManager @@ -181,11 +180,10 @@ void test() async { null);*/ assert(room.lastMessage == testMessage2); assert(inviteRoom.lastMessage == testMessage2); - Logs.success( + Logs().i( "++++ (Bob) Received decrypted message: '${inviteRoom.lastMessage}' ++++"); - Logs.success( - "++++ (Bob) Send again encrypted message: '$testMessage3' ++++"); + Logs().i("++++ (Bob) Send again encrypted message: '$testMessage3' ++++"); await inviteRoom.sendTextEvent(testMessage3); await Future.delayed(Duration(seconds: 5)); assert(testClientA.encryption.olmManager @@ -215,18 +213,17 @@ void test() async { null);*/ assert(inviteRoom.lastMessage == testMessage3); assert(room.lastMessage == testMessage3); - Logs.success( + Logs().i( "++++ (Alice) Received decrypted message: '${room.lastMessage}' ++++"); - Logs.success('++++ Login Bob in another client ++++'); + Logs().i('++++ Login Bob in another client ++++'); var testClientC = Client('TestClientC', databaseBuilder: getDatabase); await testClientC.checkHomeserver(TestUser.homeserver); await testClientC.login( user: TestUser.username2, password: TestUser.password); await Future.delayed(Duration(seconds: 3)); - Logs.success( - "++++ (Alice) Send again encrypted message: '$testMessage4' ++++"); + Logs().i("++++ (Alice) Send again encrypted message: '$testMessage4' ++++"); await room.sendTextEvent(testMessage4); await Future.delayed(Duration(seconds: 5)); assert(testClientA.encryption.olmManager @@ -263,17 +260,16 @@ void test() async { null);*/ assert(room.lastMessage == testMessage4); assert(inviteRoom.lastMessage == testMessage4); - Logs.success( + Logs().i( "++++ (Bob) Received decrypted message: '${inviteRoom.lastMessage}' ++++"); - Logs.success('++++ Logout Bob another client ++++'); + Logs().i('++++ Logout Bob another client ++++'); await testClientC.dispose(closeDatabase: false); await testClientC.logout(); testClientC = null; await Future.delayed(Duration(seconds: 5)); - Logs.success( - "++++ (Alice) Send again encrypted message: '$testMessage6' ++++"); + Logs().i("++++ (Alice) Send again encrypted message: '$testMessage6' ++++"); await room.sendTextEvent(testMessage6); await Future.delayed(Duration(seconds: 5)); assert(testClientA.encryption.olmManager @@ -300,7 +296,7 @@ void test() async { null);*/ assert(room.lastMessage == testMessage6); assert(inviteRoom.lastMessage == testMessage6); - Logs.success( + Logs().i( "++++ (Bob) Received decrypted message: '${inviteRoom.lastMessage}' ++++"); await room.leave(); @@ -309,10 +305,10 @@ void test() async { await inviteRoom.forget(); await Future.delayed(Duration(seconds: 1)); } catch (e, s) { - Logs.error('Test failed: ${e.toString()}', s); + Logs().e('Test failed', e, s); rethrow; } finally { - Logs.success('++++ Logout Alice and Bob ++++'); + Logs().i('++++ Logout Alice and Bob ++++'); if (testClientA?.isLogged() ?? false) await testClientA.logoutAll(); if (testClientA?.isLogged() ?? false) await testClientB.logoutAll(); await testClientA?.dispose(closeDatabase: false);