import Foundation import Postbox import SwiftSignalKit import TelegramApi import MtProtoKit import SyncCore func updateAppConfigurationOnce(postbox: Postbox, network: Network) -> Signal { return network.request(Api.functions.help.getAppConfig()) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { result -> Signal in guard let result = result else { return .complete() } return postbox.transaction { transaction -> Void in if let data = JSON(apiJson: result) { updateAppConfiguration(transaction: transaction, { configuration -> AppConfiguration in var configuration = configuration configuration.data = data return configuration }) } } } } func managedAppConfigurationUpdates(postbox: Postbox, network: Network) -> Signal { let poll = Signal { subscriber in return updateAppConfigurationOnce(postbox: postbox, network: network).start() } return (poll |> then(.complete() |> suspendAwareDelay(1.0 * 60.0 * 60.0, queue: Queue.concurrentDefaultQueue()))) |> restart }