// Version: 1.0.0 | Created: 2026-04-02 // Synchronous MXC URI to HTTP URL resolution. // Avatars and thumbnails in the room list / sync service need a resolved HTTP // URL. The Matrix SDK's getDownloadUri() is async (checks authenticated media // support), but for avatar display we need a synchronous result. // // This helper builds the legacy v3 media URL which works on all homeservers. import 'package:matrix/matrix.dart'; /// Resolves an `mxc://` [Uri] to an HTTP download URL using the client's /// homeserver. Returns `null` if the URI is not an mxc scheme or the client /// has no homeserver set. /// /// This is synchronous — suitable for use in non-async model mapping. String? resolveMxcUrl(Client client, Uri? mxcUri) { if (mxcUri == null || !mxcUri.isScheme('mxc')) return null; final homeserver = client.homeserver; if (homeserver == null) return null; // Build the media download path per the Matrix spec. final serverName = mxcUri.host; final port = mxcUri.hasPort ? ':${mxcUri.port}' : ''; final mediaId = mxcUri.path; // includes leading / return homeserver .resolve('_matrix/media/v3/download/$serverName$port$mediaId') .toString(); }