File tree 2 files changed +28
-1
lines changed
2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change 1
1
import 'package:flutter/foundation.dart' ;
2
2
3
+ import '../api/model/events.dart' ;
3
4
import '../api/model/model.dart' ;
4
5
import '../api/route/messages.dart' ;
5
6
import 'content.dart' ;
@@ -86,6 +87,30 @@ class MessageListView extends ChangeNotifier {
86
87
notifyListeners ();
87
88
}
88
89
90
+ Message applyChangesToMessage (UpdateMessageEvent event, Message oldMessage) {
91
+ Map <String , dynamic > oldMessageJson = oldMessage.toJson ();
92
+
93
+ //TODO: What other fields should be edited by the update event?
94
+ oldMessageJson["content" ] = event.renderedContent;
95
+ oldMessageJson["lastEditTimestamp" ] = event.editTimestamp;
96
+
97
+ return Message .fromJson (oldMessageJson);
98
+ }
99
+
100
+ void maybeUpdateMessage (UpdateMessageEvent event) {
101
+ int oldIdx = messages.indexWhere ((m) => m.id == event.messageId);
102
+ if (oldIdx == - 1 ) {
103
+ return ;
104
+ }
105
+
106
+ Message oldMessage = messages[oldIdx];
107
+ Message newMessage = applyChangesToMessage (event, oldMessage);
108
+
109
+ messages.replaceRange (oldIdx, oldIdx+ 1 , [newMessage]);
110
+ contents.replaceRange (oldIdx, oldIdx+ 1 , [parseContent (newMessage.content)]);
111
+ notifyListeners ();
112
+ }
113
+
89
114
/// Called when the app is reassembled during debugging, e.g. for hot reload.
90
115
///
91
116
/// This will redo from scratch any computations we can, such as parsing
Original file line number Diff line number Diff line change @@ -272,7 +272,9 @@ class PerAccountStore extends ChangeNotifier {
272
272
}
273
273
} else if (event is UpdateMessageEvent ) {
274
274
assert (debugLog ("server event: update_message ${event .messageId }" ));
275
- // TODO handle
275
+ for (final view in _messageListViews) {
276
+ view.maybeUpdateMessage (event);
277
+ }
276
278
} else if (event is DeleteMessageEvent ) {
277
279
assert (debugLog ("server event: delete_message ${event .messageIds }" ));
278
280
// TODO handle
You can’t perform that action at this time.
0 commit comments