wait for metadata to come in on notif's rooms before sending them

This commit is contained in:
Henry Hiles 2026-09-23 11:15:04 -04:00
commit 5d994bf2bb
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs

View file

@ -1,3 +1,4 @@
import "dart:async";
import "dart:convert"; import "dart:convert";
import "dart:io"; import "dart:io";
@ -78,10 +79,29 @@ class UnifiedPushController extends AsyncNotifier<bool> {
return; return;
} }
final room = ref.read( final provider = RoomsController.provider.select(
RoomsController.provider.select((rooms) => rooms[event.roomId]), (rooms) => rooms[event.roomId],
); );
if (ref.read(provider)?.metadata == null) {
final completer = Completer<void>();
final subscription = ref.listen(provider, (previous, next) {
if (next?.metadata != null && !completer.isCompleted) {
completer.complete();
}
}, fireImmediately: true);
try {
await completer.future.timeout(.new(seconds: 10));
} on TimeoutException {
// metadata didn't show up in time
} finally {
subscription.close();
}
}
final room = ref.read(provider);
final avatar = room?.metadata?.avatar; final avatar = room?.metadata?.avatar;
final icon = avatar == null final icon = avatar == null
? null ? null