[WIP ]Emoji statuses

This commit is contained in:
Ali
2022-08-09 22:58:03 +04:00
parent 99c8a72cbd
commit feb899920c
49 changed files with 776 additions and 437 deletions

View File

@@ -103,7 +103,7 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
return hasPremium
}
static func emojiInputData(context: AccountContext, animationCache: AnimationCache, animationRenderer: MultiAnimationRenderer, isStandalone: Bool, areUnicodeEmojiEnabled: Bool, areCustomEmojiEnabled: Bool, chatPeerId: EnginePeer.Id?) -> Signal<EmojiPagerContentComponent, NoError> {
static func emojiInputData(context: AccountContext, animationCache: AnimationCache, animationRenderer: MultiAnimationRenderer, isStandalone: Bool, isReactionSelection: Bool, areUnicodeEmojiEnabled: Bool, areCustomEmojiEnabled: Bool, chatPeerId: EnginePeer.Id?) -> Signal<EmojiPagerContentComponent, NoError> {
let premiumConfiguration = PremiumConfiguration.with(appConfiguration: context.currentAppConfiguration.with { $0 })
let isPremiumDisabled = premiumConfiguration.isPremiumDisabled
@@ -118,7 +118,7 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
struct ItemGroup {
var supergroupId: AnyHashable
var id: AnyHashable
var title: String
var title: String?
var subtitle: String?
var isPremiumLocked: Bool
var isFeatured: Bool
@@ -136,6 +136,23 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
}
}
if isReactionSelection {
let resultItem = EmojiPagerContentComponent.Item(
animationData: nil,
content: .icon(.premiumStar),
itemFile: nil,
subgroupId: nil
)
let groupId = "recent"
if let groupIndex = itemGroupIndexById[groupId] {
itemGroups[groupIndex].items.append(resultItem)
} else {
itemGroupIndexById[groupId] = itemGroups.count
itemGroups.append(ItemGroup(supergroupId: groupId, id: groupId, title: nil, subtitle: nil, isPremiumLocked: false, isFeatured: false, isExpandable: false, headerItem: nil, items: [resultItem]))
}
}
if let recentEmoji = recentEmoji {
for item in recentEmoji.items {
guard let item = item.contents.get(RecentEmojiItem.self) else {
@@ -153,17 +170,18 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
let resultItem: EmojiPagerContentComponent.Item
switch item.content {
case let .file(file):
let animationData = EntityKeyboardAnimationData(file: file)
resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: file),
animationData: animationData,
content: .animation(animationData),
itemFile: file,
staticEmoji: nil,
subgroupId: nil
)
case let .text(text):
resultItem = EmojiPagerContentComponent.Item(
animationData: nil,
content: .staticEmoji(text),
itemFile: nil,
staticEmoji: text,
subgroupId: nil
)
}
@@ -184,8 +202,8 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
for emojiString in list {
let resultItem = EmojiPagerContentComponent.Item(
animationData: nil,
content: .staticEmoji(emojiString),
itemFile: nil,
staticEmoji: emojiString,
subgroupId: subgroupId.rawValue
)
@@ -209,10 +227,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
guard let item = entry.item as? StickerPackItem else {
continue
}
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -266,10 +285,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
}
for item in featuredEmojiPack.topItems {
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -360,7 +380,8 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
items: group.items
)
},
itemLayoutType: .compact
itemLayoutType: .compact,
warpContentsOnEdges: isReactionSelection
)
}
return emojiItems
@@ -380,7 +401,7 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
animationRenderer = MultiAnimationRendererImpl()
//}
let emojiItems = emojiInputData(context: context, animationCache: animationCache, animationRenderer: animationRenderer, isStandalone: false, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: chatPeerId)
let emojiItems = emojiInputData(context: context, animationCache: animationCache, animationRenderer: animationRenderer, isStandalone: false, isReactionSelection: false, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: chatPeerId)
let stickerNamespaces: [ItemCollectionId.Namespace] = [Namespaces.ItemCollection.CloudStickerPacks]
let stickerOrderedItemListCollectionIds: [Int32] = [Namespaces.OrderedItemList.CloudSavedStickers, Namespaces.OrderedItemList.CloudRecentStickers, Namespaces.OrderedItemList.CloudAllPremiumStickers]
@@ -485,10 +506,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
continue
}
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -520,10 +542,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
continue
}
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -546,10 +569,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
continue
}
let animationData = EntityKeyboardAnimationData(file: item.media)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.media),
animationData: animationData,
content: .animation(animationData),
itemFile: item.media,
staticEmoji: nil,
subgroupId: nil
)
@@ -595,10 +619,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
}
processedIds.insert(item.file.fileId)
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -626,10 +651,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
}
processedIds.insert(item.file.fileId)
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -647,10 +673,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
guard let item = entry.item as? StickerPackItem else {
continue
}
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
let groupId = entry.index.collectionId
@@ -697,10 +724,11 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
}
for item in featuredStickerPack.topItems {
let animationData = EntityKeyboardAnimationData(file: item.file)
let resultItem = EmojiPagerContentComponent.Item(
animationData: EntityKeyboardAnimationData(file: item.file),
animationData: animationData,
content: .animation(animationData),
itemFile: item.file,
staticEmoji: nil,
subgroupId: nil
)
@@ -778,7 +806,8 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
items: group.items
)
},
itemLayoutType: .detailed
itemLayoutType: .detailed,
warpContentsOnEdges: false
)
}
@@ -1256,7 +1285,7 @@ final class ChatEntityKeyboardInputNode: ChatInputNode {
AudioServicesPlaySystemSound(0x450)
interfaceInteraction.insertText(NSAttributedString(string: text, attributes: [ChatTextInputAttributes.customEmoji: emojiAttribute]))
}
} else if let staticEmoji = item.staticEmoji {
} else if case let .staticEmoji(staticEmoji) = item.content {
AudioServicesPlaySystemSound(0x450)
interfaceInteraction.insertText(NSAttributedString(string: staticEmoji, attributes: [:]))
}
@@ -2221,7 +2250,7 @@ final class EntityInputView: UIView, AttachmentTextInputPanelInputView, UIInputV
AudioServicesPlaySystemSound(0x450)
strongSelf.insertText?(NSAttributedString(string: text, attributes: [ChatTextInputAttributes.customEmoji: emojiAttribute]))
}
} else if let staticEmoji = item.staticEmoji {
} else if case let .staticEmoji(staticEmoji) = item.content {
AudioServicesPlaySystemSound(0x450)
strongSelf.insertText?(NSAttributedString(string: staticEmoji, attributes: [:]))
}
@@ -2274,7 +2303,7 @@ final class EntityInputView: UIView, AttachmentTextInputPanelInputView, UIInputV
let semaphore = DispatchSemaphore(value: 0)
var emojiComponent: EmojiPagerContentComponent?
let _ = ChatEntityKeyboardInputNode.emojiInputData(context: context, animationCache: self.animationCache, animationRenderer: self.animationRenderer, isStandalone: true, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: nil).start(next: { value in
let _ = ChatEntityKeyboardInputNode.emojiInputData(context: context, animationCache: self.animationCache, animationRenderer: self.animationRenderer, isStandalone: true, isReactionSelection: false, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: nil).start(next: { value in
emojiComponent = value
semaphore.signal()
})
@@ -2289,7 +2318,7 @@ final class EntityInputView: UIView, AttachmentTextInputPanelInputView, UIInputV
gifs: nil,
availableGifSearchEmojies: []
),
updatedInputData: ChatEntityKeyboardInputNode.emojiInputData(context: context, animationCache: self.animationCache, animationRenderer: self.animationRenderer, isStandalone: true, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: nil) |> map { emojiComponent -> ChatEntityKeyboardInputNode.InputData in
updatedInputData: ChatEntityKeyboardInputNode.emojiInputData(context: context, animationCache: self.animationCache, animationRenderer: self.animationRenderer, isStandalone: true, isReactionSelection: false, areUnicodeEmojiEnabled: true, areCustomEmojiEnabled: areCustomEmojiEnabled, chatPeerId: nil) |> map { emojiComponent -> ChatEntityKeyboardInputNode.InputData in
return ChatEntityKeyboardInputNode.InputData(
emoji: emojiComponent,
stickers: nil,