diff --git a/lib/api/model/initial_snapshot.dart b/lib/api/model/initial_snapshot.dart index d9734582c6..342128b8b7 100644 --- a/lib/api/model/initial_snapshot.dart +++ b/lib/api/model/initial_snapshot.dart @@ -24,16 +24,6 @@ class InitialSnapshot { final List customProfileFields; - /// The realm-level policy, on pre-FL 163 servers, for visibility of real email addresses. - /// - /// Search for "email_address_visibility" in https://zulip.com/api/register-queue. - /// - /// This field is removed in Zulip 7.0 (FL 163) and replaced with a user-level - /// setting: - /// * https://zulip.com/api/update-settings#parameter-email_address_visibility - /// * https://zulip.com/api/update-realm-user-settings-defaults#parameter-email_address_visibility - final EmailAddressVisibility? emailAddressVisibility; // TODO(server-7): remove - final int serverPresencePingIntervalSeconds; final int serverPresenceOfflineThresholdSeconds; @@ -146,7 +136,6 @@ class InitialSnapshot { required this.zulipMergeBase, required this.alertWords, required this.customProfileFields, - required this.emailAddressVisibility, required this.serverPresencePingIntervalSeconds, required this.serverPresenceOfflineThresholdSeconds, required this.serverTypingStartedExpiryPeriodMilliseconds, @@ -185,14 +174,6 @@ class InitialSnapshot { Map toJson() => _$InitialSnapshotToJson(this); } -enum EmailAddressVisibility { - @JsonValue(1) everyone, - @JsonValue(2) members, - @JsonValue(3) admins, - @JsonValue(4) nobody, - @JsonValue(5) moderators, -} - @JsonEnum(valueField: 'apiValue') enum RealmWildcardMentionPolicy { everyone(apiValue: 1), diff --git a/lib/api/model/initial_snapshot.g.dart b/lib/api/model/initial_snapshot.g.dart index 32af6a1867..ff05e50c20 100644 --- a/lib/api/model/initial_snapshot.g.dart +++ b/lib/api/model/initial_snapshot.g.dart @@ -22,10 +22,6 @@ InitialSnapshot _$InitialSnapshotFromJson( customProfileFields: (json['custom_profile_fields'] as List) .map((e) => CustomProfileField.fromJson(e as Map)) .toList(), - emailAddressVisibility: $enumDecodeNullable( - _$EmailAddressVisibilityEnumMap, - json['email_address_visibility'], - ), serverPresencePingIntervalSeconds: (json['server_presence_ping_interval_seconds'] as num).toInt(), serverPresenceOfflineThresholdSeconds: @@ -138,8 +134,6 @@ Map _$InitialSnapshotToJson( 'zulip_merge_base': instance.zulipMergeBase, 'alert_words': instance.alertWords, 'custom_profile_fields': instance.customProfileFields, - 'email_address_visibility': - _$EmailAddressVisibilityEnumMap[instance.emailAddressVisibility], 'server_presence_ping_interval_seconds': instance.serverPresencePingIntervalSeconds, 'server_presence_offline_threshold_seconds': @@ -178,14 +172,6 @@ Map _$InitialSnapshotToJson( 'cross_realm_bots': instance.crossRealmBots, }; -const _$EmailAddressVisibilityEnumMap = { - EmailAddressVisibility.everyone: 1, - EmailAddressVisibility.members: 2, - EmailAddressVisibility.admins: 3, - EmailAddressVisibility.nobody: 4, - EmailAddressVisibility.moderators: 5, -}; - const _$RealmWildcardMentionPolicyEnumMap = { RealmWildcardMentionPolicy.everyone: 1, RealmWildcardMentionPolicy.members: 2, diff --git a/lib/model/realm.dart b/lib/model/realm.dart index 41e599580b..c214b554fa 100644 --- a/lib/model/realm.dart +++ b/lib/model/realm.dart @@ -51,8 +51,6 @@ mixin RealmStore on PerAccountStoreBase { RealmWildcardMentionPolicy get realmWildcardMentionPolicy; // TODO(#662): replaced by can_mention_many_users_group - EmailAddressVisibility? get emailAddressVisibility; // TODO: replaced at FL-163 by a user setting - //|////////////////////////////// // Realm settings that lack events. // (Each of these is probably secretly a server setting.) @@ -149,8 +147,6 @@ mixin ProxyRealmStore on RealmStore { @override RealmWildcardMentionPolicy get realmWildcardMentionPolicy => realmStore.realmWildcardMentionPolicy; @override - EmailAddressVisibility? get emailAddressVisibility => realmStore.emailAddressVisibility; - @override String get realmEmptyTopicDisplayName => realmStore.realmEmptyTopicDisplayName; @override Map get realmDefaultExternalAccounts => realmStore.realmDefaultExternalAccounts; @@ -187,7 +183,6 @@ class RealmStoreImpl extends PerAccountStoreBase with RealmStore { realmPresenceDisabled = initialSnapshot.realmPresenceDisabled, realmWaitingPeriodThreshold = initialSnapshot.realmWaitingPeriodThreshold, realmWildcardMentionPolicy = initialSnapshot.realmWildcardMentionPolicy, - emailAddressVisibility = initialSnapshot.emailAddressVisibility, _realmEmptyTopicDisplayName = initialSnapshot.realmEmptyTopicDisplayName, realmDefaultExternalAccounts = initialSnapshot.realmDefaultExternalAccounts, customProfileFields = _sortCustomProfileFields(initialSnapshot.customProfileFields); @@ -220,9 +215,6 @@ class RealmStoreImpl extends PerAccountStoreBase with RealmStore { @override final RealmWildcardMentionPolicy realmWildcardMentionPolicy; - @override - final EmailAddressVisibility? emailAddressVisibility; - @override String get realmEmptyTopicDisplayName { assert(zulipFeatureLevel >= 334); // TODO(server-10) diff --git a/lib/model/user.dart b/lib/model/user.dart index 7d195e3197..522b204773 100644 --- a/lib/model/user.dart +++ b/lib/model/user.dart @@ -91,36 +91,6 @@ mixin UserStore on PerAccountStoreBase, RealmStore { return getUser(senderId)?.fullName ?? message.senderFullName; } - /// The user's real email address, if known, for displaying in the UI. - /// - /// Returns null if self-user isn't able to see the user's real email address, - /// or if the user isn't actually a user we know about. - String? userDisplayEmail(int userId) { - final user = getUser(userId); - if (user == null) return null; - if (zulipFeatureLevel >= 163) { // TODO(server-7) - // A non-null value means self-user has access to [user]'s real email, - // while a null value means it doesn't have access to the email. - // Search for "delivery_email" in https://zulip.com/api/register-queue. - return user.deliveryEmail; - } else { - if (user.deliveryEmail != null) { - // A non-null value means self-user has access to [user]'s real email, - // while a null value doesn't necessarily mean it doesn't have access - // to the email, .... - return user.deliveryEmail; - } else if (emailAddressVisibility == EmailAddressVisibility.everyone) { - // ... we have to also check for [PerAccountStore.emailAddressVisibility]. - // See: - // * https://github.com/zulip/zulip-mobile/pull/5515#discussion_r997731727 - // * https://chat.zulip.org/#narrow/stream/378-api-design/topic/email.20address.20visibility/near/1296133 - return user.email; - } else { - return null; - } - } - } - /// Whether [user] has passed the realm's waiting period to be a full member. /// /// See: diff --git a/lib/widgets/autocomplete.dart b/lib/widgets/autocomplete.dart index cb5d9d078c..350eb86d56 100644 --- a/lib/widgets/autocomplete.dart +++ b/lib/widgets/autocomplete.dart @@ -285,7 +285,7 @@ class MentionAutocompleteItem extends StatelessWidget { label = store.userDisplayName(userId); emoji = UserStatusEmoji(userId: userId, size: 18, padding: const EdgeInsetsDirectional.only(start: 5.0)); - sublabel = store.userDisplayEmail(userId); + sublabel = store.getUser(userId)?.deliveryEmail; case WildcardMentionAutocompleteResult(:var wildcardOption): avatar = SizedBox.square(dimension: 36, child: const Icon(ZulipIcons.three_person, size: 24)); diff --git a/lib/widgets/profile.dart b/lib/widgets/profile.dart index 23f5bf039c..461b2ec1b7 100644 --- a/lib/widgets/profile.dart +++ b/lib/widgets/profile.dart @@ -56,7 +56,7 @@ class ProfilePage extends StatelessWidget { .merge(weightVariableTextStyle(context, wght: 700)); final userStatus = store.getUserStatus(userId); - final displayEmail = store.userDisplayEmail(userId); + final displayEmail = user.deliveryEmail; final items = [ Center( child: Avatar( diff --git a/test/example_data.dart b/test/example_data.dart index b44108eb21..267d75d8ed 100644 --- a/test/example_data.dart +++ b/test/example_data.dart @@ -251,7 +251,7 @@ int _lastEmailSuffix = 1000; /// other data in the test, or if the IDs need to increase in a different order /// from the calls to [user]. /// -/// If `email` is not given, it defaults to `deliveryEmail` if given, +/// If `email` is not given, it defaults to `deliveryEmail` if given and non-null, /// or else to a value resembling the Zulip server's generated fake emails. User user({ int? userId, @@ -1202,7 +1202,6 @@ InitialSnapshot initialSnapshot({ String? zulipMergeBase, List? alertWords, List? customProfileFields, - EmailAddressVisibility? emailAddressVisibility, int? serverPresencePingIntervalSeconds, int? serverPresenceOfflineThresholdSeconds, int? serverTypingStartedExpiryPeriodMilliseconds, @@ -1242,7 +1241,6 @@ InitialSnapshot initialSnapshot({ zulipMergeBase: zulipMergeBase ?? recentZulipVersion, alertWords: alertWords ?? ['klaxon'], customProfileFields: customProfileFields ?? [], - emailAddressVisibility: emailAddressVisibility ?? EmailAddressVisibility.everyone, serverPresencePingIntervalSeconds: serverPresencePingIntervalSeconds ?? 60, serverPresenceOfflineThresholdSeconds: serverPresenceOfflineThresholdSeconds ?? 140, serverTypingStartedExpiryPeriodMilliseconds: