Skip to content

Commit 9410969

Browse files
committed
api: Start using 'direct' for MessageType.
We still offer support for 'private', which gets converted to 'direct' as well when deserialized. Signed-off-by: Zixuan James Li <[email protected]>
1 parent 74de34c commit 9410969

File tree

7 files changed

+70
-30
lines changed

7 files changed

+70
-30
lines changed

lib/api/model/events.dart

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@ class DeleteMessageEvent extends Event {
707707

708708
final List<int> messageIds;
709709
// final int messageId; // Not present; we support the bulk_message_deletion capability
710+
@MessageTypeConverter()
710711
final MessageType messageType;
711712
final int? streamId;
712713
final String? topic;
@@ -735,10 +736,25 @@ class DeleteMessageEvent extends Event {
735736

736737
/// As in [DeleteMessageEvent.messageType]
737738
/// or [UpdateMessageFlagsMessageDetail.type].
738-
@JsonEnum(fieldRename: FieldRename.snake)
739+
@JsonEnum(alwaysCreate: true)
739740
enum MessageType {
740741
stream,
741-
private;
742+
direct;
743+
}
744+
745+
class MessageTypeConverter extends JsonConverter<MessageType, String> {
746+
const MessageTypeConverter();
747+
748+
@override
749+
MessageType fromJson(String json) {
750+
if (json == 'private') json = 'direct';
751+
return $enumDecode(_$MessageTypeEnumMap,json);
752+
}
753+
754+
@override
755+
String toJson(MessageType object) {
756+
return _$MessageTypeEnumMap[object]!;
757+
}
742758
}
743759

744760
/// A Zulip event of type `update_message_flags`.
@@ -820,6 +836,7 @@ class UpdateMessageFlagsRemoveEvent extends UpdateMessageFlagsEvent {
820836
/// As in [UpdateMessageFlagsRemoveEvent.messageDetails].
821837
@JsonSerializable(fieldRename: FieldRename.snake)
822838
class UpdateMessageFlagsMessageDetail {
839+
@MessageTypeConverter()
823840
final MessageType type;
824841
final bool? mentioned;
825842
final List<int>? userIds;
@@ -841,7 +858,7 @@ class UpdateMessageFlagsMessageDetail {
841858
case MessageType.stream:
842859
result.streamId as int;
843860
result.topic as String;
844-
case MessageType.private:
861+
case MessageType.direct:
845862
result.userIds as List<int>;
846863
}
847864
return result;

lib/api/model/events.g.dart

Lines changed: 10 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/model/narrow.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ class DmNarrow extends Narrow implements SendableNarrow {
204204
UpdateMessageFlagsMessageDetail detail, {
205205
required int selfUserId,
206206
}) {
207-
assert(detail.type == MessageType.private);
207+
assert(detail.type == MessageType.direct);
208208
return DmNarrow.withOtherUsers(detail.userIds!, selfUserId: selfUserId);
209209
}
210210

lib/model/unreads.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ class Unreads extends ChangeNotifier {
288288
final streamId = event.streamId!;
289289
final topic = event.topic!;
290290
_removeAllInStreamTopic(messageIdsSet, streamId, topic);
291-
case MessageType.private:
291+
case MessageType.direct:
292292
_slowRemoveAllInDms(messageIdsSet);
293293
}
294294

@@ -363,7 +363,7 @@ class Unreads extends ChangeNotifier {
363363
final topics = (newlyUnreadInStreams[detail.streamId!] ??= {});
364364
final messageIds = (topics[detail.topic!] ??= QueueList());
365365
messageIds.add(messageId);
366-
case MessageType.private:
366+
case MessageType.direct:
367367
final narrow = DmNarrow.ofUpdateMessageFlagsMessageDetail(selfUserId: selfUserId,
368368
detail);
369369
(newlyUnreadInDms[narrow] ??= QueueList())

test/api/model/events_test.dart

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,16 @@ void main() {
153153
})).throws<void>();
154154
});
155155

156-
test('update_message_flags/remove: require messageDetails in mark-as-unread', () {
156+
test('delete_message: private -> direct', () {
157+
check(DeleteMessageEvent.fromJson({
158+
'id': 1,
159+
'type': 'delete_message',
160+
'message_ids': [1, 2, 3],
161+
'message_type': 'private',
162+
})).has((e) => e.messageType, 'messageType').equals(MessageType.direct);
163+
});
164+
165+
group('update_message_flags/remove', () {
157166
final baseJson = {
158167
'id': 1,
159168
'type': 'update_message_flags',
@@ -162,14 +171,27 @@ void main() {
162171
'messages': [123],
163172
'all': false,
164173
};
165-
check(() => UpdateMessageFlagsRemoveEvent.fromJson(baseJson)).returnsNormally();
166-
check(() => UpdateMessageFlagsRemoveEvent.fromJson({
167-
...baseJson, 'flag': 'read',
168-
})).throws<void>();
169-
check(() => UpdateMessageFlagsRemoveEvent.fromJson({
170-
...baseJson,
171-
'flag': 'read',
172-
'message_details': {'123': {'type': 'private', 'mentioned': false, 'user_ids': [2]}},
173-
})).returnsNormally();
174+
final messageDetails = {'123': {'type': 'direct', 'mentioned': false, 'user_ids': [2]}};
175+
176+
test('require messageDetails in mark-as-unread', () {
177+
check(() => UpdateMessageFlagsRemoveEvent.fromJson(baseJson)).returnsNormally();
178+
check(() => UpdateMessageFlagsRemoveEvent.fromJson({
179+
...baseJson, 'flag': 'read',
180+
})).throws<void>();
181+
check(() => UpdateMessageFlagsRemoveEvent.fromJson({
182+
...baseJson,
183+
'flag': 'read',
184+
'message_details': messageDetails,
185+
})).returnsNormally();
186+
});
187+
188+
test('private -> direct', () {
189+
check(UpdateMessageFlagsRemoveEvent.fromJson({
190+
...baseJson,
191+
'flag': 'read',
192+
'message_details': messageDetails..['123']!['type'] = 'private',
193+
})).has((e) => e.messageDetails!.values.single.type, 'messageDetail.type')
194+
.equals(MessageType.direct);
195+
});
174196
});
175197
}

test/example_data.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ UpdateMessageFlagsRemoveEvent updateMessageFlagsRemoveEvent(
492492
userIds: null,
493493
),
494494
DmMessage() => UpdateMessageFlagsMessageDetail(
495-
type: MessageType.private,
495+
type: MessageType.direct,
496496
mentioned: mentioned,
497497
streamId: null,
498498
topic: null,

test/model/unreads_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ void main() {
449449
),
450450
DmMessage() => DeleteMessageEvent(
451451
id: 0,
452-
messageType: MessageType.private,
452+
messageType: MessageType.direct,
453453
messageIds: [message.id],
454454
streamId: null,
455455
topic: null,
@@ -488,7 +488,7 @@ void main() {
488488
model.handleDeleteMessageEvent(DeleteMessageEvent(
489489
id: 0,
490490
messageIds: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
491-
messageType: MessageType.private,
491+
messageType: MessageType.direct,
492492
streamId: null,
493493
topic: null,
494494
));
@@ -523,7 +523,7 @@ void main() {
523523
model.handleDeleteMessageEvent(DeleteMessageEvent(
524524
id: 0,
525525
messageIds: [message.id],
526-
messageType: MessageType.private,
526+
messageType: MessageType.direct,
527527
streamId: null,
528528
topic: null,
529529
));
@@ -968,7 +968,7 @@ void main() {
968968
),
969969
// message 2 and 3 have their details missing
970970
message4.id: UpdateMessageFlagsMessageDetail(
971-
type: MessageType.private,
971+
type: MessageType.direct,
972972
mentioned: false,
973973
streamId: null,
974974
topic: null,

0 commit comments

Comments
 (0)