Skip to content

Commit 7cffea4

Browse files
committed
api: Add ZulipStream.topicsPolicy
Enum TopicsPolicy is created for these four values: inherit, allow_empty_topic, disable_empty_topic, and empty_topic_only.
1 parent 7b17ba8 commit 7cffea4

File tree

6 files changed

+51
-0
lines changed

6 files changed

+51
-0
lines changed

lib/api/model/events.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,8 @@ class ChannelUpdateEvent extends ChannelEvent {
681681
return value as bool;
682682
case ChannelPropertyName.messageRetentionDays:
683683
return value as int?;
684+
case ChannelPropertyName.topicsPolicy:
685+
return TopicsPolicy.fromRawString(value as String);
684686
case ChannelPropertyName.channelPostPolicy:
685687
return ChannelPostPolicy.fromApiValue(value as int);
686688
case ChannelPropertyName.folderId:

lib/api/model/events.g.dart

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/api/model/model.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,8 @@ class ZulipStream {
659659
bool isWebPublic; // present since 2.1, according to /api/changelog
660660
bool historyPublicToSubscribers;
661661
int? messageRetentionDays;
662+
@JsonKey(defaultValue: TopicsPolicy.inherit)
663+
TopicsPolicy topicsPolicy;
662664
@JsonKey(name: 'stream_post_policy')
663665
ChannelPostPolicy? channelPostPolicy; // TODO(server-10) remove
664666
// final bool isAnnouncementOnly; // deprecated for `channelPostPolicy`; ignore
@@ -684,6 +686,7 @@ class ZulipStream {
684686
required this.isWebPublic,
685687
required this.historyPublicToSubscribers,
686688
required this.messageRetentionDays,
689+
required this.topicsPolicy,
687690
required this.channelPostPolicy,
688691
required this.folderId,
689692
required this.canAddSubscribersGroup,
@@ -708,6 +711,7 @@ class ZulipStream {
708711
isWebPublic: subscription.isWebPublic,
709712
historyPublicToSubscribers: subscription.historyPublicToSubscribers,
710713
messageRetentionDays: subscription.messageRetentionDays,
714+
topicsPolicy: subscription.topicsPolicy,
711715
channelPostPolicy: subscription.channelPostPolicy,
712716
folderId: subscription.folderId,
713717
canAddSubscribersGroup: subscription.canAddSubscribersGroup,
@@ -744,6 +748,8 @@ enum ChannelPropertyName {
744748
// isWebPublic is updated via its own [ChannelUpdateEvent] field
745749
// historyPublicToSubscribers is updated via its own [ChannelUpdateEvent] field
746750
messageRetentionDays,
751+
@JsonValue('topics_policy')
752+
topicsPolicy,
747753
@JsonValue('stream_post_policy')
748754
channelPostPolicy,
749755
folderId,
@@ -791,6 +797,24 @@ enum ChannelPostPolicy {
791797
.map((key, value) => MapEntry(value, key));
792798
}
793799

800+
/// Policy for whether a topic is required to post
801+
///
802+
/// For docs, search for "topics_policy"
803+
/// in <https://zulip.com/api/get-stream-by-id>
804+
@JsonEnum(fieldRename: FieldRename.snake)
805+
enum TopicsPolicy {
806+
inherit,
807+
allowEmptyTopic,
808+
disableEmptyTopic,
809+
emptyTopicOnly;
810+
811+
static TopicsPolicy fromRawString(String raw) => _byRawString[raw] ?? inherit;
812+
813+
static final _byRawString = _$TopicsPolicyEnumMap.map((key, value) => MapEntry(value, key));
814+
815+
String toJson() => _$TopicsPolicyEnumMap[this]!;
816+
}
817+
794818
/// As in `subscriptions` in the initial snapshot.
795819
///
796820
/// For docs, search for "subscriptions:"
@@ -830,6 +854,7 @@ class Subscription extends ZulipStream {
830854
required super.isWebPublic,
831855
required super.historyPublicToSubscribers,
832856
required super.messageRetentionDays,
857+
required super.topicsPolicy,
833858
required super.channelPostPolicy,
834859
required super.folderId,
835860
required super.canAddSubscribersGroup,

lib/api/model/model.g.dart

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/model/channel.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,8 @@ class ChannelStoreImpl extends HasUserStore with ChannelStore {
444444
stream.inviteOnly = event.value as bool;
445445
case ChannelPropertyName.messageRetentionDays:
446446
stream.messageRetentionDays = event.value as int?;
447+
case ChannelPropertyName.topicsPolicy:
448+
stream.topicsPolicy = event.value as TopicsPolicy;
447449
case ChannelPropertyName.channelPostPolicy:
448450
stream.channelPostPolicy = event.value as ChannelPostPolicy;
449451
case ChannelPropertyName.folderId:

test/example_data.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ ZulipStream stream({
464464
bool? isWebPublic,
465465
bool? historyPublicToSubscribers,
466466
int? messageRetentionDays,
467+
TopicsPolicy? topicsPolicy,
467468
ChannelPostPolicy? channelPostPolicy,
468469
int? folderId,
469470
GroupSettingValue? canAddSubscribersGroup,
@@ -496,6 +497,7 @@ ZulipStream stream({
496497
isWebPublic: isWebPublic ?? false,
497498
historyPublicToSubscribers: historyPublicToSubscribers ?? true,
498499
messageRetentionDays: messageRetentionDays,
500+
topicsPolicy: topicsPolicy ?? TopicsPolicy.inherit,
499501
channelPostPolicy: channelPostPolicy ?? ChannelPostPolicy.any,
500502
folderId: folderId,
501503
canAddSubscribersGroup: canAddSubscribersGroup ?? GroupSettingValueNamed(nobodyGroup.id),
@@ -541,6 +543,7 @@ Subscription subscription(
541543
isWebPublic: stream.isWebPublic,
542544
historyPublicToSubscribers: stream.historyPublicToSubscribers,
543545
messageRetentionDays: stream.messageRetentionDays,
546+
topicsPolicy: stream.topicsPolicy,
544547
channelPostPolicy: stream.channelPostPolicy,
545548
folderId: stream.folderId,
546549
canAddSubscribersGroup: stream.canAddSubscribersGroup,
@@ -1261,6 +1264,8 @@ ChannelUpdateEvent channelUpdateEvent(
12611264
assert(value is bool);
12621265
case ChannelPropertyName.messageRetentionDays:
12631266
assert(value is int?);
1267+
case ChannelPropertyName.topicsPolicy:
1268+
assert(value is TopicsPolicy);
12641269
case ChannelPropertyName.channelPostPolicy:
12651270
assert(value is ChannelPostPolicy);
12661271
case ChannelPropertyName.folderId:

0 commit comments

Comments
 (0)