diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 221538f5c1..0bab75d3ac 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -14065,6 +14065,7 @@ Sorry for the inconvenience."; "Privacy.Gifts.AcceptedTypes.Unlimited" = "Unlimited"; "Privacy.Gifts.AcceptedTypes.Limited" = "Limited-Edition"; "Privacy.Gifts.AcceptedTypes.Unique" = "Unique"; +"Privacy.Gifts.AcceptedTypes.Channel" = "From Channels"; "Privacy.Gifts.AcceptedTypes.Premium" = "Premium Subscriptions"; "Privacy.Gifts.AcceptedTypes.Info" = "Choose the types of gifts that you allow others to send you."; diff --git a/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift b/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift index c024fa6cfa..450dfbbed4 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift @@ -174,6 +174,7 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { case disallowedGiftsUnlimited(PresentationTheme, String, Bool, Bool) case disallowedGiftsLimited(PresentationTheme, String, Bool, Bool) case disallowedGiftsUnique(PresentationTheme, String, Bool, Bool) + case disallowedGiftsChannel(PresentationTheme, String, Bool, Bool) case disallowedGiftsPremium(PresentationTheme, String, Bool, Bool) case disallowedGiftsInfo(PresentationTheme, String) case showGiftButton(PresentationTheme, String, Bool, Bool, Bool) @@ -203,7 +204,7 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { return SelectivePrivacySettingsSection.hideReadTime.rawValue case .subscribeToPremium, .subscribeToPremiumInfo: return SelectivePrivacySettingsSection.premium.rawValue - case .disallowedGiftsHeader, .disallowedGiftsUnlimited, .disallowedGiftsLimited, .disallowedGiftsUnique, .disallowedGiftsPremium, .disallowedGiftsInfo: + case .disallowedGiftsHeader, .disallowedGiftsUnlimited, .disallowedGiftsLimited, .disallowedGiftsUnique, .disallowedGiftsChannel, .disallowedGiftsPremium, .disallowedGiftsInfo: return SelectivePrivacySettingsSection.disallowedGifts.rawValue case .showGiftButton, .showGiftButtonInfo: return SelectivePrivacySettingsSection.giftButton.rawValue @@ -290,10 +291,12 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { return 37 case .disallowedGiftsUnique: return 38 - case .disallowedGiftsPremium: + case .disallowedGiftsChannel: return 39 - case .disallowedGiftsInfo: + case .disallowedGiftsPremium: return 40 + case .disallowedGiftsInfo: + return 41 } } @@ -521,6 +524,12 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { } else { return false } + case let .disallowedGiftsChannel(lhsTheme, lhsText, lhsEnabled, lhsValue): + if case let .disallowedGiftsChannel(rhsTheme, rhsText, rhsEnabled, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsEnabled == rhsEnabled, lhsValue == rhsValue { + return true + } else { + return false + } case let .disallowedGiftsPremium(lhsTheme, lhsText, lhsEnabled, lhsValue): if case let .disallowedGiftsPremium(rhsTheme, rhsText, rhsEnabled, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsEnabled == rhsEnabled, lhsValue == rhsValue { return true @@ -705,6 +714,16 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { }, activatedWhileDisabled: { arguments.displayLockedGiftsInfo() }) + case let .disallowedGiftsChannel(_, text, isLocked, value): + return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, title: text, value: value, enableInteractiveChanges: !isLocked, enabled: true, displayLocked: isLocked, sectionId: self.section, style: .blocks, updated: { updatedValue in + if !isLocked { + arguments.updateDisallowedGifts?(.channel, !updatedValue) + } else { + arguments.displayLockedGiftsInfo() + } + }, activatedWhileDisabled: { + arguments.displayLockedGiftsInfo() + }) case let .disallowedGiftsPremium(_, text, isLocked, value): return ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, title: text, value: value, enableInteractiveChanges: !isLocked, enabled: true, displayLocked: isLocked, sectionId: self.section, style: .blocks, updated: { updatedValue in if !isLocked { @@ -1152,6 +1171,7 @@ private func selectivePrivacySettingsControllerEntries(presentationData: Present entries.append(.disallowedGiftsUnlimited(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Unlimited, !isPremium, !(state.disallowedGifts?.contains(.unlimited) ?? false))) entries.append(.disallowedGiftsLimited(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Limited, !isPremium, !(state.disallowedGifts?.contains(.limited) ?? false))) entries.append(.disallowedGiftsUnique(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Unique, !isPremium, !(state.disallowedGifts?.contains(.unique) ?? false))) + entries.append(.disallowedGiftsChannel(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Channel, !isPremium, !(state.disallowedGifts?.contains(.channel) ?? false))) entries.append(.disallowedGiftsPremium(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Premium, !isPremium, !(state.disallowedGifts?.contains(.premium) ?? false))) entries.append(.disallowedGiftsInfo(presentationData.theme, presentationData.strings.Privacy_Gifts_AcceptedTypes_Info)) } diff --git a/submodules/TelegramCore/Sources/Settings/PrivacySettings.swift b/submodules/TelegramCore/Sources/Settings/PrivacySettings.swift index 11ad57ff69..0acae94121 100644 --- a/submodules/TelegramCore/Sources/Settings/PrivacySettings.swift +++ b/submodules/TelegramCore/Sources/Settings/PrivacySettings.swift @@ -307,6 +307,7 @@ public struct TelegramDisallowedGifts: OptionSet, Codable { public static let limited = TelegramDisallowedGifts(rawValue: 1 << 1) public static let unique = TelegramDisallowedGifts(rawValue: 1 << 2) public static let premium = TelegramDisallowedGifts(rawValue: 1 << 3) + public static let channel = TelegramDisallowedGifts(rawValue: 1 << 4) public static let All: TelegramDisallowedGifts = [ .unlimited, @@ -327,6 +328,33 @@ public struct TelegramDisallowedGifts: OptionSet, Codable { } } +extension TelegramDisallowedGifts { + init(apiDisallowedGifts: Api.DisallowedGiftsSettings?) { + var disallowedGifts: TelegramDisallowedGifts = [] + switch apiDisallowedGifts { + case let .disallowedGiftsSettings(giftFlags): + if (giftFlags & (1 << 0)) != 0 { + disallowedGifts.insert(.unlimited) + } + if (giftFlags & (1 << 1)) != 0 { + disallowedGifts.insert(.limited) + } + if (giftFlags & (1 << 2)) != 0 { + disallowedGifts.insert(.unique) + } + if (giftFlags & (1 << 3)) != 0 { + disallowedGifts.insert(.premium) + } + if (giftFlags & (1 << 4)) != 0 { + disallowedGifts.insert(.channel) + } + default: + break + } + self = disallowedGifts + } +} + public struct GlobalPrivacySettings: Equatable, Codable { public enum NonContactChatsPrivacy: Equatable, Codable { case everybody diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift index 1953276db4..7786b7ae10 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/UpdateCachedPeerData.swift @@ -403,21 +403,7 @@ func _internal_fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPee let sendPaidMessageStars = sendPaidMessageStars.flatMap { StarsAmount(value: $0, nanos: 0) } - var disallowedGifts: TelegramDisallowedGifts = [] - if case let .disallowedGiftsSettings(giftFlags) = disallowedStarGifts { - if (giftFlags & (1 << 0)) != 0 { - disallowedGifts.insert(.unlimited) - } - if (giftFlags & (1 << 1)) != 0 { - disallowedGifts.insert(.limited) - } - if (giftFlags & (1 << 2)) != 0 { - disallowedGifts.insert(.unique) - } - if (giftFlags & (1 << 3)) != 0 { - disallowedGifts.insert(.premium) - } - } + let disallowedGifts = TelegramDisallowedGifts(apiDisallowedGifts: disallowedStarGifts) let botGroupAdminRights = groupAdminRights.flatMap { TelegramChatAdminRights(apiAdminRights: $0) } let botChannelAdminRights = channelAdminRights.flatMap { TelegramChatAdminRights(apiAdminRights: $0) } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Privacy/UpdatedAccountPrivacySettings.swift b/submodules/TelegramCore/Sources/TelegramEngine/Privacy/UpdatedAccountPrivacySettings.swift index b10afb4e58..54f62ead1c 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Privacy/UpdatedAccountPrivacySettings.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Privacy/UpdatedAccountPrivacySettings.swift @@ -33,21 +33,7 @@ func _internal_updateGlobalPrivacySettings(account: Account) -> Signal Signal