From 7c54e6953dd9e2b279fa5e3e1eb81ef76f8d5067 Mon Sep 17 00:00:00 2001 From: overtake Date: Tue, 25 Feb 2020 11:38:13 +0400 Subject: [PATCH] - statistic --- .../Sources/ChannelStatistics.swift | 85 +++++++++++-------- .../Sources/UpdateCachedPeerData.swift | 4 +- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/submodules/TelegramCore/Sources/ChannelStatistics.swift b/submodules/TelegramCore/Sources/ChannelStatistics.swift index ff2a71fdfd..5b178437e3 100644 --- a/submodules/TelegramCore/Sources/ChannelStatistics.swift +++ b/submodules/TelegramCore/Sources/ChannelStatistics.swift @@ -132,40 +132,50 @@ public struct ChannelStatsContextState: Equatable { public var stats: ChannelStats? } -private func requestStats(network: Network, datacenterId: Int32, peer: Peer, dark: Bool = false) -> Signal { - return .never() - /*guard let inputChannel = apiInputChannel(peer) else { - return .never() - } +private func requestStats(network: Network, postbox: Postbox, datacenterId: Int32, peerId: PeerId, dark: Bool = false) -> Signal { + //return .never() - var flags: Int32 = 0 - if dark { - flags |= (1 << 1) - } - - let signal: Signal - if network.datacenterId != datacenterId { - signal = network.download(datacenterId: Int(datacenterId), isMedia: false, tag: nil) - |> castError(MTRpcError.self) - |> mapToSignal { worker in - return worker.request(Api.functions.stats.getBroadcastStats(flags: flags, channel: inputChannel)) + return postbox.transaction { transaction -> Api.InputChannel? in + if let peer = transaction.getPeer(peerId) { + return apiInputChannel(peer) + } else { + return nil + } + } |> mapToSignal { inputChannel -> Signal in + guard let inputChannel = inputChannel else { + return .complete() + } + + var flags: Int32 = 0 + if dark { + flags |= (1 << 1) + } + + let signal: Signal + if network.datacenterId != datacenterId { + signal = network.download(datacenterId: Int(datacenterId), isMedia: false, tag: nil) + |> castError(MTRpcError.self) + |> mapToSignal { worker in + return worker.request(Api.functions.stats.getBroadcastStats(flags: flags, channel: inputChannel)) + } + } else { + signal = network.request(Api.functions.stats.getBroadcastStats(flags: flags, channel: inputChannel)) + } + + return signal + |> map { result -> ChannelStats? in + return ChannelStats(apiBroadcastStats: result) + } + |> `catch` { error -> Signal in + return .single(nil) } - } else { - signal = network.request(Api.functions.stats.getBroadcastStats(flags: flags, channel: inputChannel)) } - return signal - |> map { result -> ChannelStats? in - return ChannelStats(apiBroadcastStats: result) - } - |> `catch` { _ -> Signal in - return .single(nil) - }*/ + } private func requestGraph(network: Network, datacenterId: Int32, token: String) -> Signal { - return .never() - /*let signal: Signal + let signal: Signal if network.datacenterId != datacenterId { signal = network.download(datacenterId: Int(datacenterId), isMedia: false, tag: nil) |> castError(MTRpcError.self) @@ -182,12 +192,13 @@ private func requestGraph(network: Network, datacenterId: Int32, token: String) } |> `catch` { _ -> Signal in return .single(nil) - }*/ + } } private final class ChannelStatsContextImpl { private let network: Network - private let peer: Peer + private let postbox: Postbox + private let peerId: PeerId private let datacenterId: Int32 private var _state: ChannelStatsContextState { @@ -205,11 +216,11 @@ private final class ChannelStatsContextImpl { private let disposable = MetaDisposable() private let disposables = DisposableDict() - init(network: Network, datacenterId: Int32, peer: Peer) { + init(network: Network, postbox: Postbox, datacenterId: Int32, peerId: PeerId) { assert(Queue.mainQueue().isCurrent()) - + self.postbox = postbox self.network = network - self.peer = peer + self.peerId = peerId self.datacenterId = datacenterId self._state = ChannelStatsContextState(stats: nil) self._statePromise.set(.single(self._state)) @@ -226,7 +237,7 @@ private final class ChannelStatsContextImpl { private func load() { assert(Queue.mainQueue().isCurrent()) - self.disposable.set((requestStats(network: self.network, datacenterId: self.datacenterId, peer: self.peer) + self.disposable.set((requestStats(network: self.network, postbox: self.postbox, datacenterId: self.datacenterId, peerId: self.peerId) |> deliverOnMainQueue).start(next: { [weak self] stats in if let strongSelf = self { strongSelf._state = ChannelStatsContextState(stats: stats) @@ -326,9 +337,9 @@ public final class ChannelStatsContext { } } - public init(network: Network, datacenterId: Int32, peer: Peer) { + public init(network: Network, postbox: Postbox, datacenterId: Int32, peerId: PeerId) { self.impl = QueueLocalObject(queue: Queue.mainQueue(), generate: { - return ChannelStatsContextImpl(network: network, datacenterId: datacenterId, peer: peer) + return ChannelStatsContextImpl(network: network, postbox: postbox, datacenterId: datacenterId, peerId: peerId) }) } @@ -363,7 +374,7 @@ public final class ChannelStatsContext { } } -/*extension ChannelStatsGraph { +extension ChannelStatsGraph { init(apiStatsGraph: Api.StatsGraph) { switch apiStatsGraph { case let .statsGraph(json): @@ -424,4 +435,4 @@ extension ChannelStats { } } } -*/ + diff --git a/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift b/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift index e5c836e12e..60d0f48f57 100644 --- a/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift +++ b/submodules/TelegramCore/Sources/UpdateCachedPeerData.swift @@ -319,7 +319,7 @@ func fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPeerId: PeerI } switch fullChat { - case let .channelFull(flags, _, about, participantsCount, adminsCount, kickedCount, bannedCount, _, _, _, _, _, _, apiExportedInvite, apiBotInfos, migratedFromChatId, migratedFromMaxId, pinnedMsgId, stickerSet, minAvailableMsgId, folderId, linkedChatId, location, slowmodeSeconds, slowmodeNextSendDate, _, pts): + case let .channelFull(flags, _, about, participantsCount, adminsCount, kickedCount, bannedCount, _, _, _, _, _, _, apiExportedInvite, apiBotInfos, migratedFromChatId, migratedFromMaxId, pinnedMsgId, stickerSet, minAvailableMsgId, folderId, linkedChatId, location, slowmodeSeconds, slowmodeNextSendDate, statsDc, pts): var channelFlags = CachedChannelFlags() if (flags & (1 << 3)) != 0 { channelFlags.insert(.canDisplayParticipants) @@ -450,7 +450,7 @@ func fetchAndUpdateCachedPeerData(accountPeerId: PeerId, peerId rawPeerId: PeerI .withUpdatedSlowModeTimeout(slowmodeSeconds) .withUpdatedSlowModeValidUntilTimestamp(slowmodeNextSendDate) .withUpdatedHasScheduledMessages(hasScheduledMessages) -// .withUpdatedStatsDatacenterId(statsDc ?? 0) + .withUpdatedStatsDatacenterId(statsDc ?? 0) }) if let minAvailableMessageId = minAvailableMessageId, minAvailableMessageIdUpdated {