Fixes for reply handling
This commit is contained in:
parent
8d0eafae8a
commit
00ab2676b2
4 changed files with 34 additions and 25 deletions
|
|
@ -5,9 +5,12 @@ import "package:nexus/models/full_room.dart";
|
|||
|
||||
class CurrentRoomController extends AsyncNotifier<FullRoom?> {
|
||||
@override
|
||||
Future<FullRoom?> build() async => (await ref.watch(
|
||||
SpacesController.provider.future,
|
||||
))[0].children[0].roomData.fullRoom;
|
||||
Future<FullRoom?> build() async {
|
||||
final spaces = await ref.watch(SpacesController.provider.future);
|
||||
|
||||
if (spaces.isEmpty || spaces[0].children.isEmpty) return null;
|
||||
return spaces[0].children[0].roomData.fullRoom;
|
||||
}
|
||||
|
||||
Future<void> set(FullRoom room) async {
|
||||
await future;
|
||||
|
|
|
|||
|
|
@ -33,14 +33,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
}).cancel,
|
||||
);
|
||||
return InMemoryChatController(
|
||||
messages: {
|
||||
for (var msg in (await Future.wait(
|
||||
response.chunk.map(
|
||||
(event) => Event.fromMatrixEvent(event, room).toMessage(),
|
||||
),
|
||||
)).nonNulls.toList().reversed.toList())
|
||||
msg.id: msg,
|
||||
}.values.toList(),
|
||||
messages: await response.chunk.toMessages(room),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -63,12 +56,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
|||
final response = await ref
|
||||
.watch(EventsController.provider(room).notifier)
|
||||
.prev();
|
||||
|
||||
await controller.insertAllMessages(
|
||||
(await Future.wait(
|
||||
response.chunk.map(
|
||||
(event) => Event.fromMatrixEvent(event, room).toMessage(),
|
||||
),
|
||||
)).nonNulls.toList().reversed.toList(),
|
||||
await response.chunk.toMessages(room),
|
||||
index: 0,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,9 @@ extension ToMessage on Event {
|
|||
? originServerTs
|
||||
: null;
|
||||
final body = newContent?["body"] as String? ?? this.body;
|
||||
final eventId = relationshipEventId ?? this.eventId;
|
||||
final eventId = editedAt == null
|
||||
? this.eventId
|
||||
: relationshipEventId ?? this.eventId;
|
||||
|
||||
if (redacted) return null;
|
||||
|
||||
|
|
@ -140,3 +142,15 @@ extension ToTheme on ColorScheme {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
extension ToMessages on List<MatrixEvent> {
|
||||
Future<List<Message>> toMessages(Room room) async {
|
||||
final messages = await Future.wait(
|
||||
map((event) => Event.fromMatrixEvent(event, room).toMessage()),
|
||||
);
|
||||
|
||||
return {
|
||||
for (var msg in messages.nonNulls.toList().reversed.toList()) msg.id: msg,
|
||||
}.values.toList();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,25 +32,27 @@ class TopWidget extends ConsumerWidget {
|
|||
if (replyMessage == null) return SizedBox.shrink();
|
||||
|
||||
// Black magic to limit reply preview length
|
||||
final replyText = message is TextMessage
|
||||
final smallerText = message is TextMessage
|
||||
? replyMessage.text.substring(
|
||||
0,
|
||||
min(
|
||||
max(
|
||||
min(
|
||||
max(
|
||||
(message as TextMessage).text.length - 20,
|
||||
message.metadata?["displayName"].length,
|
||||
),
|
||||
replyMessage.text.length,
|
||||
max(
|
||||
(message as TextMessage).text.length - 20,
|
||||
message.metadata?["displayName"].length,
|
||||
),
|
||||
5,
|
||||
),
|
||||
replyMessage.text.length,
|
||||
),
|
||||
)
|
||||
: replyMessage.text;
|
||||
: null;
|
||||
final replyText = (smallerText == null)
|
||||
? replyMessage.text
|
||||
: "$smallerText...";
|
||||
|
||||
return InkWell(
|
||||
// TODO: Scroll to original message
|
||||
onTap: () => showAboutDialog(context: context),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue