Skip to content

Commit 24f324e

Browse files
committed
msglist: Handle updated events in MessageListView (zulip#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 zulip#118.
1 parent 43236f8 commit 24f324e

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

lib/model/message_list.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import 'package:drift/drift.dart';
12
import 'package:flutter/foundation.dart';
23

4+
import '../api/model/events.dart';
35
import '../api/model/model.dart';
46
import '../api/route/messages.dart';
57
import 'content.dart';
68
import 'narrow.dart';
79
import 'store.dart';
10+
import 'package:zulip/log.dart';
811

912
/// A view-model for a message list.
1013
///
@@ -86,6 +89,46 @@ class MessageListView extends ChangeNotifier {
8689
notifyListeners();
8790
}
8891

92+
Message applyChangesToMessage(UpdateMessageEvent event, Message oldMessage) {
93+
Map<String, dynamic> oldMessageJson = oldMessage.toJson();
94+
95+
//TODO: What other fields should be edited by the update event?
96+
oldMessageJson["content"] = event.renderedContent;
97+
oldMessageJson["lastEditTimestamp"] = event.editTimestamp;
98+
99+
return Message.fromJson(oldMessageJson);
100+
}
101+
102+
void maybeUpdateMessage(UpdateMessageEvent event) {
103+
int? oldIdx;
104+
105+
for (int i=0; i<messages.length; i++) {
106+
Message m = messages[i];
107+
108+
if (m.id == event.messageId) {
109+
oldIdx = i;
110+
break;
111+
}
112+
113+
}
114+
115+
if (oldIdx == null) {
116+
debugLog("Didn't find anything :(");
117+
return;
118+
}
119+
120+
Message oldMessage = messages[oldIdx];
121+
Message newMessage = applyChangesToMessage(event, oldMessage);
122+
123+
//TODO
124+
messages.replaceRange(oldIdx, oldIdx+1, [newMessage]);
125+
debugLog("Replacing!");
126+
127+
//wtf
128+
contents.replaceRange(oldIdx, oldIdx+1, [parseContent(newMessage.content)]);
129+
notifyListeners();
130+
}
131+
89132
/// Called when the app is reassembled during debugging, e.g. for hot reload.
90133
///
91134
/// This will redo from scratch any computations we can, such as parsing

lib/model/store.dart

Lines changed: 3 additions & 1 deletion
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)