Use server-provided venue search bot configuration

This commit is contained in:
Ilya Laktyushin 2020-07-22 01:19:26 +03:00
parent 715e10fb7f
commit 626d1fae3c
2 changed files with 33 additions and 30 deletions

View File

@ -5,7 +5,6 @@ import Postbox
import Display import Display
import SwiftSignalKit import SwiftSignalKit
import TelegramPresentationData import TelegramPresentationData
import ListSectionHeaderNode
import ItemListUI import ItemListUI
import AppBundle import AppBundle

View File

@ -33,36 +33,40 @@ public func ==(lhs: CLLocationCoordinate2D, rhs: CLLocationCoordinate2D) -> Bool
} }
public func nearbyVenues(account: Account, latitude: Double, longitude: Double, query: String? = nil) -> Signal<[TelegramMediaMap], NoError> { public func nearbyVenues(account: Account, latitude: Double, longitude: Double, query: String? = nil) -> Signal<[TelegramMediaMap], NoError> {
return resolvePeerByName(account: account, name: "foursquare") return account.postbox.transaction { transaction -> SearchBotsConfiguration in
|> take(1) return currentSearchBotsConfiguration(transaction: transaction)
|> mapToSignal { peerId -> Signal<ChatContextResultCollection?, NoError> in } |> mapToSignal { searchBotsConfiguration in
guard let peerId = peerId else { return resolvePeerByName(account: account, name: searchBotsConfiguration.venueBotUsername ?? "foursquare")
return .single(nil) |> take(1)
} |> mapToSignal { peerId -> Signal<ChatContextResultCollection?, NoError> in
return requestChatContextResults(account: account, botId: peerId, peerId: account.peerId, query: query ?? "", location: .single((latitude, longitude)), offset: "") guard let peerId = peerId else {
|> map { results -> ChatContextResultCollection? in return .single(nil)
return results?.results }
} return requestChatContextResults(account: account, botId: peerId, peerId: account.peerId, query: query ?? "", location: .single((latitude, longitude)), offset: "")
|> `catch` { error -> Signal<ChatContextResultCollection?, NoError> in |> map { results -> ChatContextResultCollection? in
return .single(nil) return results?.results
} }
} |> `catch` { error -> Signal<ChatContextResultCollection?, NoError> in
|> map { contextResult -> [TelegramMediaMap] in return .single(nil)
guard let contextResult = contextResult else {
return []
}
var list: [TelegramMediaMap] = []
for result in contextResult.results {
switch result.message {
case let .mapLocation(mapMedia, _):
if let _ = mapMedia.venue {
list.append(mapMedia)
}
default:
break
} }
} }
return list |> map { contextResult -> [TelegramMediaMap] in
guard let contextResult = contextResult else {
return []
}
var list: [TelegramMediaMap] = []
for result in contextResult.results {
switch result.message {
case let .mapLocation(mapMedia, _):
if let _ = mapMedia.venue {
list.append(mapMedia)
}
default:
break
}
}
return list
}
} }
} }
@ -86,7 +90,7 @@ func stringForDistance(strings: PresentationStrings, distance: CLLocationDistanc
func stringForEstimatedDuration(strings: PresentationStrings, eta: Double) -> String? { func stringForEstimatedDuration(strings: PresentationStrings, eta: Double) -> String? {
if eta > 0.0 && eta < 60.0 * 60.0 * 10.0 { if eta > 0.0 && eta < 60.0 * 60.0 * 10.0 {
var eta = max(eta, 60.0) let eta = max(eta, 60.0)
let minutes = Int32(eta / 60.0) % 60 let minutes = Int32(eta / 60.0) % 60
let hours = Int32(eta / 3600.0) let hours = Int32(eta / 3600.0)