edits and reactions in threads
This commit is contained in:
parent
09643a172f
commit
92e69b5f1e
|
|
@ -175,8 +175,8 @@ class Room {
|
|||
// This should be called from the client's sync handling
|
||||
// when a thread-related event is received
|
||||
|
||||
if (event.relationshipType == RelationshipTypes.thread &&
|
||||
event.relationshipEventId != null) {
|
||||
// if (event.relationshipType == RelationshipTypes.thread &&
|
||||
// event.relationshipEventId != null) {
|
||||
// Update thread metadata in database
|
||||
final root = await getEventById(event.relationshipEventId!);
|
||||
if (root == null) return;
|
||||
|
|
@ -191,7 +191,7 @@ class Room {
|
|||
client,
|
||||
);
|
||||
threads[event.relationshipEventId!] = (await client.database.getThread(id, event.relationshipEventId!, client))!;
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
/// Returns the [Event] for the given [typeKey] and optional [stateKey].
|
||||
|
|
|
|||
|
|
@ -491,6 +491,15 @@ class RoomTimeline extends Timeline {
|
|||
addAggregatedEvent(event);
|
||||
}
|
||||
|
||||
if (event.relationshipEventId != null &&
|
||||
(event.relationshipType == RelationshipTypes.edit ||
|
||||
event.relationshipType == RelationshipTypes.reaction ||
|
||||
event.relationshipType == RelationshipTypes.reference)) {
|
||||
final parentEventIndex =
|
||||
_findEvent(event_id: event.relationshipEventId);
|
||||
unawaited(room.handleThreadSync(events[parentEventIndex]));
|
||||
}
|
||||
|
||||
// Handle redaction events
|
||||
if (event.type == EventTypes.Redaction) {
|
||||
final index = _findEvent(event_id: event.redacts);
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ class Thread {
|
|||
room.id,
|
||||
rootEvent.eventId,
|
||||
'm.thread',
|
||||
recurse: true,
|
||||
)
|
||||
.timeout(timeout);
|
||||
final matrixEvent = result.chunk.firstOrNull;
|
||||
|
|
@ -172,14 +173,17 @@ class Thread {
|
|||
final resp = await client.getEventContext(
|
||||
room.id, eventId,
|
||||
limit: Room.defaultHistoryCount,
|
||||
|
||||
// filter: jsonEncode(StateFilter(lazyLoadMembers: true).toJson()),
|
||||
);
|
||||
|
||||
|
||||
|
||||
final events = [
|
||||
if (resp.eventsAfter != null) ...resp.eventsAfter!.reversed,
|
||||
if (resp.event != null) resp.event!,
|
||||
if (resp.eventsBefore != null) ...resp.eventsBefore!,
|
||||
].map((e) => Event.fromMatrixEvent(e, room)).toList();
|
||||
].map((e) => Event.fromMatrixEvent(e, room)).where((e) => e.relationshipType == RelationshipTypes.thread && e.relationshipEventId == rootEvent.eventId).toList();
|
||||
|
||||
// Try again to decrypt encrypted events but don't update the database.
|
||||
if (room.encrypted && client.encryptionEnabled) {
|
||||
|
|
@ -403,10 +407,9 @@ class Thread {
|
|||
throw 'Tried to request history without a prev_batch token';
|
||||
}
|
||||
|
||||
final resp = await client.getRelatingEventsWithRelType(
|
||||
final resp = await client.getRelatingEvents(
|
||||
room.id,
|
||||
rootEvent.eventId,
|
||||
RelationshipTypes.thread,
|
||||
from: prev_batch,
|
||||
limit: historyCount,
|
||||
dir: direction,
|
||||
|
|
|
|||
|
|
@ -73,11 +73,15 @@ class ThreadTimeline extends Timeline {
|
|||
try {
|
||||
if (event.roomId != thread.room.id) return;
|
||||
// Ignore events outside of this thread
|
||||
if (event.relationshipType != RelationshipTypes.thread ||
|
||||
if (event.relationshipType == RelationshipTypes.thread &&
|
||||
event.relationshipEventId != thread.rootEvent.eventId) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.relationshipType == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (type != EventUpdateType.timeline && type != EventUpdateType.history) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -160,10 +164,9 @@ class ThreadTimeline extends Timeline {
|
|||
filter ??= StateFilter(lazyLoadMembers: true);
|
||||
filter.lazyLoadMembers ??= true;
|
||||
|
||||
final resp = await thread.client.getRelatingEventsWithRelType(
|
||||
final resp = await thread.client.getRelatingEvents(
|
||||
thread.room.id,
|
||||
thread.rootEvent.eventId,
|
||||
RelationshipTypes.thread,
|
||||
dir: direction,
|
||||
from: direction == Direction.b ? chunk.prevBatch : chunk.nextBatch,
|
||||
limit: historyCount,
|
||||
|
|
@ -255,6 +258,11 @@ class ThreadTimeline extends Timeline {
|
|||
if (onUpdate != null) {
|
||||
onUpdate!();
|
||||
}
|
||||
|
||||
for (final e in events) {
|
||||
addAggregatedEvent(e);
|
||||
}
|
||||
|
||||
return resp.chunk.length;
|
||||
}
|
||||
|
||||
|
|
@ -337,9 +345,13 @@ class ThreadTimeline extends Timeline {
|
|||
void addAggregatedEvent(Event event) {
|
||||
final relationshipType = event.relationshipType;
|
||||
final relationshipEventId = event.relationshipEventId;
|
||||
if (relationshipType == null || relationshipEventId == null) {
|
||||
if (relationshipType == null ||
|
||||
relationshipType == RelationshipTypes.thread ||
|
||||
relationshipEventId == null) {
|
||||
return;
|
||||
}
|
||||
// Logs().w(
|
||||
// 'Adding aggregated event ${event.type} ${event.eventId} to $relationshipEventId ($relationshipType)');
|
||||
final e = (aggregatedEvents[relationshipEventId] ??=
|
||||
<String, Set<Event>>{})[relationshipType] ??= <Event>{};
|
||||
_removeEventFromSet(e, event);
|
||||
|
|
|
|||
Loading…
Reference in New Issue