mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
b317ba1ee7
commit
36e341f1a6
@ -129,7 +129,7 @@ public final class StickerPreviewPeekContentNode: ASDisplayNode, PeekControllerC
|
||||
|
||||
let source = AnimatedStickerResourceSource(account: account, resource: effect.resource, fitzModifier: nil)
|
||||
let additionalAnimationNode = AnimatedStickerNode()
|
||||
additionalAnimationNode.setup(source: source, width: Int(fittedDimensions.width * 2.5), height: Int(fittedDimensions.height * 2.5), playbackMode: .once, mode: .direct(cachePathPrefix: nil))
|
||||
additionalAnimationNode.setup(source: source, width: Int(fittedDimensions.width * 2.0), height: Int(fittedDimensions.height * 2.0), playbackMode: .once, mode: .direct(cachePathPrefix: nil))
|
||||
additionalAnimationNode.visibility = true
|
||||
self.additionalAnimationNode = additionalAnimationNode
|
||||
}
|
||||
@ -171,8 +171,13 @@ public final class StickerPreviewPeekContentNode: ASDisplayNode, PeekControllerC
|
||||
}
|
||||
|
||||
public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) -> CGSize {
|
||||
let boundingSize = CGSize(width: 180.0, height: 180.0).fitted(size)
|
||||
|
||||
let boundingSize: CGSize
|
||||
if let _ = self.additionalAnimationNode {
|
||||
boundingSize = CGSize(width: 240.0, height: 240.0).fitted(size)
|
||||
} else {
|
||||
boundingSize = CGSize(width: 180.0, height: 180.0).fitted(size)
|
||||
}
|
||||
|
||||
if let dimensitons = self.item.file.dimensions {
|
||||
let textSpacing: CGFloat = 10.0
|
||||
let textSize = self.textNode.measure(CGSize(width: 100.0, height: 100.0))
|
||||
@ -183,7 +188,7 @@ public final class StickerPreviewPeekContentNode: ASDisplayNode, PeekControllerC
|
||||
var centerOffset: CGFloat = 0.0
|
||||
if self.item.file.isPremiumSticker {
|
||||
let originalImageFrame = imageFrame
|
||||
imageFrame.origin.x = size.width - imageFrame.width - 10.0
|
||||
imageFrame.origin.x = size.width - imageFrame.width
|
||||
centerOffset = imageFrame.minX - originalImageFrame.minX
|
||||
}
|
||||
self.imageNode.frame = imageFrame
|
||||
@ -192,7 +197,7 @@ public final class StickerPreviewPeekContentNode: ASDisplayNode, PeekControllerC
|
||||
animationNode.updateLayout(size: imageSize)
|
||||
|
||||
if let additionalAnimationNode = self.additionalAnimationNode {
|
||||
additionalAnimationNode.frame = imageFrame.offsetBy(dx: -imageFrame.width * 0.66 + 15.0, dy: -2.0).insetBy(dx: -imageFrame.width * 0.66, dy: -imageFrame.height * 0.66)
|
||||
additionalAnimationNode.frame = imageFrame.offsetBy(dx: -imageFrame.width * 0.25, dy: 0.0).insetBy(dx: -imageFrame.width * 0.25, dy: -imageFrame.height * 0.25)
|
||||
additionalAnimationNode.updateLayout(size: additionalAnimationNode.frame.size)
|
||||
}
|
||||
}
|
||||
|
@ -345,8 +345,7 @@ private func synchronizeInstalledStickerPacks(transaction: Transaction, postbox:
|
||||
|
||||
var fetchSignals: [Signal<(StickerPackCollectionInfo, [ItemCollectionItem]), NoError>] = []
|
||||
for info in locallyAddedInfos {
|
||||
fetchSignals.append(fetchStickerPack(network: network, info: info)
|
||||
)
|
||||
fetchSignals.append(fetchStickerPack(network: network, info: info))
|
||||
}
|
||||
let fetchedPacks = combineLatest(fetchSignals)
|
||||
|
||||
@ -479,10 +478,26 @@ private func continueSynchronizeInstalledStickerPacks(transaction: Transaction,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let storePremiumSignal: Signal<Void, SynchronizeInstalledStickerPacksError> = postbox.transaction { transaction -> Void in
|
||||
var premiumStickers: [OrderedItemListEntry] = []
|
||||
for (id, _) in remoteInfos {
|
||||
let items = transaction.getItemCollectionItems(collectionId: id)
|
||||
for item in items {
|
||||
if let stickerItem = item as? StickerPackItem, stickerItem.file.isPremiumSticker,
|
||||
let entry = CodableEntry(RecentMediaItem(stickerItem.file)) {
|
||||
premiumStickers.append(OrderedItemListEntry(id: RecentMediaItemId(stickerItem.file.fileId).rawValue, contents: entry))
|
||||
}
|
||||
}
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.PremiumStickers, items: premiumStickers)
|
||||
} |> castError(SynchronizeInstalledStickerPacksError.self)
|
||||
|
||||
return (
|
||||
storeSignal
|
||||
|> mapError { _ -> SynchronizeInstalledStickerPacksError in }
|
||||
)
|
||||
|> then(storePremiumSignal)
|
||||
|> then(.fail(.done))
|
||||
}
|
||||
|> castError(SynchronizeInstalledStickerPacksError.self)
|
||||
@ -586,6 +601,18 @@ private func continueSynchronizeInstalledStickerPacks(transaction: Transaction,
|
||||
transaction.replaceItemCollectionItems(collectionId: id, items: [])
|
||||
}
|
||||
|
||||
var premiumStickers: [OrderedItemListEntry] = []
|
||||
for id in resultingCollectionIds {
|
||||
let items = transaction.getItemCollectionItems(collectionId: id)
|
||||
for item in items {
|
||||
if let stickerItem = item as? StickerPackItem, stickerItem.file.isPremiumSticker,
|
||||
let entry = CodableEntry(RecentMediaItem(stickerItem.file)) {
|
||||
premiumStickers.append(OrderedItemListEntry(id: RecentMediaItemId(stickerItem.file.fileId).rawValue, contents: entry))
|
||||
}
|
||||
}
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.PremiumStickers, items: premiumStickers)
|
||||
|
||||
return .complete()
|
||||
}
|
||||
|> mapError { _ -> SynchronizeInstalledStickerPacksError in
|
||||
|
@ -61,6 +61,7 @@ public struct Namespaces {
|
||||
public static let CloudThemes: Int32 = 9
|
||||
public static let CloudGreetingStickers: Int32 = 10
|
||||
public static let RecentDownloads: Int32 = 11
|
||||
public static let PremiumStickers: Int32 = 12
|
||||
}
|
||||
|
||||
public struct CachedItemCollection {
|
||||
|
@ -164,7 +164,7 @@ func preparedChatMediaInputGridEntryTransition(account: Account, view: ItemColle
|
||||
return ChatMediaInputGridTransition(deletions: deletions, insertions: insertions, updates: updates, updateFirstIndexInSectionOffset: firstIndexInSectionOffset, stationaryItems: stationaryItems, scrollToItem: scrollToItem, updateOpaqueState: opaqueState, animated: animated)
|
||||
}
|
||||
|
||||
func chatMediaInputPanelEntries(view: ItemCollectionsView, savedStickers: OrderedItemListView?, recentStickers: OrderedItemListView?, temporaryPackOrder: [ItemCollectionId]? = nil, trendingIsDismissed: Bool = false, peerSpecificPack: PeerSpecificPackData?, canInstallPeerSpecificPack: CanInstallPeerSpecificPack, theme: PresentationTheme, strings: PresentationStrings, hasPremium: Bool = false, hasGifs: Bool = true, hasSettings: Bool = true, expanded: Bool = false, reorderable: Bool = false) -> [ChatMediaInputPanelEntry] {
|
||||
func chatMediaInputPanelEntries(view: ItemCollectionsView, savedStickers: OrderedItemListView?, recentStickers: OrderedItemListView?, temporaryPackOrder: [ItemCollectionId]? = nil, trendingIsDismissed: Bool = false, peerSpecificPack: PeerSpecificPackData?, canInstallPeerSpecificPack: CanInstallPeerSpecificPack, theme: PresentationTheme, strings: PresentationStrings, premiumStickers: OrderedItemListView? = nil, hasGifs: Bool = true, hasSettings: Bool = true, expanded: Bool = false, reorderable: Bool = false) -> [ChatMediaInputPanelEntry] {
|
||||
var entries: [ChatMediaInputPanelEntry] = []
|
||||
if hasGifs {
|
||||
entries.append(.recentGifs(theme, strings, expanded))
|
||||
@ -203,7 +203,7 @@ func chatMediaInputPanelEntries(view: ItemCollectionsView, savedStickers: Ordere
|
||||
entries.append(.peerSpecific(theme: theme, peer: peer, expanded: expanded))
|
||||
}
|
||||
|
||||
if hasPremium {
|
||||
if let premiumStickers = premiumStickers, !premiumStickers.items.isEmpty {
|
||||
entries.append(.premium(theme, strings, expanded))
|
||||
}
|
||||
|
||||
@ -260,7 +260,7 @@ func chatMediaInputPanelGifModeEntries(theme: PresentationTheme, strings: Presen
|
||||
return entries
|
||||
}
|
||||
|
||||
func chatMediaInputGridEntries(view: ItemCollectionsView, savedStickers: OrderedItemListView?, recentStickers: OrderedItemListView?, peerSpecificPack: PeerSpecificPackData?, canInstallPeerSpecificPack: CanInstallPeerSpecificPack, trendingPacks: [FeaturedStickerPackItem], installedPacks: Set<ItemCollectionId>, premiumStickers: [ItemCollectionItem]? = nil, trendingIsDismissed: Bool = false, hasSearch: Bool = true, hasAccessories: Bool = true, strings: PresentationStrings, theme: PresentationTheme, hasPremium: Bool) -> [ChatMediaInputGridEntry] {
|
||||
func chatMediaInputGridEntries(view: ItemCollectionsView, savedStickers: OrderedItemListView?, recentStickers: OrderedItemListView?, peerSpecificPack: PeerSpecificPackData?, canInstallPeerSpecificPack: CanInstallPeerSpecificPack, trendingPacks: [FeaturedStickerPackItem], installedPacks: Set<ItemCollectionId>, premiumStickers: OrderedItemListView? = nil, trendingIsDismissed: Bool = false, hasSearch: Bool = true, hasAccessories: Bool = true, strings: PresentationStrings, theme: PresentationTheme, hasPremium: Bool) -> [ChatMediaInputGridEntry] {
|
||||
var entries: [ChatMediaInputGridEntry] = []
|
||||
|
||||
if hasSearch && view.lower == nil {
|
||||
@ -334,13 +334,15 @@ func chatMediaInputGridEntries(view: ItemCollectionsView, savedStickers: Ordered
|
||||
}
|
||||
}
|
||||
|
||||
if let premiumStickers = premiumStickers {
|
||||
let packInfo = StickerPackCollectionInfo(id: ItemCollectionId(namespace: ChatMediaInputPanelAuxiliaryNamespace.premium.rawValue, id: 0), flags: [], accessHash: 0, title: strings.Stickers_PremiumStickers, shortName: "", thumbnail: nil, immediateThumbnailData: nil, hash: 0, count: 0)
|
||||
for i in 0 ..< premiumStickers.count {
|
||||
if let item = premiumStickers[i] as? StickerPackItem {
|
||||
let index = ItemCollectionItemIndex(index: Int32(i), id: item.file.fileId.id)
|
||||
let stickerItem = StickerPackItem(index: index, file: item.file, indexKeys: [])
|
||||
entries.append(.sticker(index: ItemCollectionViewEntryIndex(collectionIndex: -1, collectionId: packInfo.id, itemIndex: index), stickerItem: stickerItem, stickerPackInfo: packInfo, canManagePeerSpecificPack: false, maybeManageable: hasAccessories, theme: theme, isLocked: false))
|
||||
if let premiumStickers = premiumStickers, !premiumStickers.items.isEmpty {
|
||||
let packInfo = StickerPackCollectionInfo(id: ItemCollectionId(namespace: ChatMediaInputPanelAuxiliaryNamespace.premium.rawValue, id: 0), flags: [], accessHash: 0, title: strings.Stickers_PremiumStickers.uppercased(), shortName: "", thumbnail: nil, immediateThumbnailData: nil, hash: 0, count: 0)
|
||||
for i in 0 ..< premiumStickers.items.count {
|
||||
if let item = premiumStickers.items[i].contents.get(RecentMediaItem.self) {
|
||||
let file = item.media
|
||||
|
||||
let index = ItemCollectionItemIndex(index: Int32(i), id: file.fileId.id)
|
||||
let stickerItem = StickerPackItem(index: index, file: file, indexKeys: [])
|
||||
entries.append(.sticker(index: ItemCollectionViewEntryIndex(collectionIndex: -1, collectionId: packInfo.id, itemIndex: index), stickerItem: stickerItem, stickerPackInfo: packInfo, canManagePeerSpecificPack: nil, maybeManageable: hasAccessories, theme: theme, isLocked: stickerItem.file.isPremiumSticker && !hasPremium))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -961,10 +963,12 @@ final class ChatMediaInputNode: ChatInputNode {
|
||||
let itemCollectionsView = self.itemCollectionsViewPosition.get()
|
||||
|> distinctUntilChanged
|
||||
|> mapToSignal { position -> Signal<(ItemCollectionsView, StickerPacksCollectionUpdate), NoError> in
|
||||
let orderedItemListCollectionIds: [Int32] = [Namespaces.OrderedItemList.CloudSavedStickers, Namespaces.OrderedItemList.CloudRecentStickers, Namespaces.OrderedItemList.PremiumStickers]
|
||||
let namespaces: [ItemCollectionId.Namespace] = [Namespaces.ItemCollection.CloudStickerPacks]
|
||||
switch position {
|
||||
case .initial:
|
||||
var firstTime = true
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: [Namespaces.OrderedItemList.CloudSavedStickers, Namespaces.OrderedItemList.CloudRecentStickers], namespaces: [Namespaces.ItemCollection.CloudStickerPacks], aroundIndex: nil, count: 50)
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: orderedItemListCollectionIds, namespaces: namespaces, aroundIndex: nil, count: 50)
|
||||
|> map { view -> (ItemCollectionsView, StickerPacksCollectionUpdate) in
|
||||
let update: StickerPacksCollectionUpdate
|
||||
if firstTime {
|
||||
@ -977,7 +981,7 @@ final class ChatMediaInputNode: ChatInputNode {
|
||||
}
|
||||
case let .scroll(aroundIndex):
|
||||
var firstTime = true
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: [Namespaces.OrderedItemList.CloudSavedStickers, Namespaces.OrderedItemList.CloudRecentStickers], namespaces: [Namespaces.ItemCollection.CloudStickerPacks], aroundIndex: aroundIndex, count: 300)
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: orderedItemListCollectionIds, namespaces: namespaces, aroundIndex: aroundIndex, count: 300)
|
||||
|> map { view -> (ItemCollectionsView, StickerPacksCollectionUpdate) in
|
||||
let update: StickerPacksCollectionUpdate
|
||||
if firstTime {
|
||||
@ -990,7 +994,7 @@ final class ChatMediaInputNode: ChatInputNode {
|
||||
}
|
||||
case let .navigate(index, collectionId):
|
||||
var firstTime = true
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: [Namespaces.OrderedItemList.CloudSavedStickers, Namespaces.OrderedItemList.CloudRecentStickers], namespaces: [Namespaces.ItemCollection.CloudStickerPacks], aroundIndex: index, count: 300)
|
||||
return context.account.postbox.itemCollectionsView(orderedItemListCollectionIds: orderedItemListCollectionIds, namespaces: namespaces, aroundIndex: index, count: 300)
|
||||
|> map { view -> (ItemCollectionsView, StickerPacksCollectionUpdate) in
|
||||
let update: StickerPacksCollectionUpdate
|
||||
if firstTime {
|
||||
@ -1143,11 +1147,14 @@ final class ChatMediaInputNode: ChatInputNode {
|
||||
|
||||
var savedStickers: OrderedItemListView?
|
||||
var recentStickers: OrderedItemListView?
|
||||
var premiumStickers: OrderedItemListView?
|
||||
for orderedView in view.orderedItemListsViews {
|
||||
if orderedView.collectionId == Namespaces.OrderedItemList.CloudRecentStickers {
|
||||
recentStickers = orderedView
|
||||
} else if orderedView.collectionId == Namespaces.OrderedItemList.CloudSavedStickers {
|
||||
savedStickers = orderedView
|
||||
} else if orderedView.collectionId == Namespaces.OrderedItemList.PremiumStickers {
|
||||
premiumStickers = orderedView
|
||||
}
|
||||
}
|
||||
|
||||
@ -1161,22 +1168,9 @@ final class ChatMediaInputNode: ChatInputNode {
|
||||
trendingIsDismissed = true
|
||||
}
|
||||
|
||||
var hasPremium = false
|
||||
var premiumStickers: [ItemCollectionItem]?
|
||||
if case let .user(user) = accountPeer, user.flags.contains(.isPremium) {
|
||||
hasPremium = true
|
||||
|
||||
for entry in view.entries {
|
||||
if let item = entry.item as? StickerPackItem, item.file.isPremiumSticker {
|
||||
if premiumStickers == nil {
|
||||
premiumStickers = []
|
||||
}
|
||||
premiumStickers?.append(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
let hasPremium = accountPeer?.isPremium ?? false
|
||||
|
||||
let panelEntries = chatMediaInputPanelEntries(view: view, savedStickers: savedStickers, recentStickers: recentStickers, temporaryPackOrder: temporaryPackOrder, trendingIsDismissed: trendingIsDismissed, peerSpecificPack: peerSpecificPack.0, canInstallPeerSpecificPack: peerSpecificPack.1, theme: theme, strings: strings, hasPremium: premiumStickers != nil, expanded: panelExpanded, reorderable: true)
|
||||
let panelEntries = chatMediaInputPanelEntries(view: view, savedStickers: savedStickers, recentStickers: recentStickers, temporaryPackOrder: temporaryPackOrder, trendingIsDismissed: trendingIsDismissed, peerSpecificPack: peerSpecificPack.0, canInstallPeerSpecificPack: peerSpecificPack.1, theme: theme, strings: strings, premiumStickers: hasPremium ? premiumStickers : nil, expanded: panelExpanded, reorderable: true)
|
||||
let gifPaneEntries = chatMediaInputPanelGifModeEntries(theme: theme, strings: strings, reactions: reactions, animatedEmojiStickers: animatedEmojiStickers, expanded: panelExpanded)
|
||||
var gridEntries = chatMediaInputGridEntries(view: view, savedStickers: savedStickers, recentStickers: recentStickers, peerSpecificPack: peerSpecificPack.0, canInstallPeerSpecificPack: peerSpecificPack.1, trendingPacks: trendingPacks, installedPacks: installedPacks, premiumStickers: premiumStickers, trendingIsDismissed: trendingIsDismissed, strings: strings, theme: theme, hasPremium: hasPremium)
|
||||
|
||||
|
@ -721,7 +721,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
|
||||
}
|
||||
|
||||
override func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, ListViewItemApply, Bool) -> Void) {
|
||||
let displaySize = CGSize(width: 184.0, height: 184.0)
|
||||
let displaySize = CGSize(width: 180.0, height: 180.0)
|
||||
let telegramFile = self.telegramFile
|
||||
let emojiFile = self.emojiFile
|
||||
let telegramDice = self.telegramDice
|
||||
|
Loading…
x
Reference in New Issue
Block a user