Refactoring

This commit is contained in:
Ali
2022-05-29 21:09:11 +04:00
parent 5eb4bbeaae
commit dfad27f9e8
24 changed files with 344 additions and 258 deletions

View File

@@ -2,7 +2,7 @@ import SwiftSignalKit
import Postbox
public final class EngineTotalReadCounters {
private let state: ChatListTotalUnreadState
fileprivate let state: ChatListTotalUnreadState
public init(state: ChatListTotalUnreadState) {
self.state = state
@@ -13,8 +13,14 @@ public final class EngineTotalReadCounters {
}
}
public extension EngineTotalReadCounters {
func _asCounters() -> ChatListTotalUnreadState {
return self.state
}
}
public struct EnginePeerReadCounters: Equatable {
private let state: CombinedPeerReadState?
fileprivate let state: CombinedPeerReadState?
public init(state: CombinedPeerReadState?) {
self.state = state
@@ -64,6 +70,10 @@ public extension EnginePeerReadCounters {
init(incomingReadId: EngineMessage.Id.Id, outgoingReadId: EngineMessage.Id.Id, count: Int32, markedUnread: Bool) {
self.init(state: CombinedPeerReadState(states: [(Namespaces.Message.Cloud, .idBased(maxIncomingReadId: incomingReadId, maxOutgoingReadId: outgoingReadId, maxKnownId: max(incomingReadId, outgoingReadId), count: count, markedUnread: markedUnread))]))
}
func _asReadCounters() -> CombinedPeerReadState? {
return self.state
}
}
public extension TelegramEngine.EngineData.Item {
@@ -260,5 +270,63 @@ public extension TelegramEngine.EngineData.Item {
return view.inclusion.groupId.flatMap(EngineChatList.Group.init)
}
}
public struct MessageCount: TelegramEngineDataItem, TelegramEngineMapKeyDataItem, PostboxViewDataItem {
public struct ItemKey: Hashable {
public var peerId: EnginePeer.Id
public var tag: MessageTags
}
public typealias Result = Int?
fileprivate var peerId: EnginePeer.Id
fileprivate var tag: MessageTags
public var mapKey: ItemKey {
return ItemKey(peerId: self.peerId, tag: self.tag)
}
public init(peerId: EnginePeer.Id, tag: MessageTags) {
self.peerId = peerId
self.tag = tag
}
var key: PostboxViewKey {
return .historyTagSummaryView(tag: tag, peerId: peerId, namespace: Namespaces.Message.Cloud)
}
func extract(view: PostboxView) -> Result {
guard let view = view as? MessageHistoryTagSummaryView else {
preconditionFailure()
}
return view.count.flatMap(Int.init)
}
}
public struct TopMessage: TelegramEngineDataItem, TelegramEngineMapKeyDataItem, PostboxViewDataItem {
public typealias Result = EngineMessage?
fileprivate var id: EnginePeer.Id
public var mapKey: EnginePeer.Id {
return self.id
}
public init(id: EnginePeer.Id) {
self.id = id
}
var key: PostboxViewKey {
return .topChatMessage(peerIds: [self.id])
}
func extract(view: PostboxView) -> Result {
guard let view = view as? TopChatMessageView else {
preconditionFailure()
}
guard let message = view.messages[self.id] else {
return nil
}
return EngineMessage(message)
}
}
}
}

View File

@@ -2,6 +2,7 @@ import SwiftSignalKit
import Postbox
public typealias EngineExportedPeerInvitation = ExportedInvitation
public typealias EngineSecretChatKeyFingerprint = SecretChatKeyFingerprint
public enum EnginePeerCachedInfoItem<T> {
case known(T)
@@ -782,5 +783,34 @@ public extension TelegramEngine.EngineData.Item {
}
}
}
public struct SecretChatKeyFingerprint: TelegramEngineDataItem, TelegramEngineMapKeyDataItem, PostboxViewDataItem {
public typealias Result = EngineSecretChatKeyFingerprint?
fileprivate var id: EnginePeer.Id
public var mapKey: EnginePeer.Id {
return self.id
}
public init(id: EnginePeer.Id) {
self.id = id
}
var key: PostboxViewKey {
return .peerChatState(peerId: self.id)
}
func extract(view: PostboxView) -> Result {
guard let view = view as? PeerChatStateView else {
preconditionFailure()
}
if let peerChatState = view.chatState?.getLegacy() as? SecretChatState {
return peerChatState.keyFingerprint
} else {
return nil
}
}
}
}
}

View File

@@ -95,6 +95,37 @@ public final class EngineDataList<Item: TelegramEngineDataItem & TelegramEngineM
}
}
public final class EngineDataOptional<Item: TelegramEngineDataItem>: TelegramEngineDataItem, AnyPostboxViewDataItem {
public typealias Result = Item.Result?
private let item: Item?
public init(_ item: Item?) {
self.item = item
}
var keys: [PostboxViewKey] {
var keys = Set<PostboxViewKey>()
if let item = self.item {
for key in (item as! AnyPostboxViewDataItem).keys {
keys.insert(key)
}
}
return Array(keys)
}
func _extract(views: [PostboxViewKey: PostboxView]) -> Any {
var result: [Item.Result] = []
if let item = self.item {
let itemResult = (item as! AnyPostboxViewDataItem)._extract(views: views)
result.append(itemResult as! Item.Result)
}
return result
}
}
public extension TelegramEngine {
final class EngineData {
public struct Item {