fix: Do not assume that push rules are never malformed in account data
This commit is contained in:
parent
56cd0d14b6
commit
7b1a519de0
|
|
@ -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_benchmarked.dart';
|
||||||
import 'package:matrix/src/utils/run_in_root.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/sync_update_item_count.dart';
|
||||||
|
import 'package:matrix/src/utils/try_get_push_rule.dart';
|
||||||
|
|
||||||
typedef RoomSorter = int Function(Room a, Room b);
|
typedef RoomSorter = int Function(Room a, Room b);
|
||||||
|
|
||||||
|
|
@ -284,8 +285,11 @@ class Client extends MatrixApi {
|
||||||
PushruleEvaluator? _pushruleEvaluator;
|
PushruleEvaluator? _pushruleEvaluator;
|
||||||
|
|
||||||
void _updatePushrules() {
|
void _updatePushrules() {
|
||||||
final ruleset = PushRuleSet.fromJson(
|
final ruleset = TryGetPushRule.tryFromJson(
|
||||||
_accountData[EventTypes.PushRules]?.content['global'] ?? {});
|
_accountData[EventTypes.PushRules]
|
||||||
|
?.content
|
||||||
|
.tryGetMap<String, dynamic>('global') ??
|
||||||
|
{});
|
||||||
_pushruleEvaluator = PushruleEvaluator.fromRuleset(ruleset);
|
_pushruleEvaluator = PushruleEvaluator.fromRuleset(ruleset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1006,7 +1010,7 @@ class Client extends MatrixApi {
|
||||||
final pushrules = _accountData['m.push_rules']
|
final pushrules = _accountData['m.push_rules']
|
||||||
?.content
|
?.content
|
||||||
.tryGetMap<String, dynamic>('global');
|
.tryGetMap<String, dynamic>('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.
|
/// Returns the device push rules for the logged in user.
|
||||||
|
|
@ -1014,7 +1018,7 @@ class Client extends MatrixApi {
|
||||||
final pushrules = _accountData['m.push_rules']
|
final pushrules = _accountData['m.push_rules']
|
||||||
?.content
|
?.content
|
||||||
.tryGetMap<String, dynamic>('device');
|
.tryGetMap<String, dynamic>('device');
|
||||||
return pushrules != null ? PushRuleSet.fromJson(pushrules) : null;
|
return pushrules != null ? TryGetPushRule.tryFromJson(pushrules) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Set<String> supportedVersions = {'v1.1', 'v1.2'};
|
static const Set<String> supportedVersions = {'v1.1', 'v1.2'};
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
|
extension TryGetPushRule on PushRuleSet {
|
||||||
|
static PushRuleSet tryFromJson(Map<String, dynamic> json) {
|
||||||
|
try {
|
||||||
|
return PushRuleSet.fromJson(json);
|
||||||
|
} catch (e, s) {
|
||||||
|
Logs().v('Malformed PushRuleSet', e, s);
|
||||||
|
}
|
||||||
|
return PushRuleSet.fromJson({});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue