mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Refactoring
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user