Skip to content

Commit

Permalink
api: Add delete_message events
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisbobbe committed Jul 6, 2023
1 parent 8bddf28 commit 1744683
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
46 changes: 46 additions & 0 deletions lib/api/model/events.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ sealed class Event {
}
case 'message': return MessageEvent.fromJson(json);
case 'update_message': return UpdateMessageEvent.fromJson(json);
case 'delete_message': return DeleteMessageEvent.fromJson(json);
case 'heartbeat': return HeartbeatEvent.fromJson(json);
// TODO add many more event types
default: return UnexpectedEvent.fromJson(json);
Expand Down Expand Up @@ -344,6 +345,51 @@ enum PropagateMode {
};
}

/// A Zulip event of type `delete_message`.
@JsonSerializable(fieldRename: FieldRename.snake)
class DeleteMessageEvent extends Event {
@override
String get type => 'delete_message';

final List<int> messageIds;
// final int messageId; // Not present; we support the bulk_message_deletion capability
@JsonKey(fromJson: MessageType.fromJson, toJson: MessageType.toJson)
final MessageType messageType;
final int? streamId;
final String? topic;

DeleteMessageEvent({
required super.id,
required this.messageIds,
required this.messageType,
this.streamId,
this.topic,
});

factory DeleteMessageEvent.fromJson(Map<String, dynamic> json) =>
_$DeleteMessageEventFromJson(json);

@override
Map<String, dynamic> toJson() => _$DeleteMessageEventToJson(this);
}

/// As in [DeleteMessageEvent.messageType].
enum MessageType {
stream,
private;

factory MessageType.fromJson(dynamic json) => switch (json) {
'stream' => MessageType.stream,
'private' => MessageType.private,
_ => throw Exception("MessageType.fromJson: unexpected message type $json"),
};

static String toJson(MessageType value) => switch (value) {
MessageType.stream => 'stream',
MessageType.private => 'private',
};
}

@JsonSerializable(fieldRename: FieldRename.snake)
class HeartbeatEvent extends Event {
@override
Expand Down
19 changes: 19 additions & 0 deletions lib/api/model/events.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions lib/model/store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,8 @@ class PerAccountStore extends ChangeNotifier {
}
} else if (event is UpdateMessageEvent) {
// TODO handle
} else if (event is DeleteMessageEvent) {
// TODO handle
} else if (event is UnexpectedEvent) {
assert(debugLog("server event: ${jsonEncode(event.toJson())}")); // TODO log better
} else {
Expand Down

0 comments on commit 1744683

Please sign in to comment.