@@ -40,6 +40,12 @@ sealed class Event {
40
40
case 'message' : return MessageEvent .fromJson (json);
41
41
case 'update_message' : return UpdateMessageEvent .fromJson (json);
42
42
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
+ }
43
49
case 'reaction' : return ReactionEvent .fromJson (json);
44
50
case 'heartbeat' : return HeartbeatEvent .fromJson (json);
45
51
// TODO add many more event types
@@ -439,13 +445,122 @@ class DeleteMessageEvent extends Event {
439
445
Map <String , dynamic > toJson () => _$DeleteMessageEventToJson (this );
440
446
}
441
447
442
- /// As in [DeleteMessageEvent.messageType] .
448
+ /// As in [DeleteMessageEvent.messageType]
449
+ /// or [UpdateMessageFlagsMessageDetail.type] .
443
450
@JsonEnum (fieldRename: FieldRename .snake)
444
451
enum MessageType {
445
452
stream,
446
453
private;
447
454
}
448
455
456
+ /// A Zulip event of type `update_message_flags` .
457
+ ///
458
+ /// For the corresponding API docs, see subclasses.
459
+ sealed 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
+ final result = _$UpdateMessageFlagsRemoveEventFromJson (json);
517
+ // Crunchy-shell validation
518
+ if (
519
+ result.flag == MessageFlag .read
520
+ && true // (we assume `event_types` has `message` and `update_message_flags`)
521
+ ) {
522
+ result.messageDetails as Map <int , UpdateMessageFlagsMessageDetail >;
523
+ }
524
+ return result;
525
+ }
526
+
527
+ @override
528
+ Map <String , dynamic > toJson () => _$UpdateMessageFlagsRemoveEventToJson (this );
529
+ }
530
+
531
+ /// As in [UpdateMessageFlagsRemoveEvent.messageDetails] .
532
+ @JsonSerializable (fieldRename: FieldRename .snake)
533
+ class UpdateMessageFlagsMessageDetail {
534
+ final MessageType type;
535
+ final bool ? mentioned;
536
+ final List <int >? userIds;
537
+ final int ? streamId;
538
+ final String ? topic;
539
+
540
+ UpdateMessageFlagsMessageDetail ({
541
+ required this .type,
542
+ required this .mentioned,
543
+ required this .userIds,
544
+ required this .streamId,
545
+ required this .topic,
546
+ });
547
+
548
+ factory UpdateMessageFlagsMessageDetail .fromJson (Map <String , dynamic > json) {
549
+ final result = _$UpdateMessageFlagsMessageDetailFromJson (json);
550
+ // Crunchy-shell validation
551
+ switch (result.type) {
552
+ case MessageType .stream:
553
+ result.streamId as int ;
554
+ result.topic as String ;
555
+ case MessageType .private:
556
+ result.userIds as List <int >;
557
+ }
558
+ return result;
559
+ }
560
+
561
+ Map <String , dynamic > toJson () => _$UpdateMessageFlagsMessageDetailToJson (this );
562
+ }
563
+
449
564
/// A Zulip event of type `reaction` , with op `add` or `remove` .
450
565
///
451
566
/// See:
0 commit comments