Skip to content

Commit 1c52fdf

Browse files
chrisbobbegnprice
authored andcommitted
api: Add channel_folder event
1 parent 325ca9e commit 1c52fdf

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 'user_status': return UserStatusEvent.fromJson(json);
7582
case 'user_topic': return UserTopicEvent.fromJson(json);
7683
case 'muted_users': return MutedUsersEvent.fromJson(json);
@@ -887,6 +894,103 @@ class SubscriptionPeerRemoveEvent extends SubscriptionEvent {
887894
Map<String, dynamic> toJson() => _$SubscriptionPeerRemoveEventToJson(this);
888895
}
889896

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

832+
case ChannelFolderEvent():
833+
assert(debugLog("server event: channel_folder/${event.op}"));
834+
// TODO handle
835+
break;
836+
832837
case UserStatusEvent():
833838
assert(debugLog("server event: user_status"));
834839
_users.handleUserStatusEvent(event);

0 commit comments

Comments
 (0)