Skip to content

Commit 4e3e99b

Browse files
committed
msglist: Handle updated events in MessageListView (#118).
Processes an UpdateMessageEvent and hands it off to the MessageListView to update, if the message is visible in the MessageListView. This completes the changes required for issue #118.
1 parent 43236f8 commit 4e3e99b

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/model/message_list.dart

+25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/foundation.dart';
22

3+
import '../api/model/events.dart';
34
import '../api/model/model.dart';
45
import '../api/route/messages.dart';
56
import 'content.dart';
@@ -86,6 +87,30 @@ class MessageListView extends ChangeNotifier {
8687
notifyListeners();
8788
}
8889

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+
89114
/// Called when the app is reassembled during debugging, e.g. for hot reload.
90115
///
91116
/// This will redo from scratch any computations we can, such as parsing

lib/model/store.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,9 @@ class PerAccountStore extends ChangeNotifier {
272272
}
273273
} else if (event is UpdateMessageEvent) {
274274
assert(debugLog("server event: update_message ${event.messageId}"));
275-
// TODO handle
275+
for (final view in _messageListViews) {
276+
view.maybeUpdateMessage(event);
277+
}
276278
} else if (event is DeleteMessageEvent) {
277279
assert(debugLog("server event: delete_message ${event.messageIds}"));
278280
// TODO handle

0 commit comments

Comments
 (0)