Skip to content

Commit 3da70bc

Browse files
committed
api: Add channel_folder event
1 parent 36e7c96 commit 3da70bc

File tree

3 files changed

+180
-0
lines changed

3 files changed

+180
-0
lines changed

lib/api/model/events.dart

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ sealed class Event {
7171
case 'peer_remove': return SubscriptionPeerRemoveEvent.fromJson(json);
7272
default: return UnexpectedEvent.fromJson(json);
7373
}
74+
case 'channel_folder':
75+
switch (json['op'] as String) {
76+
case 'add': return ChannelFolderAddEvent.fromJson(json);
77+
case 'reorder': return ChannelFolderReorderEvent.fromJson(json);
78+
case 'update': return ChannelFolderUpdateEvent.fromJson(json);
79+
default: return UnexpectedEvent.fromJson(json);
80+
}
7481
// case 'muted_topics': … // TODO(#422) we ignore this feature on older servers
7582
case 'user_status': return UserStatusEvent.fromJson(json);
7683
case 'user_topic': return UserTopicEvent.fromJson(json);
@@ -883,6 +890,103 @@ class SubscriptionPeerRemoveEvent extends SubscriptionEvent {
883890
Map<String, dynamic> toJson() => _$SubscriptionPeerRemoveEventToJson(this);
884891
}
885892

893+
/// A Zulip event of type `channel_folder`.
894+
///
895+
/// The corresponding API docs are in several places for
896+
/// different values of `op`; see subclasses.
897+
sealed class ChannelFolderEvent extends Event {
898+
@override
899+
@JsonKey(includeToJson: true)
900+
String get type => 'channel_folder';
901+
902+
String get op;
903+
904+
ChannelFolderEvent({required super.id});
905+
}
906+
907+
/// A [ChannelFolderEvent] with op `add`:
908+
/// https://zulip.com/api/get-events#channel_folder-add
909+
@JsonSerializable(fieldRename: FieldRename.snake)
910+
class ChannelFolderAddEvent extends ChannelFolderEvent {
911+
@override
912+
@JsonKey(includeToJson: true)
913+
String get op => 'add';
914+
915+
final ChannelFolder channelFolder;
916+
917+
ChannelFolderAddEvent({required super.id, required this.channelFolder});
918+
919+
factory ChannelFolderAddEvent.fromJson(Map<String, dynamic> json) =>
920+
_$ChannelFolderAddEventFromJson(json);
921+
922+
@override
923+
Map<String, dynamic> toJson() => _$ChannelFolderAddEventToJson(this);
924+
}
925+
926+
/// A [ChannelFolderEvent] with op `update`:
927+
/// https://zulip.com/api/get-events#channel_folder-update
928+
@JsonSerializable(fieldRename: FieldRename.snake)
929+
class ChannelFolderUpdateEvent extends ChannelFolderEvent {
930+
@override
931+
@JsonKey(includeToJson: true)
932+
String get op => 'update';
933+
934+
final int channelFolderId;
935+
final ChannelFolderChange data;
936+
937+
ChannelFolderUpdateEvent({
938+
required super.id,
939+
required this.channelFolderId,
940+
required this.data,
941+
});
942+
943+
factory ChannelFolderUpdateEvent.fromJson(Map<String, dynamic> json) =>
944+
_$ChannelFolderUpdateEventFromJson(json);
945+
946+
@override
947+
Map<String, dynamic> toJson() => _$ChannelFolderUpdateEventToJson(this);
948+
}
949+
950+
/// Details of a channel-folder change, as in [ChannelFolderUpdateEvent.data].
951+
@JsonSerializable(fieldRename: FieldRename.snake)
952+
class ChannelFolderChange {
953+
final String? name;
954+
final String? description;
955+
final String? renderedDescription;
956+
final bool? isArchived;
957+
958+
ChannelFolderChange({
959+
required this.name,
960+
required this.description,
961+
required this.renderedDescription,
962+
required this.isArchived,
963+
});
964+
965+
factory ChannelFolderChange.fromJson(Map<String, dynamic> json) =>
966+
_$ChannelFolderChangeFromJson(json);
967+
968+
Map<String, dynamic> toJson() => _$ChannelFolderChangeToJson(this);
969+
}
970+
971+
/// A [ChannelFolderEvent] with op `update`:
972+
/// https://zulip.com/api/get-events#channel_folder-update
973+
@JsonSerializable(fieldRename: FieldRename.snake)
974+
class ChannelFolderReorderEvent extends ChannelFolderEvent {
975+
@override
976+
@JsonKey(includeToJson: true)
977+
String get op => 'reorder';
978+
979+
final List<int> order;
980+
981+
ChannelFolderReorderEvent({required super.id, required this.order});
982+
983+
factory ChannelFolderReorderEvent.fromJson(Map<String, dynamic> json) =>
984+
_$ChannelFolderReorderEventFromJson(json);
985+
986+
@override
987+
Map<String, dynamic> toJson() => _$ChannelFolderReorderEventToJson(this);
988+
}
989+
886990
/// A Zulip event of type `user_status`: https://zulip.com/api/get-events#user_status
887991
@JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
888992
class UserStatusEvent extends Event {

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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,11 @@ class PerAccountStore extends PerAccountStoreBase with
803803
_channels.handleSubscriptionEvent(event);
804804
notifyListeners();
805805

806+
case ChannelFolderEvent():
807+
assert(debugLog("server event: channel_folder/${event.op}"));
808+
// TODO handle
809+
break;
810+
806811
case UserStatusEvent():
807812
assert(debugLog("server event: user_status"));
808813
_users.handleUserStatusEvent(event);

0 commit comments

Comments
 (0)