diff --git a/lib/src/client.dart b/lib/src/client.dart index 1c1118dc..d07ad97f 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -37,6 +37,7 @@ import 'package:matrix/src/utils/multilock.dart'; import 'package:matrix/src/utils/run_benchmarked.dart'; import 'package:matrix/src/utils/run_in_root.dart'; import 'package:matrix/src/utils/sync_update_item_count.dart'; +import 'package:matrix/src/utils/try_get_push_rule.dart'; typedef RoomSorter = int Function(Room a, Room b); @@ -284,8 +285,11 @@ class Client extends MatrixApi { PushruleEvaluator? _pushruleEvaluator; void _updatePushrules() { - final ruleset = PushRuleSet.fromJson( - _accountData[EventTypes.PushRules]?.content['global'] ?? {}); + final ruleset = TryGetPushRule.tryFromJson( + _accountData[EventTypes.PushRules] + ?.content + .tryGetMap('global') ?? + {}); _pushruleEvaluator = PushruleEvaluator.fromRuleset(ruleset); } @@ -1006,7 +1010,7 @@ class Client extends MatrixApi { final pushrules = _accountData['m.push_rules'] ?.content .tryGetMap('global'); - return pushrules != null ? PushRuleSet.fromJson(pushrules) : null; + return pushrules != null ? TryGetPushRule.tryFromJson(pushrules) : null; } /// Returns the device push rules for the logged in user. @@ -1014,7 +1018,7 @@ class Client extends MatrixApi { final pushrules = _accountData['m.push_rules'] ?.content .tryGetMap('device'); - return pushrules != null ? PushRuleSet.fromJson(pushrules) : null; + return pushrules != null ? TryGetPushRule.tryFromJson(pushrules) : null; } static const Set supportedVersions = {'v1.1', 'v1.2'}; diff --git a/lib/src/utils/try_get_push_rule.dart b/lib/src/utils/try_get_push_rule.dart new file mode 100644 index 00000000..23b4fa68 --- /dev/null +++ b/lib/src/utils/try_get_push_rule.dart @@ -0,0 +1,12 @@ +import 'package:matrix/matrix.dart'; + +extension TryGetPushRule on PushRuleSet { + static PushRuleSet tryFromJson(Map json) { + try { + return PushRuleSet.fromJson(json); + } catch (e, s) { + Logs().v('Malformed PushRuleSet', e, s); + } + return PushRuleSet.fromJson({}); + } +}