Various fixes

This commit is contained in:
Ilya Laktyushin 2026-03-28 15:55:50 +01:00
parent 784b43934a
commit 265b502f76
11 changed files with 109 additions and 53 deletions

View file

@ -229,7 +229,7 @@ private func mappedInsertEntries(context: AccountContext, chatLocation: ChatLoca
switch mode {
case .bubbles:
item = ChatMessageItemImpl(presentationData: presentationData, context: context, chatLocation: chatLocation, associatedData: associatedData, controllerInteraction: controllerInteraction, content: .message(message: message, read: read, selection: selection, attributes: attributes, location: location), disableDate: disableFloatingDateHeaders || message.timestamp < 10)
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch):
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch, _):
let displayHeader: Bool
switch displayHeaders {
case .none:
@ -284,7 +284,7 @@ private func mappedUpdateEntries(context: AccountContext, chatLocation: ChatLoca
switch mode {
case .bubbles:
item = ChatMessageItemImpl(presentationData: presentationData, context: context, chatLocation: chatLocation, associatedData: associatedData, controllerInteraction: controllerInteraction, content: .message(message: message, read: read, selection: selection, attributes: attributes, location: location), disableDate: disableFloatingDateHeaders || message.timestamp < 10)
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch):
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch, _):
let displayHeader: Bool
switch displayHeaders {
case .none:
@ -676,6 +676,9 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
private var messageReadMetricsTrackerPendingMetrics: [TelegramMessageReadMetric] = []
private var messageReadMetricsTrackerPendingMetricTimer: Foundation.Timer?
public private(set) var hasAnyMessages: Bool = false
public var hasAnyMessagesUpdated: ((Bool) -> Void)?
public private(set) var hasAtLeast3Messages: Bool = false
public var hasAtLeast3MessagesUpdated: ((Bool) -> Void)?
@ -2051,9 +2054,11 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
var reverse = false
var reverseGroups = false
if case let .list(reverseValue, reverseGroupsValue, _, _, _) = mode {
var isMusicPlaylist = false
if case let .list(reverseValue, reverseGroupsValue, _, _, _, isMusicPlaylistValue) = mode {
reverse = reverseValue
reverseGroups = reverseGroupsValue
isMusicPlaylist = isMusicPlaylistValue
}
var isPremium = false
@ -2108,9 +2113,8 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
if case let .replyThread(message) = chatLocation, message.peerId == context.account.peerId, !rotated {
includeEmbeddedSavedChatInfo = true
}
let previousChatHistoryEntriesForViewState = chatHistoryEntriesForViewState.with({ $0 })
let (filteredEntries, updatedChatHistoryEntriesForViewState) = chatHistoryEntriesForView(
currentState: previousChatHistoryEntriesForViewState,
context: context,
@ -2136,7 +2140,8 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
customThreadOutgoingReadState: customThreadOutgoingReadState,
cachedData: data.cachedData,
adMessage: allAdMessages.fixed,
dynamicAdMessages: allAdMessages.opportunistic
dynamicAdMessages: allAdMessages.opportunistic,
isMusicPlaylist: isMusicPlaylist
)
let lastHeaderId = filteredEntries.last.flatMap { listMessageDateHeaderId(timestamp: $0.index.timestamp) } ?? 0
let processedView = ChatHistoryView(originalView: view, filteredEntries: filteredEntries, associatedData: associatedData, lastHeaderId: lastHeaderId, id: id, locationInput: update.2, ignoreMessagesInTimestampRange: update.3, ignoreMessageIds: update.4)
@ -4095,15 +4100,20 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
}
}
var hasAnyMessages = false
var hasAtLeast3Messages = false
var hasPlentyOfMessages = false
var hasLotsOfMessages = false
if let historyView = strongSelf.historyView {
if historyView.originalView.holeEarlier || historyView.originalView.holeLater {
hasAnyMessages = true
hasAtLeast3Messages = true
hasPlentyOfMessages = true
hasLotsOfMessages = true
} else if !historyView.originalView.holeEarlier && !historyView.originalView.holeLater {
if historyView.filteredEntries.count >= 1 {
hasAnyMessages = true
}
if historyView.filteredEntries.count >= 3 {
hasAtLeast3Messages = true
}
@ -4116,6 +4126,11 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
}
}
if strongSelf.hasAnyMessages != hasAnyMessages {
strongSelf.hasAnyMessages = hasAnyMessages
strongSelf.hasAnyMessagesUpdated?(hasAnyMessages)
}
if strongSelf.hasAtLeast3Messages != hasAtLeast3Messages {
strongSelf.hasAtLeast3Messages = hasAtLeast3Messages
strongSelf.hasAtLeast3MessagesUpdated?(hasAtLeast3Messages)
@ -4681,7 +4696,7 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
switch self.mode {
case .bubbles:
item = ChatMessageItemImpl(presentationData: presentationData, context: self.context, chatLocation: self.chatLocation, associatedData: associatedData, controllerInteraction: self.controllerInteraction, content: .message(message: message, read: read, selection: selection, attributes: attributes, location: location), disableDate: disableFloatingDateHeaders)
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch):
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch, _):
let displayHeader: Bool
switch displayHeaders {
case .none:
@ -4759,7 +4774,7 @@ public final class ChatHistoryListNodeImpl: ListViewImpl, ChatHistoryNode, ChatH
switch self.mode {
case .bubbles:
item = ChatMessageItemImpl(presentationData: presentationData, context: self.context, chatLocation: self.chatLocation, associatedData: associatedData, controllerInteraction: self.controllerInteraction, content: .message(message: message, read: read, selection: selection, attributes: attributes, location: location), disableDate: disableFloatingDateHeaders)
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch):
case let .list(_, _, displayHeaders, hintLinks, isGlobalSearch, _):
let displayHeader: Bool
switch displayHeaders {
case .none: