import Foundation #if os(macOS) import PostboxMac import SwiftSignalKitMac import MtProtoKitMac import TelegramApiMac #else import Postbox import TelegramApi import SwiftSignalKit #if BUCK import MtProtoKit #else import MtProtoKitDynamic #endif #endif import SyncCore func managedAppChangelog(postbox: Postbox, network: Network, stateManager: AccountStateManager, appVersion: String) -> Signal { return stateManager.pollStateUpdateCompletion() |> take(1) |> mapToSignal { _ -> Signal in return postbox.transaction { transaction -> AppChangelogState in return transaction.getPreferencesEntry(key: PreferencesKeys.appChangelogState) as? AppChangelogState ?? AppChangelogState.default } |> mapToSignal { appChangelogState -> Signal in let appChangelogState = appChangelogState if appChangelogState.checkedVersion == appVersion { return .complete() } let previousVersion = appChangelogState.previousVersion return network.request(Api.functions.help.getAppChangelog(prevAppVersion: previousVersion)) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) } |> mapToSignal { updates -> Signal in if let updates = updates { stateManager.addUpdates(updates) } return postbox.transaction { transaction in updateAppChangelogState(transaction: transaction, { state in var state = state state.checkedVersion = appVersion state.previousVersion = appVersion return state }) } } } } }