mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-18 01:01:11 +00:00
Various improvements
This commit is contained in:
parent
4fdbe44825
commit
d9a2d06270
@ -14410,3 +14410,5 @@ Sorry for the inconvenience.";
|
|||||||
"Stars.SendMessage.AdjustmentSectionFooterValue" = "You will receive **%@ Stars**.";
|
"Stars.SendMessage.AdjustmentSectionFooterValue" = "You will receive **%@ Stars**.";
|
||||||
"Stars.SendMessage.AdjustmentSectionFooterEmpty" = "You will receive **80%**.";
|
"Stars.SendMessage.AdjustmentSectionFooterEmpty" = "You will receive **80%**.";
|
||||||
"Stars.SendMessage.AdjustmentAction" = "OK";
|
"Stars.SendMessage.AdjustmentAction" = "OK";
|
||||||
|
|
||||||
|
"Stars.SendMessage.PriceFree" = "Free";
|
||||||
|
@ -313,6 +313,7 @@ final class MutableMessageHistoryView: MutablePostboxView {
|
|||||||
private let clipHoles: Bool
|
private let clipHoles: Bool
|
||||||
private let trackHoles: Bool
|
private let trackHoles: Bool
|
||||||
private let anchor: HistoryViewInputAnchor
|
private let anchor: HistoryViewInputAnchor
|
||||||
|
fileprivate var mapReadStatesFromThreads: Bool = false
|
||||||
|
|
||||||
fileprivate var combinedReadStates: MessageHistoryViewReadState?
|
fileprivate var combinedReadStates: MessageHistoryViewReadState?
|
||||||
fileprivate var transientReadStates: MessageHistoryViewReadState?
|
fileprivate var transientReadStates: MessageHistoryViewReadState?
|
||||||
@ -322,6 +323,7 @@ final class MutableMessageHistoryView: MutablePostboxView {
|
|||||||
|
|
||||||
fileprivate var topTaggedMessages: [MessageId.Namespace: MessageHistoryTopTaggedMessage?]
|
fileprivate var topTaggedMessages: [MessageId.Namespace: MessageHistoryTopTaggedMessage?]
|
||||||
fileprivate var additionalDatas: [AdditionalMessageHistoryViewDataEntry]
|
fileprivate var additionalDatas: [AdditionalMessageHistoryViewDataEntry]
|
||||||
|
fileprivate var threadMaxOutgoingReadId: [Int64: Int32] = [:]
|
||||||
|
|
||||||
fileprivate(set) var sampledState: HistoryViewSample
|
fileprivate(set) var sampledState: HistoryViewSample
|
||||||
|
|
||||||
@ -373,8 +375,14 @@ final class MutableMessageHistoryView: MutablePostboxView {
|
|||||||
switch peerIds {
|
switch peerIds {
|
||||||
case let .associated(peerId, _):
|
case let .associated(peerId, _):
|
||||||
self.isAddedToChatList = postbox.chatListTable.getPeerChatListIndex(peerId: peerId) != nil
|
self.isAddedToChatList = postbox.chatListTable.getPeerChatListIndex(peerId: peerId) != nil
|
||||||
case let .single(peerId, _):
|
case let .single(peerId, threadId):
|
||||||
self.isAddedToChatList = postbox.chatListTable.getPeerChatListIndex(peerId: peerId) != nil
|
self.isAddedToChatList = postbox.chatListTable.getPeerChatListIndex(peerId: peerId) != nil
|
||||||
|
if threadId == nil, let peer = postbox.peerTable.get(peerId) {
|
||||||
|
let value = postbox.seedConfiguration.peerSummaryIsThreadBased(peer, peer.associatedPeerId.flatMap(postbox.peerTable.get))
|
||||||
|
if value.value && value.threadsArePeers {
|
||||||
|
self.mapReadStatesFromThreads = true
|
||||||
|
}
|
||||||
|
}
|
||||||
case let .external(input):
|
case let .external(input):
|
||||||
switch input.content {
|
switch input.content {
|
||||||
case let .thread(peerId, _, _):
|
case let .thread(peerId, _, _):
|
||||||
@ -401,6 +409,8 @@ final class MutableMessageHistoryView: MutablePostboxView {
|
|||||||
|
|
||||||
self.render(postbox: postbox)
|
self.render(postbox: postbox)
|
||||||
let _ = self.updateStoryStats(postbox: postbox)
|
let _ = self.updateStoryStats(postbox: postbox)
|
||||||
|
|
||||||
|
let _ = self.updateThreadInfos(postbox: postbox, updatedIds: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func reset(postbox: PostboxImpl) {
|
private func reset(postbox: PostboxImpl) {
|
||||||
@ -1023,9 +1033,81 @@ final class MutableMessageHistoryView: MutablePostboxView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !transaction.updatedPeerThreadInfos.isEmpty {
|
||||||
|
if self.updateThreadInfos(postbox: postbox, updatedIds: transaction.updatedPeerThreadInfos) {
|
||||||
|
hasChanges = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return hasChanges
|
return hasChanges
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func updateThreadInfos(postbox: PostboxImpl, updatedIds: Set<MessageHistoryThreadsTable.ItemId>?) -> Bool {
|
||||||
|
if self.mapReadStatesFromThreads, case let .single(peerId, peerThreadId) = self.peerIds, peerThreadId == nil {
|
||||||
|
switch self.sampledState {
|
||||||
|
case .loading:
|
||||||
|
if !self.threadMaxOutgoingReadId.isEmpty {
|
||||||
|
self.threadMaxOutgoingReadId.removeAll()
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case let .loaded(loaded):
|
||||||
|
//TODO:release
|
||||||
|
let currentIds = Set<Int64>(self.threadMaxOutgoingReadId.keys)
|
||||||
|
|
||||||
|
var threadIds: Set<Int64> = []
|
||||||
|
for entry in loaded.entries {
|
||||||
|
if let threadId = entry.message.threadId {
|
||||||
|
threadIds.insert(threadId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var updated = false
|
||||||
|
if currentIds != threadIds {
|
||||||
|
updated = true
|
||||||
|
|
||||||
|
for id in currentIds.subtracting(threadIds) {
|
||||||
|
self.threadMaxOutgoingReadId.removeValue(forKey: id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for threadId in threadIds {
|
||||||
|
var fetch = false
|
||||||
|
if let updatedIds {
|
||||||
|
if updatedIds.contains(MessageHistoryThreadsTable.ItemId(peerId: peerId, threadId: threadId)) {
|
||||||
|
fetch = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fetch = self.threadMaxOutgoingReadId[threadId] == nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if fetch {
|
||||||
|
var maxOutgoingReadId: Int32?
|
||||||
|
if let threadData = postbox.messageHistoryThreadIndexTable.get(peerId: peerId, threadId: threadId) {
|
||||||
|
maxOutgoingReadId = threadData.summary.maxOutgoingReadId
|
||||||
|
}
|
||||||
|
|
||||||
|
let current = self.threadMaxOutgoingReadId[threadId]
|
||||||
|
if let maxOutgoingReadId {
|
||||||
|
if current != maxOutgoingReadId {
|
||||||
|
self.threadMaxOutgoingReadId[threadId] = maxOutgoingReadId
|
||||||
|
updated = true
|
||||||
|
}
|
||||||
|
} else if current != nil {
|
||||||
|
self.threadMaxOutgoingReadId.removeValue(forKey: threadId)
|
||||||
|
updated = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return updated
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func render(postbox: PostboxImpl) {
|
private func render(postbox: PostboxImpl) {
|
||||||
for namespace in self.topTaggedMessages.keys {
|
for namespace in self.topTaggedMessages.keys {
|
||||||
if let entry = self.topTaggedMessages[namespace]!, case let .intermediate(message) = entry {
|
if let entry = self.topTaggedMessages[namespace]!, case let .intermediate(message) = entry {
|
||||||
@ -1166,7 +1248,20 @@ public final class MessageHistoryView: PostboxView {
|
|||||||
}
|
}
|
||||||
self.isLoadingEarlier = isLoadingEarlier
|
self.isLoadingEarlier = isLoadingEarlier
|
||||||
entries = []
|
entries = []
|
||||||
if let transientReadStates = mutableView.transientReadStates, case let .peer(states) = transientReadStates {
|
if mutableView.mapReadStatesFromThreads {
|
||||||
|
for entry in state.entries {
|
||||||
|
if mutableView.namespaces.contains(entry.message.id.namespace) {
|
||||||
|
var read = false
|
||||||
|
if let threadId = entry.message.threadId {
|
||||||
|
if let maxId = mutableView.threadMaxOutgoingReadId[threadId] {
|
||||||
|
read = entry.message.id.id <= maxId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entries.append(MessageHistoryEntry(message: entry.message, isRead: read, location: entry.location, monthLocation: entry.monthLocation, attributes: entry.attributes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if let transientReadStates = mutableView.transientReadStates, case let .peer(states) = transientReadStates {
|
||||||
for entry in state.entries {
|
for entry in state.entries {
|
||||||
if mutableView.namespaces.contains(entry.message.id.namespace) {
|
if mutableView.namespaces.contains(entry.message.id.namespace) {
|
||||||
let read: Bool
|
let read: Bool
|
||||||
|
@ -1308,6 +1308,7 @@ final class HistoryViewLoadedState {
|
|||||||
let halfLimit: Int
|
let halfLimit: Int
|
||||||
let seedConfiguration: SeedConfiguration
|
let seedConfiguration: SeedConfiguration
|
||||||
var orderedEntriesBySpace: [PeerIdAndNamespace: OrderedHistoryViewEntries]
|
var orderedEntriesBySpace: [PeerIdAndNamespace: OrderedHistoryViewEntries]
|
||||||
|
var threadSummaries: [Int64: Int32]
|
||||||
var holes: HistoryViewHoles
|
var holes: HistoryViewHoles
|
||||||
var spacesWithRemovals = Set<PeerIdAndNamespace>()
|
var spacesWithRemovals = Set<PeerIdAndNamespace>()
|
||||||
|
|
||||||
@ -1321,6 +1322,7 @@ final class HistoryViewLoadedState {
|
|||||||
self.halfLimit = halfLimit
|
self.halfLimit = halfLimit
|
||||||
self.seedConfiguration = postbox.seedConfiguration
|
self.seedConfiguration = postbox.seedConfiguration
|
||||||
self.orderedEntriesBySpace = [:]
|
self.orderedEntriesBySpace = [:]
|
||||||
|
self.threadSummaries = [:]
|
||||||
self.holes = holes
|
self.holes = holes
|
||||||
|
|
||||||
var peerIds: [PeerId] = []
|
var peerIds: [PeerId] = []
|
||||||
@ -1854,6 +1856,7 @@ final class HistoryViewLoadedState {
|
|||||||
var holesToLower = false
|
var holesToLower = false
|
||||||
var holesToHigher = false
|
var holesToHigher = false
|
||||||
var result: [MessageHistoryMessageEntry] = []
|
var result: [MessageHistoryMessageEntry] = []
|
||||||
|
|
||||||
if combinedSpacesAndIndicesByDirection.lowerOrAtAnchor.isEmpty && combinedSpacesAndIndicesByDirection.higherThanAnchor.isEmpty {
|
if combinedSpacesAndIndicesByDirection.lowerOrAtAnchor.isEmpty && combinedSpacesAndIndicesByDirection.higherThanAnchor.isEmpty {
|
||||||
if !clipRanges.isEmpty {
|
if !clipRanges.isEmpty {
|
||||||
holesToLower = true
|
holesToLower = true
|
||||||
|
@ -368,8 +368,7 @@ private class MessagePriceItemNode: ListViewItemNode {
|
|||||||
strongSelf.leftTextNode.attributedText = NSAttributedString(string: "\(item.minValue)", font: Font.regular(13.0), textColor: item.theme.list.itemSecondaryTextColor)
|
strongSelf.leftTextNode.attributedText = NSAttributedString(string: "\(item.minValue)", font: Font.regular(13.0), textColor: item.theme.list.itemSecondaryTextColor)
|
||||||
strongSelf.rightTextNode.attributedText = NSAttributedString(string: "\(item.maxValue)", font: Font.regular(13.0), textColor: item.theme.list.itemSecondaryTextColor)
|
strongSelf.rightTextNode.attributedText = NSAttributedString(string: "\(item.maxValue)", font: Font.regular(13.0), textColor: item.theme.list.itemSecondaryTextColor)
|
||||||
|
|
||||||
//TODO:localize
|
let centralLeftText = item.value == 0 ? item.strings.Stars_SendMessage_PriceFree : item.strings.Privacy_Messages_Stars(Int32(item.value))
|
||||||
let centralLeftText = item.value == 0 ? "Free" : item.strings.Privacy_Messages_Stars(Int32(item.value))
|
|
||||||
|
|
||||||
strongSelf.centerLeftTextNode.attributedText = NSAttributedString(string: centralLeftText, font: textFont, textColor: item.openSetCustom != nil ? item.theme.list.itemAccentColor : item.theme.list.itemPrimaryTextColor)
|
strongSelf.centerLeftTextNode.attributedText = NSAttributedString(string: centralLeftText, font: textFont, textColor: item.openSetCustom != nil ? item.theme.list.itemAccentColor : item.theme.list.itemPrimaryTextColor)
|
||||||
strongSelf.centerRightTextNode.attributedText = NSAttributedString(string: item.price, font: smallTextFont, textColor: item.openSetCustom != nil ? item.theme.list.itemAccentColor.withMultipliedAlpha(0.5) : item.theme.list.itemSecondaryTextColor)
|
strongSelf.centerRightTextNode.attributedText = NSAttributedString(string: item.price, font: smallTextFont, textColor: item.openSetCustom != nil ? item.theme.list.itemAccentColor.withMultipliedAlpha(0.5) : item.theme.list.itemSecondaryTextColor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user