Use correct datacenter for public forwards fetch

This commit is contained in:
Ilya Laktyushin 2020-07-31 11:59:35 +03:00
parent bdd0ef6285
commit 4aad869532
2 changed files with 15 additions and 4 deletions

View file

@ -209,7 +209,7 @@ public func messageStatsController(context: AccountContext, messageId: MessageId
let previousData = Atomic<MessageStats?>(value: nil)
let searchSignal = searchMessages(account: context.account, location: .publicForwards(messageId), query: "", state: nil)
let searchSignal = searchMessages(account: context.account, location: .publicForwards(messageId: messageId, datacenterId: Int(datacenterId)), query: "", state: nil)
|> map(Optional.init)
|> afterNext { result in
if let result = result {

View file

@ -10,7 +10,7 @@ public enum SearchMessagesLocation: Equatable {
case general
case group(PeerGroupId)
case peer(peerId: PeerId, fromId: PeerId?, tags: MessageTags?)
case publicForwards(MessageId)
case publicForwards(messageId: MessageId, datacenterId: Int?)
}
private struct SearchMessagesPeerState: Equatable {
@ -291,7 +291,7 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q
return .single((nil, nil))
}
}
case let .publicForwards(messageId):
case let .publicForwards(messageId, datacenterId):
remoteSearchResult = account.postbox.transaction { transaction -> (Api.InputChannel?, Int32, MessageIndex?, Api.InputPeer) in
let sourcePeer = transaction.getPeer(messageId.peerId)
let inputChannel = sourcePeer.flatMap { apiInputChannel($0) }
@ -311,7 +311,18 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q
return .complete()
}
return account.network.request(Api.functions.stats.getMessagePublicForwards(channel: inputChannel, msgId: messageId.id, offsetRate: nextRate, offsetPeer: inputPeer, offsetId: lowerBound?.id.id ?? 0, limit: limit), automaticFloodWait: false)
let request = Api.functions.stats.getMessagePublicForwards(channel: inputChannel, msgId: messageId.id, offsetRate: nextRate, offsetPeer: inputPeer, offsetId: lowerBound?.id.id ?? 0, limit: limit)
let signal: Signal<Api.messages.Messages, MTRpcError>
if let datacenterId = datacenterId, account.network.datacenterId != datacenterId {
signal = account.network.download(datacenterId: datacenterId, isMedia: false, tag: nil)
|> castError(MTRpcError.self)
|> mapToSignal { worker in
return worker.request(request)
}
} else {
signal = account.network.request(request, automaticFloodWait: false)
}
return signal
|> map { result -> (Api.messages.Messages?, Api.messages.Messages?) in
return (result, nil)
}