Remove flutter chat #26

Manually merged
Henry-Hiles merged 108 commits from remove-flutter-chat into main 2026-05-22 15:26:28 -04:00
4 changed files with 17 additions and 25 deletions
Showing only changes of commit 46d7ec4202 - Show all commits

fix avatar parsing

Henry Hiles 2026-05-18 10:25:13 -04:00
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs

View file

@ -1,8 +1,6 @@
import "package:collection/collection.dart"; import "package:collection/collection.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/helpers/extensions/mxc_to_https.dart";
import "package:nexus/models/read_receipt.dart"; import "package:nexus/models/read_receipt.dart";
import "package:nexus/models/room.dart"; import "package:nexus/models/room.dart";
@ -15,13 +13,6 @@ class RoomsController extends Notifier<IMap<String, Room>> {
ISet<String> leftRooms, { ISet<String> leftRooms, {
bool addToNewEvents = true, bool addToNewEvents = true,
}) { }) {
final homeserver =
ref.watch(
ClientStateController.provider.select(
(value) => value?.homeserverUrl,
),
) ??
"";
final merged = rooms.entries.fold(state, (acc, entry) { final merged = rooms.entries.fold(state, (acc, entry) {
final roomId = entry.key; final roomId = entry.key;
final incoming = entry.value; final incoming = entry.value;
@ -36,13 +27,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
roomId, roomId,
existing?.copyWith( existing?.copyWith(
hasMore: incoming.hasMore, hasMore: incoming.hasMore,
metadata: metadata: incoming.metadata ?? existing.metadata,
incoming.metadata?.copyWith(
avatar:
incoming.metadata?.avatar?.mxcToHttps(homeserver) ??
existing.metadata?.avatar,
) ??
existing.metadata,
events: events!, events: events!,
state: incoming.state.entries.fold( state: incoming.state.entries.fold(
existing.state, existing.state,
@ -72,11 +57,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
), ),
), ),
) ?? ) ??
incoming.copyWith( incoming,
metadata: incoming.metadata?.copyWith(
avatar: incoming.metadata?.avatar?.mxcToHttps(homeserver),
),
),
); );
}); });
@ -84,6 +65,7 @@ class RoomsController extends Notifier<IMap<String, Room>> {
merged, merged,
(acc, roomId) => acc.remove(roomId), (acc, roomId) => acc.remove(roomId),
); );
state = prunedList; state = prunedList;
} }

View file

@ -21,7 +21,7 @@ class UserController extends AsyncNotifier<MembershipContent> {
), ),
); );
if (member is MembershipContent) { if (member?.content is MembershipContent) {
return member!.content as MembershipContent; return member!.content as MembershipContent;
} }

View file

@ -2,8 +2,10 @@ import "package:color_hash/color_hash.dart";
import "package:cross_cache/cross_cache.dart"; import "package:cross_cache/cross_cache.dart";
import "package:flutter/material.dart"; import "package:flutter/material.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/cross_cache_controller.dart"; import "package:nexus/controllers/cross_cache_controller.dart";
import "package:nexus/helpers/extensions/get_headers.dart"; import "package:nexus/helpers/extensions/get_headers.dart";
import "package:nexus/helpers/extensions/mxc_to_https.dart";
class AvatarOrHash extends ConsumerWidget { class AvatarOrHash extends ConsumerWidget {
final Uri? avatar; final Uri? avatar;
@ -28,6 +30,14 @@ class AvatarOrHash extends ConsumerWidget {
color: ColorHash(title).color, color: ColorHash(title).color,
child: Center(child: Text(title.isEmpty ? "" : title[0])), child: Center(child: Text(title.isEmpty ? "" : title[0])),
); );
final parsedAvatar = avatar?.mxcToHttps(
ref.watch(
ClientStateController.provider.select(
(value) => value?.homeserverUrl,
),
) ??
"",
);
return SizedBox( return SizedBox(
width: height, width: height,
height: height, height: height,
@ -42,11 +52,11 @@ class AvatarOrHash extends ConsumerWidget {
child: SizedBox( child: SizedBox(
width: height, width: height,
height: height, height: height,
child: avatar == null child: parsedAvatar == null
? fallback ?? box ? fallback ?? box
: Image( : Image(
image: CachedNetworkImage( image: CachedNetworkImage(
avatar.toString(), parsedAvatar.toString(),
ref.watch(CrossCacheController.provider), ref.watch(CrossCacheController.provider),
headers: ref.headers, headers: ref.headers,
), ),

View file

@ -304,7 +304,7 @@ class RoomChat extends HookConsumerWidget {
children: [ children: [
Positioned.fill( Positioned.fill(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8), padding: EdgeInsets.symmetric(horizontal: 12),
child: switch (ref.watch(controllerProvider)) { child: switch (ref.watch(controllerProvider)) {
AsyncData(:final value) || AsyncData(:final value) ||
AsyncLoading(:final value?) => CustomScrollView( AsyncLoading(:final value?) => CustomScrollView(