Skip to content

Commit 43fdaff

Browse files
committed
api: Add ZulipStream.topicsPolicy
1 parent 6b56c2d commit 43fdaff

File tree

6 files changed

+66
-0
lines changed

6 files changed

+66
-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.fromApiValue(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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,9 @@ class ZulipStream {
659659
bool isWebPublic; // present since 2.1, according to /api/changelog
660660
bool historyPublicToSubscribers;
661661
int? messageRetentionDays;
662+
@JsonKey(defaultValue: TopicsPolicy.inherit, // TODO(server-11) remove default value
663+
unknownEnumValue: TopicsPolicy.unknown)
664+
TopicsPolicy topicsPolicy;
662665
@JsonKey(name: 'stream_post_policy')
663666
ChannelPostPolicy? channelPostPolicy; // TODO(server-10) remove
664667
// final bool isAnnouncementOnly; // deprecated for `channelPostPolicy`; ignore
@@ -684,6 +687,7 @@ class ZulipStream {
684687
required this.isWebPublic,
685688
required this.historyPublicToSubscribers,
686689
required this.messageRetentionDays,
690+
required this.topicsPolicy,
687691
required this.channelPostPolicy,
688692
required this.folderId,
689693
required this.canAddSubscribersGroup,
@@ -708,6 +712,7 @@ class ZulipStream {
708712
isWebPublic: subscription.isWebPublic,
709713
historyPublicToSubscribers: subscription.historyPublicToSubscribers,
710714
messageRetentionDays: subscription.messageRetentionDays,
715+
topicsPolicy: subscription.topicsPolicy,
711716
channelPostPolicy: subscription.channelPostPolicy,
712717
folderId: subscription.folderId,
713718
canAddSubscribersGroup: subscription.canAddSubscribersGroup,
@@ -744,6 +749,7 @@ enum ChannelPropertyName {
744749
// isWebPublic is updated via its own [ChannelUpdateEvent] field
745750
// historyPublicToSubscribers is updated via its own [ChannelUpdateEvent] field
746751
messageRetentionDays,
752+
topicsPolicy,
747753
@JsonValue('stream_post_policy')
748754
channelPostPolicy,
749755
folderId,
@@ -765,6 +771,30 @@ enum ChannelPropertyName {
765771
.map((key, value) => MapEntry(value, key));
766772
}
767773

774+
/// A value of [ZulipStream.topicsPolicy].
775+
///
776+
/// For docs, search for "topics_policy"
777+
/// in <https://zulip.com/api/get-stream-by-id>.
778+
@JsonEnum(valueField: 'apiValue')
779+
enum TopicsPolicy {
780+
inherit(apiValue: 'inherit'),
781+
allowEmptyTopic(apiValue: 'allow_empty_topic'),
782+
disableEmptyTopic(apiValue: 'disable_empty_topic'),
783+
emptyTopicOnly(apiValue: 'empty_topic_only'),
784+
unknown(apiValue: null);
785+
786+
const TopicsPolicy({required this.apiValue});
787+
788+
final String? apiValue;
789+
790+
String? toJson() => apiValue;
791+
792+
static TopicsPolicy fromApiValue(String value) => _byApiValue[value] ?? unknown;
793+
794+
static final _byApiValue = _$TopicsPolicyEnumMap
795+
.map((key, value) => MapEntry(value, key));
796+
}
797+
768798
/// Policy for which users can post to the stream.
769799
///
770800
/// For docs, search for "stream_post_policy"
@@ -830,6 +860,7 @@ class Subscription extends ZulipStream {
830860
required super.isWebPublic,
831861
required super.historyPublicToSubscribers,
832862
required super.messageRetentionDays,
863+
required super.topicsPolicy,
833864
required super.channelPostPolicy,
834865
required super.folderId,
835866
required super.canAddSubscribersGroup,

lib/api/model/model.g.dart

Lines changed: 25 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)