ignore invalid account data
This commit is contained in:
parent
3754bc2feb
commit
401b527714
2 changed files with 13 additions and 22 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
import "dart:convert";
|
import "dart:convert";
|
||||||
|
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
|
import "package:flutter/foundation.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:nexus/models/account_data.dart";
|
import "package:nexus/models/account_data.dart";
|
||||||
|
|
||||||
|
|
@ -9,11 +10,16 @@ class AccountDataController extends Notifier<AccountData> {
|
||||||
AccountData build() => .new();
|
AccountData build() => .new();
|
||||||
|
|
||||||
void update(IMap<String, IMap<String, dynamic>> newAccountData) =>
|
void update(IMap<String, IMap<String, dynamic>> newAccountData) =>
|
||||||
state = .fromJson({
|
state = newAccountData.entries.fold(state, (data, entry) {
|
||||||
...json.decode(json.encode(state.toJson())),
|
try {
|
||||||
...newAccountData
|
return .fromJson({
|
||||||
.map((key, value) => MapEntry(key, value["content"]))
|
...json.decode(json.encode(data.toJson())),
|
||||||
.unlock,
|
entry.key: entry.value["content"],
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
debugPrint("Ignoring invalid ${entry.key} account data: $error");
|
||||||
|
return data;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
static final provider = NotifierProvider<AccountDataController, AccountData>(
|
static final provider = NotifierProvider<AccountDataController, AccountData>(
|
||||||
|
|
|
||||||
|
|
@ -18,15 +18,9 @@ class const AccountData({
|
||||||
final RecentEmojiData recentEmoji = const RecentEmojiData(),
|
final RecentEmojiData recentEmoji = const RecentEmojiData(),
|
||||||
|
|
||||||
/// Room image packs the user has enabled everywhere
|
/// Room image packs the user has enabled everywhere
|
||||||
@JsonKey(
|
@JsonKey(name: AccountData.imagePackRoomsKey)
|
||||||
name: AccountData.imagePackRoomsKey,
|
|
||||||
fromJson: ImagePackRooms.tryFromJson,
|
|
||||||
)
|
|
||||||
final ImagePackRooms? imagePackRooms,
|
final ImagePackRooms? imagePackRooms,
|
||||||
@JsonKey(
|
@JsonKey(name: AccountData.legacyImagePackRoomsKey)
|
||||||
name: AccountData.legacyImagePackRoomsKey,
|
|
||||||
fromJson: ImagePackRooms.tryFromJson,
|
|
||||||
)
|
|
||||||
final ImagePackRooms? legacyImagePackRooms,
|
final ImagePackRooms? legacyImagePackRooms,
|
||||||
}) with _$AccountData {
|
}) with _$AccountData {
|
||||||
static const invitePermissionConfigKey = "m.invite_permission_config";
|
static const invitePermissionConfigKey = "m.invite_permission_config";
|
||||||
|
|
@ -59,15 +53,6 @@ class const ImagePackRooms({
|
||||||
/// empty) object
|
/// empty) object
|
||||||
final IMap<String, IMap<String, Map<String, dynamic>>> rooms = const .empty(),
|
final IMap<String, IMap<String, Map<String, dynamic>>> rooms = const .empty(),
|
||||||
}) with _$ImagePackRooms {
|
}) with _$ImagePackRooms {
|
||||||
static ImagePackRooms? tryFromJson(Map<String, dynamic>? json) {
|
|
||||||
if (json == null) return null;
|
|
||||||
try {
|
|
||||||
return .fromJson(json);
|
|
||||||
} catch (_) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Object?> toJson() => _$ImagePackRoomsToJson(this);
|
Map<String, Object?> toJson() => _$ImagePackRoomsToJson(this);
|
||||||
|
|
||||||
factory ImagePackRooms.fromJson(Map<String, Object?> json) =>
|
factory ImagePackRooms.fromJson(Map<String, Object?> json) =>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue