mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Merge commit 'e6ba681c030590e5fa095f9828610889abf08ef3'
This commit is contained in:
@@ -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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user