|
1 | 1 | import '../api/model/events.dart';
|
2 | 2 | import '../api/model/model.dart';
|
| 3 | +import '../log.dart'; |
3 | 4 | import 'message_list.dart';
|
4 | 5 |
|
5 | 6 | /// The portion of [PerAccountStore] for messages and message lists.
|
@@ -95,8 +96,7 @@ class MessageStoreImpl with MessageStore {
|
95 | 96 | void handleUpdateMessageEvent(UpdateMessageEvent event) {
|
96 | 97 | _handleUpdateMessageEventTimestamp(event);
|
97 | 98 | _handleUpdateMessageEventContent(event);
|
98 |
| - // TODO(#150): Handle message moves. The views' recipient headers |
99 |
| - // may need updating, and consequently showSender too. |
| 99 | + _handleUpdateMessageEventMove(event); |
100 | 100 | for (final view in _messageListViews) {
|
101 | 101 | view.notifyListenersIfAnyMessagePresent(event.messageIds);
|
102 | 102 | }
|
@@ -138,6 +138,36 @@ class MessageStoreImpl with MessageStore {
|
138 | 138 | }
|
139 | 139 | }
|
140 | 140 |
|
| 141 | + void _handleUpdateMessageEventMove(UpdateMessageEvent event) { |
| 142 | + if (event.origTopic == null) { |
| 143 | + // There was no move. |
| 144 | + assert(() { |
| 145 | + if (event.newStreamId != null && event.origStreamId != null |
| 146 | + && event.newStreamId != event.origStreamId) { |
| 147 | + // This should be impossible; `orig_subject` (aka origTopic) is |
| 148 | + // documented to be present when either the stream or topic changed. |
| 149 | + debugLog('Malformed UpdateMessageEvent: stream move but no origTopic'); // TODO(log) |
| 150 | + } |
| 151 | + return true; |
| 152 | + }()); |
| 153 | + return; |
| 154 | + } |
| 155 | + |
| 156 | + if (event.newTopic == null) { |
| 157 | + assert(debugLog('Malformed UpdateMessageEvent: move but no topic')); // TODO(log) |
| 158 | + return; |
| 159 | + } |
| 160 | + if (event.origStreamId == null) { |
| 161 | + assert(debugLog('Malformed UpdateMessageEvent: move but no origStreamId')); // TODO(log) |
| 162 | + return; |
| 163 | + } |
| 164 | + |
| 165 | + // final newStreamId = event.newStreamId; // null if topic-only move |
| 166 | + // final newTopic = event.newTopic!; |
| 167 | + // TODO(#150): Handle message moves. The views' recipient headers |
| 168 | + // may need updating, and consequently showSender too. |
| 169 | + } |
| 170 | + |
141 | 171 | void handleDeleteMessageEvent(DeleteMessageEvent event) {
|
142 | 172 | // TODO handle DeleteMessageEvent, particularly in MessageListView
|
143 | 173 | }
|
|
0 commit comments