ignore invalid account data

This commit is contained in:
Henry Hiles 2026-10-23 20:05:23 -04:00
commit 401b527714
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 13 additions and 22 deletions

View file

@ -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>(

View file

@ -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) =>