Skip to content

Commit e58ea8e

Browse files
committed
api: Add update_message_flags events
1 parent 744c1f8 commit e58ea8e

File tree

3 files changed

+171
-1
lines changed

3 files changed

+171
-1
lines changed

lib/api/model/events.dart

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ sealed class Event {
4040
case 'message': return MessageEvent.fromJson(json);
4141
case 'update_message': return UpdateMessageEvent.fromJson(json);
4242
case 'delete_message': return DeleteMessageEvent.fromJson(json);
43+
case 'update_message_flags':
44+
switch (json['op'] as String) {
45+
case 'add': return UpdateMessageFlagsAddEvent.fromJson(json);
46+
case 'remove': return UpdateMessageFlagsRemoveEvent.fromJson(json);
47+
default: return UnexpectedEvent.fromJson(json);
48+
}
4349
case 'reaction': return ReactionEvent.fromJson(json);
4450
case 'heartbeat': return HeartbeatEvent.fromJson(json);
4551
// TODO add many more event types
@@ -439,13 +445,103 @@ class DeleteMessageEvent extends Event {
439445
Map<String, dynamic> toJson() => _$DeleteMessageEventToJson(this);
440446
}
441447

442-
/// As in [DeleteMessageEvent.messageType].
448+
/// As in [DeleteMessageEvent.messageType]
449+
/// or [UpdateMessageFlagsMessageDetail.type].
443450
@JsonEnum(fieldRename: FieldRename.snake)
444451
enum MessageType {
445452
stream,
446453
private;
447454
}
448455

456+
/// A Zulip event of type `update_message_flags`.
457+
///
458+
/// For the corresponding API docs, see subclasses.
459+
abstract class UpdateMessageFlagsEvent extends Event {
460+
@override
461+
@JsonKey(includeToJson: true)
462+
String get type => 'update_message_flags';
463+
464+
String get op;
465+
466+
@JsonKey(unknownEnumValue: MessageFlag.unknown)
467+
final MessageFlag flag;
468+
final List<int> messages;
469+
final bool all;
470+
471+
UpdateMessageFlagsEvent({
472+
required super.id,
473+
required this.flag,
474+
required this.messages,
475+
required this.all,
476+
});
477+
}
478+
479+
/// An [UpdateMessageFlagsEvent] with op `add`: https://zulip.com/api/get-events#update_message_flags-add
480+
@JsonSerializable(fieldRename: FieldRename.snake)
481+
class UpdateMessageFlagsAddEvent extends UpdateMessageFlagsEvent {
482+
@override
483+
String get op => 'add';
484+
485+
UpdateMessageFlagsAddEvent({
486+
required super.id,
487+
required super.flag,
488+
required super.messages,
489+
required super.all,
490+
});
491+
492+
factory UpdateMessageFlagsAddEvent.fromJson(Map<String, dynamic> json) =>
493+
_$UpdateMessageFlagsAddEventFromJson(json);
494+
495+
@override
496+
Map<String, dynamic> toJson() => _$UpdateMessageFlagsAddEventToJson(this);
497+
}
498+
499+
/// An [UpdateMessageFlagsEvent] with op `remove`: https://zulip.com/api/get-events#update_message_flags-remove
500+
@JsonSerializable(fieldRename: FieldRename.snake)
501+
class UpdateMessageFlagsRemoveEvent extends UpdateMessageFlagsEvent {
502+
@override
503+
String get op => 'remove';
504+
505+
final Map<int, UpdateMessageFlagsMessageDetail>? messageDetails;
506+
507+
UpdateMessageFlagsRemoveEvent({
508+
required super.id,
509+
required super.flag,
510+
required super.messages,
511+
required super.all,
512+
required this.messageDetails,
513+
});
514+
515+
factory UpdateMessageFlagsRemoveEvent.fromJson(Map<String, dynamic> json) =>
516+
_$UpdateMessageFlagsRemoveEventFromJson(json);
517+
518+
@override
519+
Map<String, dynamic> toJson() => _$UpdateMessageFlagsRemoveEventToJson(this);
520+
}
521+
522+
/// As in [UpdateMessageFlagsRemoveEvent.messageDetails].
523+
@JsonSerializable(fieldRename: FieldRename.snake)
524+
class UpdateMessageFlagsMessageDetail {
525+
final MessageType type;
526+
final bool? mentioned;
527+
final List<int>? userIds;
528+
final int? streamId;
529+
final String? topic;
530+
531+
UpdateMessageFlagsMessageDetail({
532+
required this.type,
533+
required this.mentioned,
534+
required this.userIds,
535+
required this.streamId,
536+
required this.topic,
537+
});
538+
539+
factory UpdateMessageFlagsMessageDetail.fromJson(Map<String, dynamic> json) =>
540+
_$UpdateMessageFlagsMessageDetailFromJson(json);
541+
542+
Map<String, dynamic> toJson() => _$UpdateMessageFlagsMessageDetailToJson(this);
543+
}
544+
449545
/// A Zulip event of type `reaction`, with op `add` or `remove`.
450546
///
451547
/// See:

lib/api/model/events.g.dart

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

lib/model/store.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,9 @@ class PerAccountStore extends ChangeNotifier {
309309
} else if (event is DeleteMessageEvent) {
310310
assert(debugLog("server event: delete_message ${event.messageIds}"));
311311
// TODO handle
312+
} else if (event is UpdateMessageFlagsEvent) {
313+
assert(debugLog("server event: update_message_flags/${event.op} ${event.flag.toJson()}"));
314+
// TODO handle
312315
} else if (event is ReactionEvent) {
313316
assert(debugLog("server event: reaction/${event.op}"));
314317
for (final view in _messageListViews) {

0 commit comments

Comments
 (0)