mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Various improvements
This commit is contained in:
@@ -535,3 +535,48 @@ extension ChatContextResultCollection {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func requestContextResults(engine: TelegramEngine, botId: EnginePeer.Id, query: String, peerId: EnginePeer.Id, offset: String = "", existingResults: ChatContextResultCollection? = nil, incompleteResults: Bool = false, staleCachedResults: Bool = false, limit: Int = 60) -> Signal<RequestChatContextResultsResult?, NoError> {
|
||||
return engine.messages.requestChatContextResults(botId: botId, peerId: peerId, query: query, offset: offset, incompleteResults: incompleteResults, staleCachedResults: staleCachedResults)
|
||||
|> `catch` { error -> Signal<RequestChatContextResultsResult?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> mapToSignal { resultsStruct -> Signal<RequestChatContextResultsResult?, NoError> in
|
||||
let results = resultsStruct?.results
|
||||
|
||||
var collection = existingResults
|
||||
var updated: Bool = false
|
||||
if let existingResults = existingResults, let results = results {
|
||||
var newResults: [ChatContextResult] = []
|
||||
var existingIds = Set<String>()
|
||||
for result in existingResults.results {
|
||||
newResults.append(result)
|
||||
existingIds.insert(result.id)
|
||||
}
|
||||
for result in results.results {
|
||||
if !existingIds.contains(result.id) {
|
||||
newResults.append(result)
|
||||
existingIds.insert(result.id)
|
||||
updated = true
|
||||
}
|
||||
}
|
||||
collection = ChatContextResultCollection(botId: existingResults.botId, peerId: existingResults.peerId, query: existingResults.query, geoPoint: existingResults.geoPoint, queryId: results.queryId, nextOffset: results.nextOffset, presentation: existingResults.presentation, switchPeer: existingResults.switchPeer, results: newResults, cacheTimeout: existingResults.cacheTimeout)
|
||||
} else {
|
||||
collection = results
|
||||
updated = true
|
||||
}
|
||||
if let collection = collection, collection.results.count < limit, let nextOffset = collection.nextOffset, updated {
|
||||
let nextResults = requestContextResults(engine: engine, botId: botId, query: query, peerId: peerId, offset: nextOffset, existingResults: collection, limit: limit)
|
||||
if collection.results.count > 10 {
|
||||
return .single(RequestChatContextResultsResult(results: collection, isStale: resultsStruct?.isStale ?? false))
|
||||
|> then(nextResults)
|
||||
} else {
|
||||
return nextResults
|
||||
}
|
||||
} else if let collection = collection {
|
||||
return .single(RequestChatContextResultsResult(results: collection, isStale: resultsStruct?.isStale ?? false))
|
||||
} else {
|
||||
return .single(nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user