[Timeline] Fix event state change.

This commit is contained in:
Christian 2019-06-26 17:03:15 +00:00 committed by Marcel
parent 7e753d4d0b
commit 2d466c796b
3 changed files with 11 additions and 9 deletions

View file

@ -37,8 +37,6 @@ class Timeline {
final onTimelineUpdateCallback onUpdate; final onTimelineUpdateCallback onUpdate;
final onTimelineInsertCallback onInsert; final onTimelineInsertCallback onInsert;
Set<String> waitToReplace = {};
StreamSubscription<EventUpdate> sub; StreamSubscription<EventUpdate> sub;
Timeline({this.room, this.events, this.onUpdate, this.onInsert}) { Timeline({this.room, this.events, this.onUpdate, this.onInsert}) {
@ -52,20 +50,23 @@ class Timeline {
// Is this event already in the timeline? // Is this event already in the timeline?
if (eventUpdate.content["status"] == 1 || if (eventUpdate.content["status"] == 1 ||
eventUpdate.content["status"] == -1 || eventUpdate.content["status"] == -1 ||
waitToReplace.contains(eventUpdate.content["id"])) { (eventUpdate.content.containsKey("unsigned") &&
eventUpdate.content["unsigned"]["transaction_id"] is String)) {
int i; int i;
for (i = 0; i < events.length; i++) { for (i = 0; i < events.length; i++) {
if (events[i].content.containsKey("txid") && if (events[i].content.containsKey("txid") &&
events[i].content["txid"] == events[i].content["txid"] ==
eventUpdate.content["content"]["txid"] || eventUpdate.content["content"]["txid"] ||
events[i].id == eventUpdate.content["id"]) break; events[i].id == eventUpdate.content["id"] ||
(eventUpdate.content.containsKey("unsigned") &&
eventUpdate.content["unsigned"]["transaction_id"]
is String &&
events[i].content["txid"] ==
eventUpdate.content["unsigned"]["transaction_id"]))
break;
} }
if (i < events.length) { if (i < events.length) {
events[i] = Event.fromJson(eventUpdate.content, room); events[i] = Event.fromJson(eventUpdate.content, room);
if (eventUpdate.content["content"]["txid"] is String)
waitToReplace.add(eventUpdate.content["id"]);
else
waitToReplace.remove(eventUpdate.content["id"]);
} }
} else { } else {
if (!eventUpdate.content.containsKey("id")) if (!eventUpdate.content.containsKey("id"))

View file

@ -36,7 +36,7 @@ class EventUpdate {
final String eventType; final String eventType;
// The json payload of the content of this event. // The json payload of the content of this event.
final dynamic content; final Map<String, dynamic> content;
EventUpdate({this.eventType, this.roomID, this.type, this.content}); EventUpdate({this.eventType, this.roomID, this.type, this.content});
} }

View file

@ -115,6 +115,7 @@ void main() {
"sender": "@alice:example.com", "sender": "@alice:example.com",
"status": 2, "status": 2,
"id": "42", "id": "42",
"unsigned": {"transaction_id": "1234"},
"origin_server_ts": DateTime.now().millisecondsSinceEpoch "origin_server_ts": DateTime.now().millisecondsSinceEpoch
})); }));