Skip to content

Commit aba0992

Browse files
committed
remove metadata cache provider bump android bins
1 parent d76feaf commit aba0992

File tree

7 files changed

+41
-235
lines changed

7 files changed

+41
-235
lines changed
-31.1 KB
Binary file not shown.
-19.1 KB
Binary file not shown.
133 KB
Binary file not shown.

lib/config/providers/follows_provider.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,14 @@ class FollowsNotifier extends Notifier<FollowsState> {
113113
}
114114

115115
User? findFollowByPubkey(String pubkey) {
116-
return state.follows.where((user) => user.pubkey == pubkey).firstOrNull;
116+
// Normalize the input pubkey to hex for consistent comparison
117+
final hexPubkey = PubkeyFormatter(pubkey: pubkey).toHex();
118+
if (hexPubkey == null) return null;
119+
120+
return state.follows.where((user) {
121+
final userHexPubkey = PubkeyFormatter(pubkey: user.pubkey).toHex();
122+
return userHexPubkey == hexPubkey;
123+
}).firstOrNull;
117124
}
118125

119126
bool isFollowing(String pubkey) {

lib/config/providers/group_provider.dart

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import 'package:logging/logging.dart';
66
import 'package:whitenoise/config/providers/active_pubkey_provider.dart';
77
import 'package:whitenoise/config/providers/auth_provider.dart';
88
import 'package:whitenoise/config/providers/chat_provider.dart';
9+
import 'package:whitenoise/config/providers/follows_provider.dart';
910
import 'package:whitenoise/config/states/group_state.dart';
10-
import 'package:whitenoise/domain/models/user_model.dart';
11+
import 'package:whitenoise/domain/models/user_model.dart' as domain_user;
1112
import 'package:whitenoise/src/rust/api/error.dart' show ApiError;
1213
import 'package:whitenoise/src/rust/api/groups.dart';
1314
import 'package:whitenoise/src/rust/api/users.dart' as rust_users;
@@ -307,13 +308,27 @@ class GroupsNotifier extends Notifier<GroupsState> {
307308
_logger.info('GroupsProvider: Loaded ${memberPubkeys.length} members for group $groupId');
308309

309310
// Fetch metadata for each member and create User objects
310-
final List<User> members = [];
311+
final List<domain_user.User> members = [];
311312
for (final memberPubkey in memberPubkeys) {
312313
try {
313314
final npub = PubkeyFormatter(pubkey: memberPubkey).toNpub() ?? '';
315+
316+
// First try to get from follows (cached contacts)
317+
final followsNotifier = ref.read(followsProvider.notifier);
318+
final existingFollow = followsNotifier.findFollowByPubkey(memberPubkey);
319+
320+
if (existingFollow != null) {
321+
_logger.info('Found member $npub in follows cache');
322+
// Convert Rust User to domain User
323+
final domainUser = domain_user.User.fromMetadata(existingFollow.metadata, npub);
324+
members.add(domainUser);
325+
continue;
326+
}
327+
328+
// If not in follows, fetch directly from API
314329
try {
315330
final metadata = await rust_users.userMetadata(pubkey: memberPubkey);
316-
final user = User.fromMetadata(metadata, npub);
331+
final user = domain_user.User.fromMetadata(metadata, npub);
317332
members.add(user);
318333
} catch (metadataError) {
319334
// Log the full exception details with proper Whitenoise ApiError unpacking
@@ -326,7 +341,7 @@ class GroupsNotifier extends Notifier<GroupsState> {
326341
}
327342
_logger.warning(logMessage, metadataError);
328343
// Create a fallback user with minimal info
329-
final fallbackUser = User(
344+
final fallbackUser = domain_user.User(
330345
id: npub,
331346
displayName: 'Unknown User',
332347
nip05: '',
@@ -348,7 +363,7 @@ class GroupsNotifier extends Notifier<GroupsState> {
348363
}
349364
}
350365

351-
final updatedGroupMembers = Map<String, List<User>>.from(state.groupMembers ?? {});
366+
final updatedGroupMembers = Map<String, List<domain_user.User>>.from(state.groupMembers ?? {});
352367
updatedGroupMembers[groupId] = members;
353368

354369
state = state.copyWith(groupMembers: updatedGroupMembers);
@@ -385,14 +400,14 @@ class GroupsNotifier extends Notifier<GroupsState> {
385400
_logger.info('GroupsProvider: Loaded ${adminPubkeys.length} admins for group $groupId');
386401

387402
// Fetch metadata for each admin and create User objects
388-
final List<User> admins = [];
403+
final List<domain_user.User> admins = [];
389404
for (final adminPubkey in adminPubkeys) {
390405
try {
391406
final npub = PubkeyFormatter(pubkey: adminPubkey).toNpub() ?? '';
392407

393408
try {
394409
final metadata = await rust_users.userMetadata(pubkey: adminPubkey);
395-
final user = User.fromMetadata(metadata, npub);
410+
final user = domain_user.User.fromMetadata(metadata, npub);
396411
admins.add(user);
397412
} catch (metadataError) {
398413
// Log the full exception details with proper ApiError unpacking
@@ -405,7 +420,7 @@ class GroupsNotifier extends Notifier<GroupsState> {
405420
}
406421
_logger.warning(logMessage, metadataError);
407422
// Create a fallback user with minimal info
408-
final fallbackUser = User(
423+
final fallbackUser = domain_user.User(
409424
id: npub,
410425
displayName: 'Unknown User',
411426
nip05: '',
@@ -427,7 +442,7 @@ class GroupsNotifier extends Notifier<GroupsState> {
427442
}
428443
}
429444

430-
final updatedGroupAdmins = Map<String, List<User>>.from(state.groupAdmins ?? {});
445+
final updatedGroupAdmins = Map<String, List<domain_user.User>>.from(state.groupAdmins ?? {});
431446
updatedGroupAdmins[groupId] = admins;
432447

433448
state = state.copyWith(groupAdmins: updatedGroupAdmins);
@@ -710,11 +725,11 @@ class GroupsNotifier extends Notifier<GroupsState> {
710725
return groupInformation.groupType;
711726
}
712727

713-
List<User>? getGroupMembers(String groupId) {
728+
List<domain_user.User>? getGroupMembers(String groupId) {
714729
return state.groupMembers?[groupId];
715730
}
716731

717-
List<User>? getGroupAdmins(String groupId) {
732+
List<domain_user.User>? getGroupAdmins(String groupId) {
718733
return state.groupAdmins?[groupId];
719734
}
720735

@@ -1043,7 +1058,7 @@ final groupsProvider = NotifierProvider<GroupsNotifier, GroupsState>(
10431058
);
10441059

10451060
extension GroupMemberUtils on GroupsNotifier {
1046-
User? getOtherGroupMember(String? groupId) {
1061+
domain_user.User? getOtherGroupMember(String? groupId) {
10471062
if (groupId == null) return null;
10481063
final activePubkey = ref.read(activePubkeyProvider);
10491064
if (activePubkey == null || activePubkey.isEmpty) return null;

lib/config/providers/metadata_cache_provider.dart

Lines changed: 0 additions & 216 deletions
This file was deleted.

lib/utils/message_converter.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter_riverpod/flutter_riverpod.dart';
22
import 'package:whitenoise/config/providers/follows_provider.dart';
3-
import 'package:whitenoise/config/providers/metadata_cache_provider.dart';
3+
import 'package:whitenoise/config/providers/user_profile_data_provider.dart';
44
import 'package:whitenoise/domain/models/contact_model.dart';
55
import 'package:whitenoise/domain/models/message_model.dart';
66
import 'package:whitenoise/domain/models/user_model.dart';
@@ -526,10 +526,10 @@ class MessageConverter {
526526
);
527527
}
528528

529-
// If not found in contacts, try metadata cache with build-safe scheduling
529+
// If not found in contacts, fetch directly from API with build-safe scheduling
530530
return await Future.microtask(() async {
531-
final metadataCache = ref.read(metadataCacheProvider.notifier);
532-
final contactModel = await metadataCache.getContactModel(pubkey);
531+
final userProfileNotifier = ref.read(userProfileDataProvider.notifier);
532+
final contactModel = await userProfileNotifier.getUserProfileData(pubkey);
533533

534534
return User(
535535
id: pubkey,
@@ -558,10 +558,10 @@ class MessageConverter {
558558
) async {
559559
// Schedule metadata fetching in microtask to avoid build-time modifications
560560
return await Future.microtask(() async {
561-
final metadataCache = ref.read(metadataCacheProvider.notifier);
561+
final userProfileNotifier = ref.read(userProfileDataProvider.notifier);
562562
final userFutures = uniquePubkeys.map(
563563
(pubkey) =>
564-
metadataCache.getContactModel(pubkey).then((contact) => MapEntry(pubkey, contact)),
564+
userProfileNotifier.getUserProfileData(pubkey).then((contact) => MapEntry(pubkey, contact)),
565565
);
566566
final userResults = await Future.wait(userFutures);
567567
return Map<String, User>.fromEntries(

0 commit comments

Comments
 (0)