From 401b527714cfb21ebfd670cee9296c8f8327fa11 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Fri, 23 Oct 2026 20:05:23 -0400 Subject: [PATCH] ignore invalid account data --- lib/controllers/account_data.dart | 16 +++++++++++----- lib/models/account_data.dart | 19 ++----------------- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/lib/controllers/account_data.dart b/lib/controllers/account_data.dart index c595565..551c0cc 100644 --- a/lib/controllers/account_data.dart +++ b/lib/controllers/account_data.dart @@ -1,6 +1,7 @@ import "dart:convert"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; +import "package:flutter/foundation.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:nexus/models/account_data.dart"; @@ -9,11 +10,16 @@ class AccountDataController extends Notifier { AccountData build() => .new(); void update(IMap> newAccountData) => - state = .fromJson({ - ...json.decode(json.encode(state.toJson())), - ...newAccountData - .map((key, value) => MapEntry(key, value["content"])) - .unlock, + state = newAccountData.entries.fold(state, (data, entry) { + try { + return .fromJson({ + ...json.decode(json.encode(data.toJson())), + entry.key: entry.value["content"], + }); + } catch (error) { + debugPrint("Ignoring invalid ${entry.key} account data: $error"); + return data; + } }); static final provider = NotifierProvider( diff --git a/lib/models/account_data.dart b/lib/models/account_data.dart index f4dee1a..2e21937 100644 --- a/lib/models/account_data.dart +++ b/lib/models/account_data.dart @@ -18,15 +18,9 @@ class const AccountData({ final RecentEmojiData recentEmoji = const RecentEmojiData(), /// Room image packs the user has enabled everywhere - @JsonKey( - name: AccountData.imagePackRoomsKey, - fromJson: ImagePackRooms.tryFromJson, - ) + @JsonKey(name: AccountData.imagePackRoomsKey) final ImagePackRooms? imagePackRooms, - @JsonKey( - name: AccountData.legacyImagePackRoomsKey, - fromJson: ImagePackRooms.tryFromJson, - ) + @JsonKey(name: AccountData.legacyImagePackRoomsKey) final ImagePackRooms? legacyImagePackRooms, }) with _$AccountData { static const invitePermissionConfigKey = "m.invite_permission_config"; @@ -59,15 +53,6 @@ class const ImagePackRooms({ /// empty) object final IMap>> rooms = const .empty(), }) with _$ImagePackRooms { - static ImagePackRooms? tryFromJson(Map? json) { - if (json == null) return null; - try { - return .fromJson(json); - } catch (_) { - return null; - } - } - Map toJson() => _$ImagePackRoomsToJson(this); factory ImagePackRooms.fromJson(Map json) =>