import Postbox import SwiftSignalKit public struct UserLimitsConfiguration: Equatable { public var maxPinnedChatCount: Int32 public var maxPinnedSavedChatCount: Int32 public var maxArchivedPinnedChatCount: Int32 public var maxChannelsCount: Int32 public var maxPublicLinksCount: Int32 public var maxSavedGifCount: Int32 public var maxFavedStickerCount: Int32 public var maxFoldersCount: Int32 public var maxFolderChatsCount: Int32 public var maxCaptionLength: Int32 public var maxUploadFileParts: Int32 public var maxAboutLength: Int32 public var maxAnimatedEmojisInText: Int32 public var maxReactionsPerMessage: Int32 public var maxSharedFolderInviteLinks: Int32 public var maxSharedFolderJoin: Int32 public var maxStoryCaptionLength: Int32 public var maxExpiringStoriesCount: Int32 public var maxStoriesWeeklyCount: Int32 public var maxStoriesMonthlyCount: Int32 public var maxStoriesSuggestedReactions: Int32 public var maxGiveawayChannelsCount: Int32 public var maxGiveawayCountriesCount: Int32 public var maxGiveawayPeriodSeconds: Int32 public var maxChannelRecommendationsCount: Int32 public static var defaultValue: UserLimitsConfiguration { return UserLimitsConfiguration( maxPinnedChatCount: 5, maxPinnedSavedChatCount: 5, maxArchivedPinnedChatCount: 100, maxChannelsCount: 500, maxPublicLinksCount: 10, maxSavedGifCount: 200, maxFavedStickerCount: 5, maxFoldersCount: 10, maxFolderChatsCount: 100, maxCaptionLength: 1024, maxUploadFileParts: 4000, maxAboutLength: 70, maxAnimatedEmojisInText: 10, maxReactionsPerMessage: 1, maxSharedFolderInviteLinks: 3, maxSharedFolderJoin: 2, maxStoryCaptionLength: 200, maxExpiringStoriesCount: 3, maxStoriesWeeklyCount: 7, maxStoriesMonthlyCount: 30, maxStoriesSuggestedReactions: 1, maxGiveawayChannelsCount: 10, maxGiveawayCountriesCount: 10, maxGiveawayPeriodSeconds: 86400 * 31, maxChannelRecommendationsCount: 10 ) } public init( maxPinnedChatCount: Int32, maxPinnedSavedChatCount: Int32, maxArchivedPinnedChatCount: Int32, maxChannelsCount: Int32, maxPublicLinksCount: Int32, maxSavedGifCount: Int32, maxFavedStickerCount: Int32, maxFoldersCount: Int32, maxFolderChatsCount: Int32, maxCaptionLength: Int32, maxUploadFileParts: Int32, maxAboutLength: Int32, maxAnimatedEmojisInText: Int32, maxReactionsPerMessage: Int32, maxSharedFolderInviteLinks: Int32, maxSharedFolderJoin: Int32, maxStoryCaptionLength: Int32, maxExpiringStoriesCount: Int32, maxStoriesWeeklyCount: Int32, maxStoriesMonthlyCount: Int32, maxStoriesSuggestedReactions: Int32, maxGiveawayChannelsCount: Int32, maxGiveawayCountriesCount: Int32, maxGiveawayPeriodSeconds: Int32, maxChannelRecommendationsCount: Int32 ) { self.maxPinnedChatCount = maxPinnedChatCount self.maxPinnedSavedChatCount = maxPinnedSavedChatCount self.maxArchivedPinnedChatCount = maxArchivedPinnedChatCount self.maxChannelsCount = maxChannelsCount self.maxPublicLinksCount = maxPublicLinksCount self.maxSavedGifCount = maxSavedGifCount self.maxFavedStickerCount = maxFavedStickerCount self.maxFoldersCount = maxFoldersCount self.maxFolderChatsCount = maxFolderChatsCount self.maxCaptionLength = maxCaptionLength self.maxUploadFileParts = maxUploadFileParts self.maxAboutLength = maxAboutLength self.maxAnimatedEmojisInText = maxAnimatedEmojisInText self.maxReactionsPerMessage = maxReactionsPerMessage self.maxSharedFolderInviteLinks = maxSharedFolderInviteLinks self.maxSharedFolderJoin = maxSharedFolderJoin self.maxStoryCaptionLength = maxStoryCaptionLength self.maxExpiringStoriesCount = maxExpiringStoriesCount self.maxStoriesWeeklyCount = maxStoriesWeeklyCount self.maxStoriesMonthlyCount = maxStoriesMonthlyCount self.maxStoriesSuggestedReactions = maxStoriesSuggestedReactions self.maxGiveawayChannelsCount = maxGiveawayChannelsCount self.maxGiveawayCountriesCount = maxGiveawayCountriesCount self.maxGiveawayPeriodSeconds = maxGiveawayPeriodSeconds self.maxChannelRecommendationsCount = maxChannelRecommendationsCount } } extension UserLimitsConfiguration { init(appConfiguration: AppConfiguration, isPremium: Bool) { let keySuffix = isPremium ? "_premium" : "_default" var defaultValue = UserLimitsConfiguration.defaultValue if isPremium { defaultValue.maxPinnedSavedChatCount = 100 } func getValue(_ key: String, orElse defaultValue: Int32) -> Int32 { if let value = appConfiguration.data?[key + keySuffix] as? Double { return Int32(value) } else { return defaultValue } } func getGeneralValue(_ key: String, orElse defaultValue: Int32) -> Int32 { if let value = appConfiguration.data?[key] as? Double { return Int32(value) } else { return defaultValue } } self.maxPinnedChatCount = getValue("dialogs_pinned_limit", orElse: defaultValue.maxPinnedChatCount) self.maxPinnedSavedChatCount = getValue("saved_pinned_limit", orElse: defaultValue.maxPinnedSavedChatCount) self.maxArchivedPinnedChatCount = getValue("dialogs_folder_pinned_limit", orElse: defaultValue.maxArchivedPinnedChatCount) self.maxChannelsCount = getValue("channels_limit", orElse: defaultValue.maxChannelsCount) self.maxPublicLinksCount = getValue("channels_public_limit", orElse: defaultValue.maxPublicLinksCount) self.maxSavedGifCount = getValue("saved_gifs_limit", orElse: defaultValue.maxSavedGifCount) self.maxFavedStickerCount = getValue("stickers_faved_limit", orElse: defaultValue.maxFavedStickerCount) self.maxFoldersCount = getValue("dialog_filters_limit", orElse: defaultValue.maxFoldersCount) self.maxFolderChatsCount = getValue("dialog_filters_chats_limit", orElse: defaultValue.maxFolderChatsCount) self.maxCaptionLength = getValue("caption_length_limit", orElse: defaultValue.maxCaptionLength) self.maxUploadFileParts = getValue("upload_max_fileparts", orElse: defaultValue.maxUploadFileParts) self.maxAboutLength = getValue("about_length_limit", orElse: defaultValue.maxAboutLength) self.maxAnimatedEmojisInText = getGeneralValue("message_animated_emoji_max", orElse: defaultValue.maxAnimatedEmojisInText) self.maxReactionsPerMessage = getValue("reactions_user_max", orElse: 1) self.maxSharedFolderInviteLinks = getValue("chatlist_invites_limit", orElse: isPremium ? 100 : 3) self.maxSharedFolderJoin = getValue("chatlists_joined_limit", orElse: isPremium ? 100 : 2) self.maxStoryCaptionLength = getValue("story_caption_length_limit", orElse: defaultValue.maxStoryCaptionLength) self.maxExpiringStoriesCount = getValue("story_expiring_limit", orElse: defaultValue.maxExpiringStoriesCount) self.maxStoriesWeeklyCount = getValue("stories_sent_weekly_limit", orElse: defaultValue.maxStoriesWeeklyCount) self.maxStoriesMonthlyCount = getValue("stories_sent_monthly_limit", orElse: defaultValue.maxStoriesMonthlyCount) self.maxStoriesSuggestedReactions = getValue("stories_suggested_reactions_limit", orElse: defaultValue.maxStoriesMonthlyCount) 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.maxChannelRecommendationsCount = getValue("recommended_channels_limit", orElse: defaultValue.maxChannelRecommendationsCount) } }