This commit is contained in:
Ali
2023-06-23 22:28:36 +03:00
parent 313fe3a509
commit 115e5ec39a
8 changed files with 163 additions and 72 deletions

View File

@@ -828,12 +828,9 @@ public extension TelegramEngine {
return self.account.postbox.combinedView(keys: additionalDataKeys)
|> map { views -> [EngineMediaResource.Id: StoryPreloadInfo] in
let _ = accountPeer
let _ = storySubscriptionsView
let _ = storiesStateView
var nextPriority: Int = 0
var resultResources: [EngineMediaResource.Id: StoryPreloadInfo] = [:]
var sortedItems: [(peer: Peer, item: Stories.Item)] = []
for peerId in storySubscriptionsView.peerIds {
guard let peerView = views.views[PostboxViewKey.basicPeer(peerId)] as? BasicPeerView else {
@@ -858,36 +855,51 @@ public extension TelegramEngine {
}
}
if let peerReference = PeerReference(peer) {
if let nextItem = nextItem, case let .item(item) = nextItem, let media = item.media {
if let image = media as? TelegramMediaImage, let resource = image.representations.last?.resource {
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: item.id, media: media), resource: resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: nil,
priority: .top(position: nextPriority)
)
nextPriority += 1
} else if let file = media as? TelegramMediaFile {
if let preview = file.previewRepresentations.last {
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: item.id, media: file), resource: preview.resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: nil,
priority: .top(position: nextPriority)
)
nextPriority += 1
}
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: item.id, media: file), resource: file.resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: file.preloadSize,
priority: .top(position: nextPriority)
)
nextPriority += 1
}
if let nextItem = nextItem, case let .item(item) = nextItem {
sortedItems.append((peer, item))
}
}
sortedItems.sort(by: { lhs, rhs in
return lhs.item.timestamp > rhs.item.timestamp
})
var nextPriority: Int = 0
var resultResources: [EngineMediaResource.Id: StoryPreloadInfo] = [:]
for itemAndPeer in sortedItems.prefix(10) {
guard let peerReference = PeerReference(itemAndPeer.peer) else {
continue
}
guard let media = itemAndPeer.item.media else {
continue
}
if let image = media as? TelegramMediaImage, let resource = image.representations.last?.resource {
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: itemAndPeer.item.id, media: media), resource: resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: nil,
priority: .top(position: nextPriority)
)
nextPriority += 1
} else if let file = media as? TelegramMediaFile {
if let preview = file.previewRepresentations.last {
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: itemAndPeer.item.id, media: file), resource: preview.resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: nil,
priority: .top(position: nextPriority)
)
nextPriority += 1
}
let resource = MediaResourceReference.media(media: .story(peer: peerReference, id: itemAndPeer.item.id, media: file), resource: file.resource)
resultResources[EngineMediaResource.Id(resource.resource.id)] = StoryPreloadInfo(
resource: resource,
size: file.preloadSize,
priority: .top(position: nextPriority)
)
nextPriority += 1
}
}