diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift index 248e79ee64..36c8520316 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift @@ -59,14 +59,24 @@ public struct SearchStickersScope: OptionSet { } func _internal_randomGreetingSticker(account: Account) -> Signal { - return account.postbox.transaction { transaction -> FoundStickerItem? in - var stickerItems: [FoundStickerItem] = [] - for entry in transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudGreetingStickers) { - if let item = entry.contents as? RecentMediaItem, let file = item.media as? TelegramMediaFile { - stickerItems.append(FoundStickerItem(file: file, stringRepresentations: [])) - } + let key: PostboxViewKey = .orderedItemList(id: Namespaces.OrderedItemList.CloudGreetingStickers) + return account.postbox.combinedView(keys: [key]) + |> map { views -> [OrderedItemListEntry]? in + if let view = views.views[key] as? OrderedItemListView, !view.items.isEmpty { + return view.items + } else { + return nil } - return stickerItems.randomElement() + } + |> filter { items in + return items != nil + } + |> take(1) + |> map { items -> FoundStickerItem? in + if let randomItem = items?.randomElement(), let item = randomItem.contents as? RecentMediaItem, let file = item.media as? TelegramMediaFile { + return FoundStickerItem(file: file, stringRepresentations: []) + } + return nil } } diff --git a/submodules/TelegramUI/Sources/ChatEmptyNode.swift b/submodules/TelegramUI/Sources/ChatEmptyNode.swift index 1baaa5ff45..4db0ed1995 100644 --- a/submodules/TelegramUI/Sources/ChatEmptyNode.swift +++ b/submodules/TelegramUI/Sources/ChatEmptyNode.swift @@ -853,6 +853,7 @@ final class ChatEmptyNode: ASDisplayNode { contentType = .regular } + var updateGreetingSticker = false var contentTransition = transition if self.content?.0 != contentType { var animateContentIn = false @@ -876,7 +877,7 @@ final class ChatEmptyNode: ASDisplayNode { node = ChatEmptyNodeNearbyChatContent(context: self.context, interaction: self.interaction) case .greeting: node = ChatEmptyNodeGreetingChatContent(context: self.context, interaction: self.interaction) - self.context.prefetchManager?.prepareNextGreetingSticker() + updateGreetingSticker = true } self.content = (contentType, node) self.addSubnode(node) @@ -894,6 +895,10 @@ final class ChatEmptyNode: ASDisplayNode { var contentSize = CGSize() if let contentNode = self.content?.1 { contentSize = contentNode.updateLayout(interfaceState: interfaceState, size: displayRect.size, transition: contentTransition) + + if updateGreetingSticker { + self.context.prefetchManager?.prepareNextGreetingSticker() + } } let contentFrame = CGRect(origin: CGPoint(x: displayRect.minX + floor((displayRect.width - contentSize.width) / 2.0), y: displayRect.minY + floor((displayRect.height - contentSize.height) / 2.0)), size: contentSize)