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 ChatMessageTransitionNode
|
||||||
import ChatControllerInteraction
|
import ChatControllerInteraction
|
||||||
import DustEffect
|
import DustEffect
|
||||||
|
import UrlHandling
|
||||||
|
|
||||||
struct ChatTopVisibleMessageRange: Equatable {
|
struct ChatTopVisibleMessageRange: Equatable {
|
||||||
var lowerBound: MessageIndex
|
var lowerBound: MessageIndex
|
||||||
@ -674,7 +675,7 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto
|
|||||||
|
|
||||||
let adMessagesContext: AdMessagesHistoryContext?
|
let adMessagesContext: AdMessagesHistoryContext?
|
||||||
private var adMessagesDisposable: Disposable?
|
private var adMessagesDisposable: Disposable?
|
||||||
private var preloadAdPeerId: PeerId?
|
private var preloadAdPeerName: String?
|
||||||
private let preloadAdPeerDisposable = MetaDisposable()
|
private let preloadAdPeerDisposable = MetaDisposable()
|
||||||
private var didSetupRecommendedChannelsPreload = false
|
private var didSetupRecommendedChannelsPreload = false
|
||||||
private let preloadRecommendedChannelsDisposable = MetaDisposable()
|
private let preloadRecommendedChannelsDisposable = MetaDisposable()
|
||||||
@ -1117,16 +1118,23 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto
|
|||||||
|
|
||||||
self.allAdMessages = (messages.first, [], 0)
|
self.allAdMessages = (messages.first, [], 0)
|
||||||
} else {
|
} else {
|
||||||
var adPeerId: PeerId?
|
var adPeerName: String?
|
||||||
adPeerId = messages.first?.author?.id
|
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 {
|
if self.preloadAdPeerName != adPeerName {
|
||||||
self.preloadAdPeerId = adPeerId
|
self.preloadAdPeerName = adPeerName
|
||||||
if let adPeerId = adPeerId {
|
if let adPeerName {
|
||||||
|
let context = self.context
|
||||||
let combinedDisposable = DisposableSet()
|
let combinedDisposable = DisposableSet()
|
||||||
self.preloadAdPeerDisposable.set(combinedDisposable)
|
self.preloadAdPeerDisposable.set(combinedDisposable)
|
||||||
combinedDisposable.add(self.context.account.viewTracker.polledChannel(peerId: adPeerId).startStrict())
|
combinedDisposable.add(context.engine.peers.resolvePeerByName(name: adPeerName).startStrict(next: { result in
|
||||||
combinedDisposable.add(self.context.account.addAdditionalPreloadHistoryPeerId(peerId: adPeerId))
|
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 {
|
} else {
|
||||||
self.preloadAdPeerDisposable.set(nil)
|
self.preloadAdPeerDisposable.set(nil)
|
||||||
}
|
}
|
||||||
|
@ -1117,6 +1117,27 @@ public func parseWallpaperUrl(sharedContext: SharedAccountContext, url: String)
|
|||||||
return nil
|
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 {
|
private struct UrlHandlingConfiguration {
|
||||||
static var defaultValue: UrlHandlingConfiguration {
|
static var defaultValue: UrlHandlingConfiguration {
|
||||||
return UrlHandlingConfiguration(domains: [], urlAuthDomains: [])
|
return UrlHandlingConfiguration(domains: [], urlAuthDomains: [])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user