@@ -173,44 +173,23 @@ class MessageStoreImpl with MessageStore {
173
173
// For reference, see: https://zulip.com/api/get-events#update_message
174
174
175
175
final origStreamId = event.origStreamId;
176
- final newStreamId = event.newStreamId; // null if topic-only move
176
+ final newStreamId = event.newStreamId ?? origStreamId;
177
177
final origTopic = event.origTopic;
178
- final newTopic = event.newTopic;
178
+ final newTopic = event.newTopic ?? origTopic ;
179
179
final propagateMode = event.propagateMode;
180
180
181
- if (origTopic == null ) {
181
+ if (origTopic == newTopic && origStreamId == newStreamId) {
182
+ if (propagateMode != null ) {
183
+ throw FormatException (
184
+ 'UpdateMessageEvent: incoherent message-move fields; '
185
+ 'propagate_mode present but no new channel or topic' );
186
+ }
182
187
// There was no move.
183
- assert (() {
184
- if (newStreamId != null && origStreamId != null
185
- && newStreamId != origStreamId) {
186
- // This should be impossible; `orig_subject` (aka origTopic) is
187
- // documented to be present when either the stream or topic changed.
188
- debugLog ('Malformed UpdateMessageEvent: stream move but no origTopic' ); // TODO(log)
189
- }
190
- return true ;
191
- }());
192
- return ;
193
- }
194
-
195
- if (newStreamId == null && newTopic == null ) {
196
- // If neither the channel nor topic name changed, nothing moved.
197
- // In that case `orig_subject` (aka origTopic) should have been null.
198
- assert (debugLog ('Malformed UpdateMessageEvent: move but no newStreamId or newTopic' )); // TODO(log)
199
- return ;
200
- }
201
- if (origStreamId == null ) {
202
- // The `stream_id` field (aka origStreamId) is documented to be present on moves.
203
- assert (debugLog ('Malformed UpdateMessageEvent: move but no origStreamId' )); // TODO(log)
204
- return ;
205
- }
206
- if (propagateMode == null ) {
207
- // The `propagate_mode` field (aka propagateMode) is documented to be present on moves.
208
- assert (debugLog ('Malformed UpdateMessageEvent: move but no propagateMode' )); // TODO(log)
209
188
return ;
210
189
}
211
190
212
- final wasResolveOrUnresolve = newStreamId == null
213
- && MessageEditState .topicMoveWasResolveOrUnresolve (origTopic, newTopic! );
191
+ final wasResolveOrUnresolve = origStreamId == newStreamId
192
+ && MessageEditState .topicMoveWasResolveOrUnresolve (origTopic! , newTopic! );
214
193
215
194
for (final messageId in event.messageIds) {
216
195
final message = messages[messageId];
@@ -221,15 +200,15 @@ class MessageStoreImpl with MessageStore {
221
200
continue ;
222
201
}
223
202
224
- if (newStreamId != null ) {
225
- message.streamId = newStreamId;
203
+ if (origStreamId != newStreamId ) {
204
+ message.streamId = newStreamId! ;
226
205
// See [StreamMessage.displayRecipient] on why the invalidation is
227
206
// needed.
228
207
message.displayRecipient = null ;
229
208
}
230
209
231
- if (newTopic != null ) {
232
- message.topic = newTopic;
210
+ if (origTopic != newTopic ) {
211
+ message.topic = newTopic! ;
233
212
}
234
213
235
214
if (! wasResolveOrUnresolve
@@ -240,12 +219,12 @@ class MessageStoreImpl with MessageStore {
240
219
241
220
for (final view in _messageListViews) {
242
221
view.messagesMoved (
243
- origStreamId: origStreamId,
244
- newStreamId: newStreamId ?? origStreamId ,
245
- origTopic: origTopic,
246
- newTopic: newTopic ?? origTopic ,
222
+ origStreamId: origStreamId! ,
223
+ newStreamId: newStreamId! ,
224
+ origTopic: origTopic! ,
225
+ newTopic: newTopic! ,
247
226
messageIds: event.messageIds,
248
- propagateMode: propagateMode,
227
+ propagateMode: propagateMode! ,
249
228
);
250
229
}
251
230
}
0 commit comments