mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
[WIP] Saved tags
This commit is contained in:
@@ -305,7 +305,7 @@ public enum HistoryViewInputAnchor: Equatable {
|
||||
final class MutableMessageHistoryView {
|
||||
private(set) var peerIds: MessageHistoryViewInput
|
||||
private let ignoreMessagesInTimestampRange: ClosedRange<Int32>?
|
||||
let tag: MessageTags?
|
||||
let tag: HistoryViewInputTag?
|
||||
private let appendMessagesFromTheSameGroup: Bool
|
||||
let namespaces: MessageIdNamespaces
|
||||
private let orderStatistics: MessageHistoryViewOrderStatistics
|
||||
@@ -338,7 +338,7 @@ final class MutableMessageHistoryView {
|
||||
anchor inputAnchor: HistoryViewInputAnchor,
|
||||
combinedReadStates: MessageHistoryViewReadState?,
|
||||
transientReadStates: MessageHistoryViewReadState?,
|
||||
tag: MessageTags?,
|
||||
tag: HistoryViewInputTag?,
|
||||
appendMessagesFromTheSameGroup: Bool,
|
||||
namespaces: MessageIdNamespaces,
|
||||
count: Int,
|
||||
@@ -501,7 +501,6 @@ final class MutableMessageHistoryView {
|
||||
|
||||
var hasChanges = false
|
||||
|
||||
let unwrappedTag: MessageTags = self.tag ?? []
|
||||
let externalThreadId: Int64?
|
||||
let isExternal: Bool
|
||||
switch self.peerIds {
|
||||
@@ -530,9 +529,15 @@ final class MutableMessageHistoryView {
|
||||
if !isExternal {
|
||||
switch key.space {
|
||||
case .everywhere:
|
||||
matchesSpace = unwrappedTag.isEmpty
|
||||
if self.tag == nil {
|
||||
matchesSpace = true
|
||||
}
|
||||
case let .tag(tag):
|
||||
if let currentTag = self.tag, currentTag == tag {
|
||||
if case let .tag(currentTag) = self.tag, currentTag == tag {
|
||||
matchesSpace = true
|
||||
}
|
||||
case let .customTag(customTag):
|
||||
if case let .customTag(currentTag) = self.tag, currentTag == customTag {
|
||||
matchesSpace = true
|
||||
}
|
||||
}
|
||||
@@ -572,15 +577,42 @@ final class MutableMessageHistoryView {
|
||||
switch operation {
|
||||
case let .InsertMessage(message):
|
||||
var matchesTag = false
|
||||
if unwrappedTag.isEmpty {
|
||||
|
||||
switch self.tag {
|
||||
case .none:
|
||||
matchesTag = true
|
||||
} else if message.tags.contains(unwrappedTag) {
|
||||
matchesTag = true
|
||||
} else if self.appendMessagesFromTheSameGroup, let _ = message.groupInfo {
|
||||
if let group = postbox.messageHistoryTable.getMessageGroup(at: message.index, limit: 20) {
|
||||
for groupMessage in group {
|
||||
if groupMessage.tags.contains(unwrappedTag) {
|
||||
matchesTag = true
|
||||
case let .tag(value):
|
||||
if message.tags.contains(value) {
|
||||
matchesTag = true
|
||||
}
|
||||
case let .customTag(value):
|
||||
if message.customTags.contains(value) {
|
||||
matchesTag = true
|
||||
}
|
||||
}
|
||||
|
||||
if !matchesTag {
|
||||
if self.appendMessagesFromTheSameGroup, let _ = message.groupInfo {
|
||||
if let group = postbox.messageHistoryTable.getMessageGroup(at: message.index, limit: 20) {
|
||||
for groupMessage in group {
|
||||
var groupMatchesTag = false
|
||||
|
||||
switch self.tag {
|
||||
case .none:
|
||||
matchesTag = true
|
||||
case let .tag(value):
|
||||
if groupMessage.tags.contains(value) {
|
||||
groupMatchesTag = true
|
||||
}
|
||||
case let .customTag(value):
|
||||
if groupMessage.customTags.contains(value) {
|
||||
groupMatchesTag = true
|
||||
}
|
||||
}
|
||||
|
||||
if groupMatchesTag {
|
||||
matchesTag = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -637,14 +669,35 @@ final class MutableMessageHistoryView {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var currentThreadId: Int64?
|
||||
switch self.peerIds {
|
||||
case let .single(_, threadIdValue):
|
||||
currentThreadId = threadIdValue
|
||||
case .associated:
|
||||
break
|
||||
case .external:
|
||||
break
|
||||
}
|
||||
|
||||
for (key, holeOperations) in transaction.currentPeerHoleOperations {
|
||||
if key.threadId != currentThreadId {
|
||||
continue
|
||||
}
|
||||
|
||||
var matchesSpace = false
|
||||
if !isExternal {
|
||||
switch key.space {
|
||||
case .everywhere:
|
||||
matchesSpace = unwrappedTag.isEmpty
|
||||
if self.tag == nil {
|
||||
matchesSpace = true
|
||||
}
|
||||
case let .tag(tag):
|
||||
if let currentTag = self.tag, currentTag == tag {
|
||||
if case let .tag(currentTag) = self.tag, currentTag == tag {
|
||||
matchesSpace = true
|
||||
}
|
||||
case let .customTag(customTag):
|
||||
if case let .customTag(currentTag) = self.tag, currentTag == customTag {
|
||||
matchesSpace = true
|
||||
}
|
||||
}
|
||||
@@ -906,7 +959,18 @@ final class MutableMessageHistoryView {
|
||||
case .external:
|
||||
break
|
||||
}
|
||||
let space: MessageHistoryHoleSpace = self.tag.flatMap(MessageHistoryHoleSpace.tag) ?? .everywhere
|
||||
let space: MessageHistoryHoleOperationSpace
|
||||
if let tag = self.tag {
|
||||
switch tag {
|
||||
case let .tag(value):
|
||||
space = .tag(value)
|
||||
case let .customTag(value):
|
||||
space = .customTag(value)
|
||||
}
|
||||
} else {
|
||||
space = .everywhere
|
||||
}
|
||||
|
||||
for key in transaction.currentPeerHoleOperations.keys {
|
||||
if holePeerIdsSet.contains(key.peerId) && threadId == key.threadId && key.space == space {
|
||||
hasChanges = true
|
||||
@@ -984,7 +1048,7 @@ final class MutableMessageHistoryView {
|
||||
}
|
||||
|
||||
public final class MessageHistoryView {
|
||||
public let tagMask: MessageTags?
|
||||
public let tag: HistoryViewInputTag?
|
||||
public let namespaces: MessageIdNamespaces
|
||||
public let anchorIndex: MessageHistoryAnchorIndex
|
||||
public let earlierId: MessageIndex?
|
||||
@@ -1002,8 +1066,8 @@ public final class MessageHistoryView {
|
||||
public let isAddedToChatList: Bool
|
||||
public let peerStoryStats: [PeerId: PeerStoryStats]
|
||||
|
||||
public init(tagMask: MessageTags?, namespaces: MessageIdNamespaces, entries: [MessageHistoryEntry], holeEarlier: Bool, holeLater: Bool, isLoading: Bool) {
|
||||
self.tagMask = tagMask
|
||||
public init(tag: HistoryViewInputTag?, namespaces: MessageIdNamespaces, entries: [MessageHistoryEntry], holeEarlier: Bool, holeLater: Bool, isLoading: Bool) {
|
||||
self.tag = tag
|
||||
self.namespaces = namespaces
|
||||
self.anchorIndex = .lowerBound
|
||||
self.earlierId = nil
|
||||
@@ -1023,7 +1087,7 @@ public final class MessageHistoryView {
|
||||
}
|
||||
|
||||
init(_ mutableView: MutableMessageHistoryView) {
|
||||
self.tagMask = mutableView.tag
|
||||
self.tag = mutableView.tag
|
||||
self.namespaces = mutableView.namespaces
|
||||
self.isAddedToChatList = mutableView.isAddedToChatList
|
||||
var entries: [MessageHistoryEntry]
|
||||
@@ -1248,7 +1312,7 @@ public final class MessageHistoryView {
|
||||
}
|
||||
|
||||
public init(base: MessageHistoryView, fixed combinedReadStates: MessageHistoryViewReadState?, transient transientReadStates: MessageHistoryViewReadState?) {
|
||||
self.tagMask = base.tagMask
|
||||
self.tag = base.tag
|
||||
self.namespaces = base.namespaces
|
||||
self.anchorIndex = base.anchorIndex
|
||||
self.earlierId = base.earlierId
|
||||
|
||||
Reference in New Issue
Block a user