Merge commit 'e6ba681c030590e5fa095f9828610889abf08ef3'

This commit is contained in:
Isaac
2023-12-20 14:06:25 +04:00
99 changed files with 2342 additions and 1244 deletions

View File

@@ -427,7 +427,7 @@ public final class EngineStoryViewListContext {
let sortMode = self.sortMode
let searchQuery = self.searchQuery
let currentOffset = state.nextOffset
let limit = state.items.isEmpty ? 50 : 100
let limit = 50
let signal: Signal<InternalState, NoError>
@@ -662,6 +662,9 @@ public final class EngineStoryViewListContext {
}
var flags: Int32 = 0
if let _ = currentOffset {
flags |= (1 << 1)
}
if case .repostsFirst = sortMode {
flags |= (1 << 2)
}
@@ -887,4 +890,3 @@ public final class EngineStoryViewListContext {
}
}
}

View File

@@ -14,7 +14,11 @@ public enum GetMessagesStrategy {
case cloud(skipLocal: Bool)
}
func _internal_getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Postbox, network: Network, accountPeerId: PeerId, strategy: GetMessagesStrategy = .cloud(skipLocal: false)) -> Signal<GetMessagesResult, NoError> {
public enum GetMessagesError {
case privateChannel
}
func _internal_getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Postbox, network: Network, accountPeerId: PeerId, strategy: GetMessagesStrategy = .cloud(skipLocal: false)) -> Signal<GetMessagesResult, GetMessagesError> {
let postboxSignal = postbox.transaction { transaction -> ([Message], Set<MessageId>, SimpleDictionary<PeerId, Peer>) in
var ids = messageIds
@@ -50,8 +54,9 @@ func _internal_getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Po
if case .cloud = strategy {
return postboxSignal
|> castError(GetMessagesError.self)
|> mapToSignal { (existMessages, missingMessageIds, supportPeers) in
var signals: [Signal<(Peer, [Api.Message], [Api.Chat], [Api.User]), NoError>] = []
var signals: [Signal<(Peer, [Api.Message], [Api.Chat], [Api.User]), GetMessagesError>] = []
for (peerId, messageIds) in messagesIdsGroupedByPeerId(missingMessageIds) {
if let peer = supportPeers[peerId] {
var signal: Signal<Api.messages.Messages, MTRpcError>?
@@ -75,14 +80,20 @@ func _internal_getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Po
case .messagesNotModified:
return (peer, [], [], [])
}
} |> `catch` { _ in
return Signal<(Peer, [Api.Message], [Api.Chat], [Api.User]), NoError>.single((peer, [], [], []))
} |> `catch` { error in
if error.errorDescription == "CHANNEL_PRIVATE" {
return .fail(.privateChannel)
} else {
return Signal<(Peer, [Api.Message], [Api.Chat], [Api.User]), GetMessagesError>.single((peer, [], [], []))
}
})
}
}
}
return .single(.progress) |> then(combineLatest(signals) |> mapToSignal { results -> Signal<GetMessagesResult, NoError> in
return .single(.progress)
|> castError(GetMessagesError.self)
|> then(combineLatest(signals) |> mapToSignal { results -> Signal<GetMessagesResult, GetMessagesError> in
return postbox.transaction { transaction -> GetMessagesResult in
for (peer, messages, chats, users) in results {
if !messages.isEmpty {
@@ -108,10 +119,12 @@ func _internal_getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Po
return .result(existMessages + loadedMessages)
}
|> castError(GetMessagesError.self)
})
}
} else {
return postboxSignal
|> castError(GetMessagesError.self)
|> map {
return .result($0.0)
}

View File

@@ -162,7 +162,7 @@ public extension TelegramEngine {
return _internal_markAllChatsAsRead(postbox: self.account.postbox, network: self.account.network, stateManager: self.account.stateManager)
}
public func getMessagesLoadIfNecessary(_ messageIds: [MessageId], strategy: GetMessagesStrategy = .cloud(skipLocal: false)) -> Signal<GetMessagesResult, NoError> {
public func getMessagesLoadIfNecessary(_ messageIds: [MessageId], strategy: GetMessagesStrategy = .cloud(skipLocal: false)) -> Signal<GetMessagesResult, GetMessagesError> {
return _internal_getMessagesLoadIfNecessary(messageIds, postbox: self.account.postbox, network: self.account.network, accountPeerId: self.account.peerId, strategy: strategy)
}

View File

@@ -134,6 +134,8 @@ func _internal_setChatWallpaper(postbox: Postbox, network: Network, stateManager
transaction.updatePeerCachedData(peerIds: Set([peerId]), update: { _, current in
if let current = current as? CachedUserData {
return current.withUpdatedWallpaper(wallpaper)
} else if let current = current as? CachedChannelData {
return current.withUpdatedWallpaper(wallpaper)
} else {
return current
}