forked from Henry-Hiles/nexus
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?> {
|
class CurrentRoomController extends AsyncNotifier<FullRoom?> {
|
||||||
@override
|
@override
|
||||||
Future<FullRoom?> build() async => (await ref.watch(
|
Future<FullRoom?> build() async {
|
||||||
SpacesController.provider.future,
|
final spaces = await ref.watch(SpacesController.provider.future);
|
||||||
))[0].children[0].roomData.fullRoom;
|
|
||||||
|
if (spaces.isEmpty || spaces[0].children.isEmpty) return null;
|
||||||
|
return spaces[0].children[0].roomData.fullRoom;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> set(FullRoom room) async {
|
Future<void> set(FullRoom room) async {
|
||||||
await future;
|
await future;
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
}).cancel,
|
}).cancel,
|
||||||
);
|
);
|
||||||
return InMemoryChatController(
|
return InMemoryChatController(
|
||||||
messages: {
|
messages: await response.chunk.toMessages(room),
|
||||||
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(),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,12 +56,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
final response = await ref
|
final response = await ref
|
||||||
.watch(EventsController.provider(room).notifier)
|
.watch(EventsController.provider(room).notifier)
|
||||||
.prev();
|
.prev();
|
||||||
|
|
||||||
await controller.insertAllMessages(
|
await controller.insertAllMessages(
|
||||||
(await Future.wait(
|
await response.chunk.toMessages(room),
|
||||||
response.chunk.map(
|
|
||||||
(event) => Event.fromMatrixEvent(event, room).toMessage(),
|
|
||||||
),
|
|
||||||
)).nonNulls.toList().reversed.toList(),
|
|
||||||
index: 0,
|
index: 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,9 @@ extension ToMessage on Event {
|
||||||
? originServerTs
|
? originServerTs
|
||||||
: null;
|
: null;
|
||||||
final body = newContent?["body"] as String? ?? this.body;
|
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;
|
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();
|
if (replyMessage == null) return SizedBox.shrink();
|
||||||
|
|
||||||
// Black magic to limit reply preview length
|
// Black magic to limit reply preview length
|
||||||
final replyText = message is TextMessage
|
final smallerText = message is TextMessage
|
||||||
? replyMessage.text.substring(
|
? replyMessage.text.substring(
|
||||||
0,
|
0,
|
||||||
min(
|
min(
|
||||||
max(
|
max(
|
||||||
min(
|
max(
|
||||||
max(
|
(message as TextMessage).text.length - 20,
|
||||||
(message as TextMessage).text.length - 20,
|
message.metadata?["displayName"].length,
|
||||||
message.metadata?["displayName"].length,
|
|
||||||
),
|
|
||||||
replyMessage.text.length,
|
|
||||||
),
|
),
|
||||||
5,
|
5,
|
||||||
),
|
),
|
||||||
replyMessage.text.length,
|
replyMessage.text.length,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
: replyMessage.text;
|
: null;
|
||||||
|
final replyText = (smallerText == null)
|
||||||
|
? replyMessage.text
|
||||||
|
: "$smallerText...";
|
||||||
|
|
||||||
return InkWell(
|
return InkWell(
|
||||||
|
// TODO: Scroll to original message
|
||||||
onTap: () => showAboutDialog(context: context),
|
onTap: () => showAboutDialog(context: context),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue