Skip to content

Commit d396e28

Browse files
committed
message: Identify moves by inequality new vs orig, not just non-nullity
This is NFC except in certain malformed cases: where either newStreamId is present and equals origStreamId, or newTopic is present and equals origTopic. The API docs say neither of those should happen. This version is useful because it brings this code closer to how it will look when we move this logic of "were the messages moved, and how" into the API parsing code so that other parts of the data model can reuse the results.
1 parent 00685c5 commit d396e28

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

lib/model/message.dart

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,14 @@ class MessageStoreImpl with MessageStore {
173173
// For reference, see: https://zulip.com/api/get-events#update_message
174174

175175
final origStreamId = event.origStreamId;
176-
final newStreamId = event.newStreamId; // null if topic-only move
177176
final origTopic = event.origTopic;
178-
final newTopic = event.newTopic;
179177
final propagateMode = event.propagateMode;
180178

181179
if (origTopic == null) {
182180
// There was no move.
183181
assert(() {
184-
if (newStreamId != null && origStreamId != null
185-
&& newStreamId != origStreamId) {
182+
if (event.newStreamId != null && origStreamId != null
183+
&& event.newStreamId != origStreamId) {
186184
// This should be impossible; `orig_subject` (aka origTopic) is
187185
// documented to be present when either the stream or topic changed.
188186
debugLog('Malformed UpdateMessageEvent: stream move but no origTopic'); // TODO(log)
@@ -192,12 +190,6 @@ class MessageStoreImpl with MessageStore {
192190
return;
193191
}
194192

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-
}
201193
if (origStreamId == null) {
202194
// The `stream_id` field (aka origStreamId) is documented to be present on moves.
203195
assert(debugLog('Malformed UpdateMessageEvent: move but no origStreamId')); // TODO(log)
@@ -209,8 +201,17 @@ class MessageStoreImpl with MessageStore {
209201
return;
210202
}
211203

212-
final wasResolveOrUnresolve = (newStreamId == null
213-
&& MessageEditState.topicMoveWasResolveOrUnresolve(origTopic, newTopic!));
204+
final newStreamId = event.newStreamId ?? origStreamId;
205+
final newTopic = event.newTopic ?? origTopic;
206+
if (newStreamId == origStreamId && newTopic == origTopic) {
207+
// If neither the channel nor topic name changed, nothing moved.
208+
// In that case `orig_subject` (aka origTopic) should have been null.
209+
assert(debugLog('Malformed UpdateMessageEvent: move but no newStreamId or newTopic')); // TODO(log)
210+
return;
211+
}
212+
213+
final wasResolveOrUnresolve = newStreamId == origStreamId
214+
&& MessageEditState.topicMoveWasResolveOrUnresolve(origTopic, newTopic);
214215

215216
for (final messageId in event.messageIds) {
216217
final message = messages[messageId];
@@ -221,14 +222,14 @@ class MessageStoreImpl with MessageStore {
221222
continue;
222223
}
223224

224-
if (newStreamId != null) {
225+
if (newStreamId != origStreamId) {
225226
message.streamId = newStreamId;
226227
// See [StreamMessage.displayRecipient] on why the invalidation is
227228
// needed.
228229
message.displayRecipient = null;
229230
}
230231

231-
if (newTopic != null) {
232+
if (newTopic != origTopic) {
232233
message.topic = newTopic;
233234
}
234235

@@ -241,9 +242,9 @@ class MessageStoreImpl with MessageStore {
241242
for (final view in _messageListViews) {
242243
view.messagesMoved(
243244
origStreamId: origStreamId,
244-
newStreamId: newStreamId ?? origStreamId,
245+
newStreamId: newStreamId,
245246
origTopic: origTopic,
246-
newTopic: newTopic ?? origTopic,
247+
newTopic: newTopic,
247248
messageIds: event.messageIds,
248249
propagateMode: propagateMode,
249250
);

0 commit comments

Comments
 (0)