Swiftgram/submodules/Postbox/Sources/SeedConfiguration.swift
2020-09-15 22:21:35 +04:00

93 lines
5.5 KiB
Swift

import Foundation
public struct GlobalMessageIdsNamespace: Hashable {
public let peerIdNamespace: PeerId.Namespace
public let messageIdNamespace: MessageId.Namespace
public init(peerIdNamespace: PeerId.Namespace, messageIdNamespace: MessageId.Namespace) {
self.peerIdNamespace = peerIdNamespace
self.messageIdNamespace = messageIdNamespace
}
}
public struct ChatListMessageTagSummaryResultComponent {
public let tag: MessageTags
public let namespace: MessageId.Namespace
public init(tag: MessageTags, namespace: MessageId.Namespace) {
self.tag = tag
self.namespace = namespace
}
}
public struct ChatListMessageTagActionsSummaryResultComponent {
public let type: PendingMessageActionType
public let namespace: MessageId.Namespace
public init(type: PendingMessageActionType, namespace: MessageId.Namespace) {
self.type = type
self.namespace = namespace
}
}
public struct ChatListMessageTagSummaryResultCalculation {
public let addCount: ChatListMessageTagSummaryResultComponent
public let subtractCount: ChatListMessageTagActionsSummaryResultComponent
public init(addCount: ChatListMessageTagSummaryResultComponent, subtractCount: ChatListMessageTagActionsSummaryResultComponent) {
self.addCount = addCount
self.subtractCount = subtractCount
}
}
func resolveChatListMessageTagSummaryResultCalculation(addSummary: MessageHistoryTagNamespaceSummary?, subtractSummary: Int32?) -> Bool? {
let count = (addSummary?.count ?? 0) - (subtractSummary ?? 0)
return count > 0
}
func resolveChatListMessageTagSummaryResultCalculation(postbox: Postbox, peerId: PeerId, calculation: ChatListMessageTagSummaryResultCalculation?) -> Bool? {
guard let calculation = calculation else {
return nil
}
let addSummary = postbox.messageHistoryTagsSummaryTable.get(MessageHistoryTagsSummaryKey(tag: calculation.addCount.tag, peerId: peerId, namespace: calculation.addCount.namespace))
let subtractSummary = postbox.pendingMessageActionsMetadataTable.getCount(.peerNamespaceAction(peerId, calculation.subtractCount.namespace, calculation.subtractCount.type))
let count = (addSummary?.count ?? 0) - subtractSummary
return count > 0
}
public final class SeedConfiguration {
public let globalMessageIdsPeerIdNamespaces: Set<GlobalMessageIdsNamespace>
public let initializeChatListWithHole: (topLevel: ChatListHole?, groups: ChatListHole?)
public let messageHoles: [PeerId.Namespace: [MessageId.Namespace: Set<MessageTags>]]
public let upgradedMessageHoles: [PeerId.Namespace: [MessageId.Namespace: Set<MessageTags>]]
public let messageThreadHoles: [PeerId.Namespace: [MessageId.Namespace]]
public let messageTagsWithSummary: MessageTags
public let existingGlobalMessageTags: GlobalMessageTags
public let peerNamespacesRequiringMessageTextIndex: [PeerId.Namespace]
public let peerSummaryCounterTags: (Peer, Bool) -> PeerSummaryCounterTags
public let additionalChatListIndexNamespace: MessageId.Namespace?
public let messageNamespacesRequiringGroupStatsValidation: Set<MessageId.Namespace>
public let defaultMessageNamespaceReadStates: [MessageId.Namespace: PeerReadState]
public let chatMessagesNamespaces: Set<MessageId.Namespace>
public let globalNotificationSettingsPreferencesKey: ValueBoxKey
public let defaultGlobalNotificationSettings: PostboxGlobalNotificationSettings
public init(globalMessageIdsPeerIdNamespaces: Set<GlobalMessageIdsNamespace>, initializeChatListWithHole: (topLevel: ChatListHole?, groups: ChatListHole?), messageHoles: [PeerId.Namespace: [MessageId.Namespace: Set<MessageTags>]], upgradedMessageHoles: [PeerId.Namespace: [MessageId.Namespace: Set<MessageTags>]], messageThreadHoles: [PeerId.Namespace: [MessageId.Namespace]], existingMessageTags: MessageTags, messageTagsWithSummary: MessageTags, existingGlobalMessageTags: GlobalMessageTags, peerNamespacesRequiringMessageTextIndex: [PeerId.Namespace], peerSummaryCounterTags: @escaping (Peer, Bool) -> PeerSummaryCounterTags, additionalChatListIndexNamespace: MessageId.Namespace?, messageNamespacesRequiringGroupStatsValidation: Set<MessageId.Namespace>, defaultMessageNamespaceReadStates: [MessageId.Namespace: PeerReadState], chatMessagesNamespaces: Set<MessageId.Namespace>, globalNotificationSettingsPreferencesKey: ValueBoxKey, defaultGlobalNotificationSettings: PostboxGlobalNotificationSettings) {
self.globalMessageIdsPeerIdNamespaces = globalMessageIdsPeerIdNamespaces
self.initializeChatListWithHole = initializeChatListWithHole
self.messageHoles = messageHoles
self.upgradedMessageHoles = upgradedMessageHoles
self.messageThreadHoles = messageThreadHoles
self.messageTagsWithSummary = messageTagsWithSummary
self.existingGlobalMessageTags = existingGlobalMessageTags
self.peerNamespacesRequiringMessageTextIndex = peerNamespacesRequiringMessageTextIndex
self.peerSummaryCounterTags = peerSummaryCounterTags
self.additionalChatListIndexNamespace = additionalChatListIndexNamespace
self.messageNamespacesRequiringGroupStatsValidation = messageNamespacesRequiringGroupStatsValidation
self.defaultMessageNamespaceReadStates = defaultMessageNamespaceReadStates
self.chatMessagesNamespaces = chatMessagesNamespaces
self.globalNotificationSettingsPreferencesKey = globalNotificationSettingsPreferencesKey
self.defaultGlobalNotificationSettings = defaultGlobalNotificationSettings
}
}