|
| 1 | +import 'package:drift/drift.dart'; |
1 | 2 | import 'package:flutter/foundation.dart';
|
2 | 3 |
|
| 4 | +import '../api/model/events.dart'; |
3 | 5 | import '../api/model/model.dart';
|
4 | 6 | import '../api/route/messages.dart';
|
5 | 7 | import 'content.dart';
|
6 | 8 | import 'narrow.dart';
|
7 | 9 | import 'store.dart';
|
| 10 | +import 'package:zulip/log.dart'; |
8 | 11 |
|
9 | 12 | /// A view-model for a message list.
|
10 | 13 | ///
|
@@ -86,6 +89,46 @@ class MessageListView extends ChangeNotifier {
|
86 | 89 | notifyListeners();
|
87 | 90 | }
|
88 | 91 |
|
| 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 | + |
89 | 132 | /// Called when the app is reassembled during debugging, e.g. for hot reload.
|
90 | 133 | ///
|
91 | 134 | /// This will redo from scratch any computations we can, such as parsing
|
|
0 commit comments