diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 19b0a1241e..120781da56 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -10297,8 +10297,8 @@ Sorry for the inconvenience."; "Stats.Boosts.Gift" = "Gift"; "Stats.Boosts.TabBoosts_1" = "%@ Boost"; "Stats.Boosts.TabBoosts_any" = "%@ Boosts"; -"Stats.Boosts.TabGifts_1" = "%@ Boost"; -"Stats.Boosts.TabGifts_any" = "%@ Boosts"; +"Stats.Boosts.TabGifts_1" = "%@ Gift"; +"Stats.Boosts.TabGifts_any" = "%@ Gifts"; "Stats.Boosts.ToBeDistributed" = "To Be Distributed"; "Stats.Boosts.Unclaimed" = "Unclaimed"; "Stats.Boosts.GetBoosts" = "Get Boosts via Gifts"; @@ -10416,6 +10416,7 @@ Sorry for the inconvenience."; "ChannelBoost.EnableColors" = "Enable Colors"; "ChannelBoost.EnableColorsText" = "Your channel needs %1$@ to change channel color.\n\nAsk your **Premium** subscribers to boost your channel with this link:"; +"ChannelBoost.EnableColorsLevelText" = "Your channel needs **Level %1$@** to change channel color.\n\nAsk your **Premium** subscribers to boost your channel with this link:"; "ChannelBoost.BoostAgain" = "Boost Again"; "Settings.New" = "NEW"; diff --git a/submodules/AccountContext/Sources/AccountContext.swift b/submodules/AccountContext/Sources/AccountContext.swift index e62f757827..3f1bd1f793 100644 --- a/submodules/AccountContext/Sources/AccountContext.swift +++ b/submodules/AccountContext/Sources/AccountContext.swift @@ -1064,7 +1064,7 @@ public protocol AccountContext: AnyObject { public struct PremiumConfiguration { public static var defaultValue: PremiumConfiguration { - return PremiumConfiguration(isPremiumDisabled: false, showPremiumGiftInAttachMenu: false, showPremiumGiftInTextField: false, giveawayGiftsPurchaseAvailable: false, boostsPerGiftCount: 3) + return PremiumConfiguration(isPremiumDisabled: false, showPremiumGiftInAttachMenu: false, showPremiumGiftInTextField: false, giveawayGiftsPurchaseAvailable: false, boostsPerGiftCount: 3, minChannelNameColorLevel: 5) } public let isPremiumDisabled: Bool @@ -1072,13 +1072,15 @@ public struct PremiumConfiguration { public let showPremiumGiftInTextField: Bool public let giveawayGiftsPurchaseAvailable: Bool public let boostsPerGiftCount: Int32 + public let minChannelNameColorLevel: Int32 - fileprivate init(isPremiumDisabled: Bool, showPremiumGiftInAttachMenu: Bool, showPremiumGiftInTextField: Bool, giveawayGiftsPurchaseAvailable: Bool, boostsPerGiftCount: Int32) { + fileprivate init(isPremiumDisabled: Bool, showPremiumGiftInAttachMenu: Bool, showPremiumGiftInTextField: Bool, giveawayGiftsPurchaseAvailable: Bool, boostsPerGiftCount: Int32, minChannelNameColorLevel: Int32) { self.isPremiumDisabled = isPremiumDisabled self.showPremiumGiftInAttachMenu = showPremiumGiftInAttachMenu self.showPremiumGiftInTextField = showPremiumGiftInTextField self.giveawayGiftsPurchaseAvailable = giveawayGiftsPurchaseAvailable self.boostsPerGiftCount = boostsPerGiftCount + self.minChannelNameColorLevel = minChannelNameColorLevel } public static func with(appConfiguration: AppConfiguration) -> PremiumConfiguration { @@ -1088,7 +1090,8 @@ public struct PremiumConfiguration { showPremiumGiftInAttachMenu: data["premium_gift_attach_menu_icon"] as? Bool ?? false, showPremiumGiftInTextField: data["premium_gift_text_field_icon"] as? Bool ?? false, giveawayGiftsPurchaseAvailable: data["giveaway_gifts_purchase_available"] as? Bool ?? false, - boostsPerGiftCount: Int32(data["boosts_per_sent_gift"] as? Double ?? 3) + boostsPerGiftCount: Int32(data["boosts_per_sent_gift"] as? Double ?? 3), + minChannelNameColorLevel: Int32(data["channel_color_level_min"] as? Double ?? 5) ) } else { return .defaultValue diff --git a/submodules/PremiumUI/Sources/CreateGiveawayController.swift b/submodules/PremiumUI/Sources/CreateGiveawayController.swift index 6e53d10a43..8eb6fa8688 100644 --- a/submodules/PremiumUI/Sources/CreateGiveawayController.swift +++ b/submodules/PremiumUI/Sources/CreateGiveawayController.swift @@ -898,13 +898,7 @@ public func createGiveawayController(context: AccountContext, updatedPresentatio let state = stateValue.with { $0 } let presentationData = context.sharedContext.currentPresentationData.with { $0 } - - updateState { state in - var updatedState = state - updatedState.updating = true - return updatedState - } - + switch subject { case .generic: guard let products = productsValue.with({ $0 }), !products.isEmpty else { @@ -935,6 +929,12 @@ public func createGiveawayController(context: AccountContext, updatedPresentatio return } + updateState { state in + var updatedState = state + updatedState.updating = true + return updatedState + } + let (currency, amount) = selectedProduct.storeProduct.priceCurrencyAndAmount let purpose: AppStoreTransactionPurpose @@ -1033,6 +1033,12 @@ public func createGiveawayController(context: AccountContext, updatedPresentatio } }) case let .prepaid(prepaidGiveaway): + updateState { state in + var updatedState = state + updatedState.updating = true + return updatedState + } + let _ = (context.engine.payments.launchPrepaidGiveaway(peerId: peerId, id: prepaidGiveaway.id, additionalPeerIds: state.channels.filter { $0 != peerId }, countries: state.countries, onlyNewSubscribers: state.onlyNewEligible, randomId: Int64.random(in: .min ..< .max), untilDate: state.time) |> deliverOnMainQueue).startStandalone(completed: { if let controller, let navigationController = controller.navigationController as? NavigationController { diff --git a/submodules/PremiumUI/Sources/PremiumLimitScreen.swift b/submodules/PremiumUI/Sources/PremiumLimitScreen.swift index 449c67752b..14ca3e1302 100644 --- a/submodules/PremiumUI/Sources/PremiumLimitScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumLimitScreen.swift @@ -1187,7 +1187,7 @@ private final class LimitSheetContent: CombinedComponent { } case .nameColors: titleText = strings.ChannelBoost_EnableColors - string = strings.ChannelBoost_EnableColorsText(valueString).string + string = strings.ChannelBoost_EnableColorsLevelText("\(premiumConfiguration.minChannelNameColorLevel)").string case .channelReactions: //TODO:localize titleText = "Custom Reactions" diff --git a/submodules/TelegramCore/Sources/State/UserLimitsConfiguration.swift b/submodules/TelegramCore/Sources/State/UserLimitsConfiguration.swift index b5f99b7392..5922c61571 100644 --- a/submodules/TelegramCore/Sources/State/UserLimitsConfiguration.swift +++ b/submodules/TelegramCore/Sources/State/UserLimitsConfiguration.swift @@ -25,7 +25,6 @@ public struct UserLimitsConfiguration: Equatable { public let maxGiveawayChannelsCount: Int32 public let maxGiveawayCountriesCount: Int32 public let maxGiveawayPeriodSeconds: Int32 - public let minChannelNameColorLevel: Int32 public static var defaultValue: UserLimitsConfiguration { return UserLimitsConfiguration( @@ -51,8 +50,7 @@ public struct UserLimitsConfiguration: Equatable { maxStoriesSuggestedReactions: 1, maxGiveawayChannelsCount: 10, maxGiveawayCountriesCount: 10, - maxGiveawayPeriodSeconds: 86400 * 7, - minChannelNameColorLevel: 10 + maxGiveawayPeriodSeconds: 86400 * 7 ) } @@ -79,8 +77,7 @@ public struct UserLimitsConfiguration: Equatable { maxStoriesSuggestedReactions: Int32, maxGiveawayChannelsCount: Int32, maxGiveawayCountriesCount: Int32, - maxGiveawayPeriodSeconds: Int32, - minChannelNameColorLevel: Int32 + maxGiveawayPeriodSeconds: Int32 ) { self.maxPinnedChatCount = maxPinnedChatCount self.maxArchivedPinnedChatCount = maxArchivedPinnedChatCount @@ -105,7 +102,6 @@ public struct UserLimitsConfiguration: Equatable { self.maxGiveawayChannelsCount = maxGiveawayChannelsCount self.maxGiveawayCountriesCount = maxGiveawayCountriesCount self.maxGiveawayPeriodSeconds = maxGiveawayPeriodSeconds - self.minChannelNameColorLevel = minChannelNameColorLevel } } @@ -153,6 +149,5 @@ extension UserLimitsConfiguration { self.maxGiveawayChannelsCount = getGeneralValue("giveaway_add_peers_max", orElse: defaultValue.maxGiveawayChannelsCount) self.maxGiveawayCountriesCount = getGeneralValue("giveaway_countries_max", orElse: defaultValue.maxGiveawayCountriesCount) self.maxGiveawayPeriodSeconds = getGeneralValue("giveaway_period_max", orElse: defaultValue.maxGiveawayPeriodSeconds) - self.minChannelNameColorLevel = getGeneralValue("channel_color_level_min", orElse: defaultValue.minChannelNameColorLevel) } } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Data/ConfigurationData.swift b/submodules/TelegramCore/Sources/TelegramEngine/Data/ConfigurationData.swift index ca16e2f12b..48a83d7b9a 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Data/ConfigurationData.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Data/ConfigurationData.swift @@ -59,7 +59,6 @@ public enum EngineConfiguration { public let maxGiveawayChannelsCount: Int32 public let maxGiveawayCountriesCount: Int32 public let maxGiveawayPeriodSeconds: Int32 - public let minChannelNameColorLevel: Int32 public static var defaultValue: UserLimits { return UserLimits(UserLimitsConfiguration.defaultValue) @@ -88,8 +87,7 @@ public enum EngineConfiguration { maxStoriesSuggestedReactions: Int32, maxGiveawayChannelsCount: Int32, maxGiveawayCountriesCount: Int32, - maxGiveawayPeriodSeconds: Int32, - minChannelNameColorLevel: Int32 + maxGiveawayPeriodSeconds: Int32 ) { self.maxPinnedChatCount = maxPinnedChatCount self.maxArchivedPinnedChatCount = maxArchivedPinnedChatCount @@ -114,7 +112,6 @@ public enum EngineConfiguration { self.maxGiveawayChannelsCount = maxGiveawayChannelsCount self.maxGiveawayCountriesCount = maxGiveawayCountriesCount self.maxGiveawayPeriodSeconds = maxGiveawayPeriodSeconds - self.minChannelNameColorLevel = minChannelNameColorLevel } } } @@ -174,8 +171,7 @@ public extension EngineConfiguration.UserLimits { maxStoriesSuggestedReactions: userLimitsConfiguration.maxStoriesSuggestedReactions, maxGiveawayChannelsCount: userLimitsConfiguration.maxGiveawayChannelsCount, maxGiveawayCountriesCount: userLimitsConfiguration.maxGiveawayCountriesCount, - maxGiveawayPeriodSeconds: userLimitsConfiguration.maxGiveawayPeriodSeconds, - minChannelNameColorLevel: userLimitsConfiguration.minChannelNameColorLevel + maxGiveawayPeriodSeconds: userLimitsConfiguration.maxGiveawayPeriodSeconds ) } } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift index 56095c104b..79210a38f3 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift @@ -2844,6 +2844,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI return } + let themeUpdated = strongSelf.appliedItem?.presentationData.theme.theme !== item.presentationData.theme.theme let previousContextFrame = strongSelf.mainContainerNode.frame strongSelf.mainContainerNode.frame = CGRect(origin: CGPoint(), size: layout.contentSize) strongSelf.mainContextSourceNode.frame = CGRect(origin: CGPoint(), size: layout.contentSize) @@ -2992,7 +2993,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI nameButtonNode.frame = nameNodeFrame.insetBy(dx: -2.0, dy: -3.0) let nameColor = authorNameColor ?? item.presentationData.theme.theme.chat.message.outgoing.accentTextColor - if "".isEmpty { + if themeUpdated { nameHighlightNode.image = generateFilledRoundedRectImage(size: CGSize(width: 8.0, height: 8.0), cornerRadius: 4.0, color: nameColor.withAlphaComponent(0.1))?.stretchableImage(withLeftCapWidth: 4, topCapHeight: 4) } @@ -3065,7 +3066,7 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI credibilityHighlightNode.frame = credibilityIconFrame.insetBy(dx: -1.0, dy: -1.0) credibilityButtonNode.frame = credibilityIconFrame.insetBy(dx: -2.0, dy: -3.0) - if "".isEmpty { + if themeUpdated { credibilityHighlightNode.image = generateFilledRoundedRectImage(size: CGSize(width: 8.0, height: 8.0), cornerRadius: 4.0, color: nameColor.withAlphaComponent(0.1))?.stretchableImage(withLeftCapWidth: 4, topCapHeight: 4) } } else { diff --git a/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift b/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift index 5acad8a76b..63451395e2 100644 --- a/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift +++ b/submodules/TelegramUI/Components/Resources/FetchVideoMediaResource/Sources/FetchVideoMediaResource.swift @@ -885,7 +885,12 @@ private extension MediaEditorValues { if let paintingData = legacyAdjustments.paintingData { if let entitiesData = paintingData.entitiesData { - entities = decodeCodableDrawingEntities(data: entitiesData) + entities = decodeCodableDrawingEntities(data: entitiesData).filter { entity in + if case let .sticker(sticker) = entity { + return sticker.isAnimated + } + return false + } } if let imagePath = paintingData.imagePath, let image = UIImage(contentsOfFile: imagePath) { drawing = image