Swiftgram/submodules/TelegramCore/Sources/PeerLiveLocationsContext.swift
Ilya Laktyushin e00eeec6ae Update API
2020-10-23 00:55:07 +04:00

35 lines
1.4 KiB
Swift

import Foundation
import Postbox
import SwiftSignalKit
import TelegramApi
import SyncCore
public func topPeerActiveLiveLocationMessages(viewTracker: AccountViewTracker, accountPeerId: PeerId, peerId: PeerId) -> Signal<(Peer?, [Message]), NoError> {
return viewTracker.aroundMessageHistoryViewForLocation(.peer(peerId), index: .upperBound, anchorIndex: .upperBound, count: 50, fixedCombinedReadStates: nil, tagMask: .liveLocation, orderStatistics: [], additionalData: [.peer(accountPeerId)])
|> map { (view, _, _) -> (Peer?, [Message]) in
var accountPeer: Peer?
for entry in view.additionalData {
if case let .peer(_, peer) = entry {
accountPeer = peer
break
}
}
let timestamp = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970)
var result: [Message] = []
for entry in view.entries {
for media in entry.message.media {
if let location = media as? TelegramMediaMap, let liveBroadcastingTimeout = location.liveBroadcastingTimeout {
if entry.message.timestamp + liveBroadcastingTimeout > timestamp {
result.append(entry.message)
}
} else {
assertionFailure()
}
}
}
return (accountPeer, result)
}
}