Skip to content

Commit

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

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

final int? userId; // TODO(server-5)
final bool? renderingOnly; // TODO(server-5)
final int messageId;
final List<int> messageIds;
final List<String> flags; // TODO enum
final int? editTimestamp; // TODO(server-5)
final String? streamName;
final int? streamId;
final int? newStreamId;
@JsonKey(fromJson: PropagateMode.fromJson, toJson: PropagateMode.toJson)
final PropagateMode? propagateMode;
final String? origSubject;
final String? subject;
// final List<TopicLink> topicLinks; // TODO handle
final String? origContent;
final String? origRenderedContent;
// final int? prevRenderedContentVersion; // deprecated
final String? content;
final String? renderedContent;
final bool? isMeMessage;

UpdateMessageEvent({
required super.id,
this.userId,
this.renderingOnly,
required this.messageId,
required this.messageIds,
required this.flags,
this.editTimestamp,
this.streamName,
this.streamId,
this.newStreamId,
this.propagateMode,
this.origSubject,
this.subject,
this.origContent,
this.origRenderedContent,
this.content,
this.renderedContent,
this.isMeMessage,
});

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

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

/// As in [UpdateMessageEvent.propagateMode].
enum PropagateMode {
changeOne,
changeLater,
changeAll,
unknown; // Probably from a future server we don't handle yet.

factory PropagateMode.fromJson(dynamic json) => switch (json) {
'change_one' => PropagateMode.changeOne,
'change_later' => PropagateMode.changeLater,
'change_all' => PropagateMode.changeAll,
_ => PropagateMode.unknown,
};

static String? toJson(PropagateMode? value) => switch (value) {
PropagateMode.changeOne => 'change_one',
PropagateMode.changeLater => 'change_later',
PropagateMode.changeAll => 'change_all',
PropagateMode.unknown => 'unknown',
null => null, // TODO really absent in object, not present with null
};
}

@JsonSerializable(fieldRename: FieldRename.snake)
class HeartbeatEvent extends Event {
@override
Expand Down
45 changes: 45 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 @@ -257,6 +257,8 @@ class PerAccountStore extends ChangeNotifier {
for (final view in _messageListViews) {
view.maybeAddMessage(event.message);
}
} else if (event is UpdateMessageEvent) {
// TODO handle
} else if (event is UnexpectedEvent) {
assert(debugLog("server event: ${jsonEncode(event.toJson())}")); // TODO log better
} else {
Expand Down

0 comments on commit 8bddf28

Please sign in to comment.