no message

This commit is contained in:
Peter Iakovlev 2018-01-24 01:05:05 +04:00
parent 05452bdac0
commit 6f5513f01a
4 changed files with 43 additions and 1 deletions

View File

@ -732,11 +732,14 @@ final class MutableChatListView {
}
public final class ChatListView {
public let groupId: PeerGroupId?
public let entries: [ChatListEntry]
public let earlierIndex: ChatListIndex?
public let laterIndex: ChatListIndex?
init(_ mutableView: MutableChatListView) {
self.groupId = mutableView.groupId
var entries: [ChatListEntry] = []
for entry in mutableView.entries {
switch entry {

View File

@ -176,6 +176,32 @@ final class GroupFeedIndexTable: Table {
}
}
func addHoleFromLatestEntries(groupId: PeerGroupId, messageHistoryTable: MessageHistoryTable, operations: inout [PeerGroupId: [GroupFeedIndexOperation]]) {
self.ensureInitialized(groupId)
let entries = self.entriesInRange(groupId: groupId, fromIndex: MessageIndex.absoluteUpperBound(), toIndex: MessageIndex.absoluteLowerBound(), count: 1, messageHistoryTable: messageHistoryTable)
if let entry = entries.first {
switch entry {
case .Message:
self.addHole(groupId: groupId, stableId: self.metadataTable.getNextStableMessageIndexId(), hole: GroupFeedIndexHole(lowerIndex: entry.index.successor(), upperIndex: MessageIndex.absoluteUpperBound().predecessor()), addOperation: { groupId, operation in
addOperation(groupId: groupId, operation: operation, to: &operations)
})
case let .Hole(hole, lowerIndex):
if hole.maxIndex.timestamp != Int32.max {
if let lowerIndex = lowerIndex {
self.removeHole(groupId: groupId, messageIndex: entry.index, addOperation: { groupId, operation in
addOperation(groupId: groupId, operation: operation, to: &operations)
})
self.addHole(groupId: groupId, stableId: self.metadataTable.getNextStableMessageIndexId(), hole: GroupFeedIndexHole(lowerIndex: lowerIndex, upperIndex: MessageIndex.absoluteUpperBound().predecessor()), addOperation: { groupId, operation in
addOperation(groupId: groupId, operation: operation, to: &operations)
})
} else {
assertionFailure()
}
}
}
}
}
private func addHole(groupId: PeerGroupId, stableId: UInt32, hole: GroupFeedIndexHole, addOperation: (PeerGroupId, GroupFeedIndexOperation) -> Void) {
self.ensureInitialized(groupId)

View File

@ -508,6 +508,10 @@ public final class Message {
self.associatedMessageIds = associatedMessageIds
}
public func withUpdatedFlags(_ flags: MessageFlags) -> Message {
return Message(stableId: self.stableId, stableVersion: self.stableVersion, id: self.id, globallyUniqueId: self.globallyUniqueId, groupingKey: self.groupingKey, groupInfo: self.groupInfo, timestamp: self.timestamp, flags: flags, tags: self.tags, globalTags: self.globalTags, localTags: self.localTags, forwardInfo: self.forwardInfo, author: self.author, text: self.text, attributes: self.attributes, media: self.media, peers: self.peers, associatedMessages: self.associatedMessages, associatedMessageIds: self.associatedMessageIds)
}
func withUpdatedGroupInfo(_ groupInfo: MessageGroupInfo?) -> Message {
return Message(stableId: self.stableId, stableVersion: self.stableVersion, id: self.id, globallyUniqueId: self.globallyUniqueId, groupingKey: self.groupingKey, groupInfo: groupInfo, timestamp: self.timestamp, flags: self.flags, tags: self.tags, globalTags: self.globalTags, localTags: self.localTags, forwardInfo: self.forwardInfo, author: self.author, text: self.text, attributes: self.attributes, media: self.media, peers: self.peers, associatedMessages: self.associatedMessages, associatedMessageIds: self.associatedMessageIds)
}

View File

@ -57,6 +57,11 @@ public final class Modifier {
self.postbox?.fillMultipleGroupFeedHoles(groupId: groupId, mainHoleMaxIndex: mainHoleMaxIndex, fillType: fillType, messages: messages)
}
public func addFeedHoleFromLatestEntries(groupId: PeerGroupId) {
assert(!self.disposed)
self.postbox?.addFeedHoleFromLatestEntries(groupId: groupId)
}
public func replaceChatListHole(groupId: PeerGroupId?, index: MessageIndex, hole: ChatListHole?) {
assert(!self.disposed)
self.postbox?.replaceChatListHole(groupId: groupId, index: index, hole: hole)
@ -830,7 +835,7 @@ public func openPostbox(basePath: String, globalMessageIdsNamespace: MessageId.N
#if DEBUG
//debugSaveState(basePath: basePath, name: "previous")
//debugRestoreState(basePath: basePath, name: "previous")
debugRestoreState(basePath: basePath, name: "previous")
#endif
loop: while true {
@ -1379,6 +1384,10 @@ public final class Postbox {
self.currentRemovedHolesByPeerGroupId[groupId]![mainHoleMaxIndex] = fillType.direction
}
fileprivate func addFeedHoleFromLatestEntries(groupId: PeerGroupId) {
self.groupFeedIndexTable.addHoleFromLatestEntries(groupId: groupId, messageHistoryTable: self.messageHistoryTable, operations: &self.currentGroupFeedOperations)
}
fileprivate func replaceChatListHole(groupId: PeerGroupId?, index: MessageIndex, hole: ChatListHole?) {
self.chatListTable.replaceHole(groupId: groupId, index: index, hole: hole, operations: &self.currentChatListOperations)
}