forked from Henry-Hiles/nexus
working history loading
This commit is contained in:
parent
c2214fcc44
commit
520fa0ccdb
3 changed files with 20 additions and 23 deletions
|
|
@ -10,7 +10,6 @@ import "package:nexus/controllers/rooms_controller.dart";
|
||||||
import "package:nexus/controllers/selected_room_controller.dart";
|
import "package:nexus/controllers/selected_room_controller.dart";
|
||||||
import "package:nexus/helpers/extensions/event_to_message.dart";
|
import "package:nexus/helpers/extensions/event_to_message.dart";
|
||||||
import "package:nexus/helpers/extensions/list_to_messages.dart";
|
import "package:nexus/helpers/extensions/list_to_messages.dart";
|
||||||
import "package:nexus/models/event.dart";
|
|
||||||
import "package:nexus/models/requests/get_room_state_request.dart";
|
import "package:nexus/models/requests/get_room_state_request.dart";
|
||||||
import "package:nexus/models/requests/paginate_request.dart";
|
import "package:nexus/models/requests/paginate_request.dart";
|
||||||
import "package:nexus/models/requests/redact_event_request.dart";
|
import "package:nexus/models/requests/redact_event_request.dart";
|
||||||
|
|
@ -153,20 +152,17 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
const ISet.empty(),
|
const ISet.empty(),
|
||||||
);
|
);
|
||||||
|
|
||||||
final existingIds = controller.messages.map((m) => m.id).toSet();
|
final messages = await response.events.reversed.toMessages(ref);
|
||||||
|
await controller.insertAllMessages(
|
||||||
final messages = await response.events
|
messages
|
||||||
.where((event) => !existingIds.contains(event.eventId))
|
.where(
|
||||||
.fold(<String, Event>{}, (acc, event) {
|
(newMessage) => !controller.messages.any(
|
||||||
acc[event.eventId] =
|
(message) => message.id == newMessage.id,
|
||||||
event; // overwrites duplicates in response.events
|
),
|
||||||
return acc;
|
)
|
||||||
})
|
.toList(),
|
||||||
.values
|
index: 0,
|
||||||
.toIList()
|
);
|
||||||
.reversed
|
|
||||||
.toMessages(ref);
|
|
||||||
await controller.insertAllMessages(messages, index: 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateMessage(Message message, Message newMessage) async =>
|
Future<void> updateMessage(Message message, Message newMessage) async =>
|
||||||
|
|
@ -181,12 +177,14 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
var taggedMessage = message;
|
var taggedMessage = message;
|
||||||
|
|
||||||
for (final tag in tags) {
|
for (final tag in tags) {
|
||||||
final escaped = RegExp.escape(tag.id); // TODO: Fix
|
final escaped = RegExp.escape(tag.id);
|
||||||
final pattern = RegExp(r"@+(" + escaped + r")(#[^#]*#)?");
|
final pattern = RegExp(r"@+(" + escaped + r")(#[^#]*#)?");
|
||||||
|
|
||||||
taggedMessage = taggedMessage.replaceAllMapped(
|
taggedMessage = taggedMessage.replaceAllMapped(
|
||||||
pattern,
|
pattern,
|
||||||
(match) => match.group(1)!,
|
(match) => match.group(
|
||||||
|
1,
|
||||||
|
)!, // TODO: Return an HTML or Markdown link from here, not plaintext
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,6 +192,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
client.sendMessage(
|
client.sendMessage(
|
||||||
SendMessageRequest(
|
SendMessageRequest(
|
||||||
roomId: roomId,
|
roomId: roomId,
|
||||||
|
mentions: Mentions(), // TODO: Add parsed mentions
|
||||||
text: taggedMessage,
|
text: taggedMessage,
|
||||||
relation: relation == null
|
relation: relation == null
|
||||||
? null
|
? null
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ New Value: ${newValue is AsyncData ? newValue.value : newValue}
|
||||||
|
|
||||||
void showError(Object error, [StackTrace? stackTrace]) {
|
void showError(Object error, [StackTrace? stackTrace]) {
|
||||||
if (error.toString().contains("DioException")) return;
|
if (error.toString().contains("DioException")) return;
|
||||||
|
if (error.toString().contains("Invalid source")) return;
|
||||||
if (error.toString().contains("UTF-16")) return;
|
if (error.toString().contains("UTF-16")) return;
|
||||||
if (error.toString().contains("HTTP request failed")) return;
|
if (error.toString().contains("HTTP request failed")) return;
|
||||||
if (error.toString().contains("Invalid image data")) return;
|
if (error.toString().contains("Invalid image data")) return;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import "package:collection/collection.dart";
|
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_hooks/flutter_hooks.dart";
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
|
|
@ -66,11 +65,9 @@ class Sidebar extends HookConsumerWidget {
|
||||||
fallback: space.icon == null ? null : Icon(space.icon),
|
fallback: space.icon == null ? null : Icon(space.icon),
|
||||||
space.title,
|
space.title,
|
||||||
headers: {}, // TODO
|
headers: {}, // TODO
|
||||||
hasBadge:
|
hasBadge: space.children.any(
|
||||||
space.children.firstWhereOrNull(
|
(room) => room.metadata?.unreadMessages != 0,
|
||||||
(room) => room.metadata?.unreadMessages != 0,
|
),
|
||||||
) !=
|
|
||||||
null,
|
|
||||||
badgeNumber: space.children.fold(
|
badgeNumber: space.children.fold(
|
||||||
0,
|
0,
|
||||||
(previousValue, room) =>
|
(previousValue, room) =>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue