mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix ad peer preloading
This commit is contained in:
parent
f199fe9641
commit
2ed2284542
@ -34,6 +34,7 @@ import ChatMessageBubbleItemNode
|
||||
import ChatMessageTransitionNode
|
||||
import ChatControllerInteraction
|
||||
import DustEffect
|
||||
import UrlHandling
|
||||
|
||||
struct ChatTopVisibleMessageRange: Equatable {
|
||||
var lowerBound: MessageIndex
|
||||
@ -674,7 +675,7 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto
|
||||
|
||||
let adMessagesContext: AdMessagesHistoryContext?
|
||||
private var adMessagesDisposable: Disposable?
|
||||
private var preloadAdPeerId: PeerId?
|
||||
private var preloadAdPeerName: String?
|
||||
private let preloadAdPeerDisposable = MetaDisposable()
|
||||
private var didSetupRecommendedChannelsPreload = false
|
||||
private let preloadRecommendedChannelsDisposable = MetaDisposable()
|
||||
@ -1117,16 +1118,23 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto
|
||||
|
||||
self.allAdMessages = (messages.first, [], 0)
|
||||
} else {
|
||||
var adPeerId: PeerId?
|
||||
adPeerId = messages.first?.author?.id
|
||||
var adPeerName: String?
|
||||
if let adAttribute = messages.first?.adAttribute, let parsedUrl = parseAdUrl(sharedContext: self.context.sharedContext, url: adAttribute.url), case let .peer(reference, _) = parsedUrl, case let .name(peerName) = reference {
|
||||
adPeerName = peerName
|
||||
}
|
||||
|
||||
if self.preloadAdPeerId != adPeerId {
|
||||
self.preloadAdPeerId = adPeerId
|
||||
if let adPeerId = adPeerId {
|
||||
if self.preloadAdPeerName != adPeerName {
|
||||
self.preloadAdPeerName = adPeerName
|
||||
if let adPeerName {
|
||||
let context = self.context
|
||||
let combinedDisposable = DisposableSet()
|
||||
self.preloadAdPeerDisposable.set(combinedDisposable)
|
||||
combinedDisposable.add(self.context.account.viewTracker.polledChannel(peerId: adPeerId).startStrict())
|
||||
combinedDisposable.add(self.context.account.addAdditionalPreloadHistoryPeerId(peerId: adPeerId))
|
||||
combinedDisposable.add(context.engine.peers.resolvePeerByName(name: adPeerName).startStrict(next: { result in
|
||||
if case let .result(maybePeer) = result, let peer = maybePeer {
|
||||
combinedDisposable.add(context.account.viewTracker.polledChannel(peerId: peer.id).startStrict())
|
||||
combinedDisposable.add(context.account.addAdditionalPreloadHistoryPeerId(peerId: peer.id))
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
self.preloadAdPeerDisposable.set(nil)
|
||||
}
|
||||
|
@ -1117,6 +1117,27 @@ public func parseWallpaperUrl(sharedContext: SharedAccountContext, url: String)
|
||||
return nil
|
||||
}
|
||||
|
||||
public func parseAdUrl(sharedContext: SharedAccountContext, url: String) -> ParsedInternalUrl? {
|
||||
let schemes = ["http://", "https://", ""]
|
||||
for basePath in baseTelegramMePaths {
|
||||
for scheme in schemes {
|
||||
let basePrefix = scheme + basePath + "/"
|
||||
if url.lowercased().hasPrefix(basePrefix) {
|
||||
if let internalUrl = parseInternalUrl(sharedContext: sharedContext, query: String(url[basePrefix.endIndex...])), case .peer = internalUrl {
|
||||
return internalUrl
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if let parsedUrl = URL(string: url), parsedUrl.scheme == "tg", let host = parsedUrl.host, let query = parsedUrl.query {
|
||||
if let internalUrl = parseInternalUrl(sharedContext: sharedContext, query: host + "?" + query), case .peer = internalUrl {
|
||||
return internalUrl
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
private struct UrlHandlingConfiguration {
|
||||
static var defaultValue: UrlHandlingConfiguration {
|
||||
return UrlHandlingConfiguration(domains: [], urlAuthDomains: [])
|
||||
|
Loading…
x
Reference in New Issue
Block a user