mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Use shared emoji, reactions and sticker lists in chat
This commit is contained in:
@@ -175,6 +175,72 @@ public final class AccountContextImpl: AccountContext {
|
||||
|
||||
private var animatedEmojiStickersDisposable: Disposable?
|
||||
public private(set) var animatedEmojiStickers: [String: [StickerPackItem]] = [:]
|
||||
private let animatedEmojiStickersValue = Promise<[String: [StickerPackItem]]>()
|
||||
public var animatedEmojiStickersSignal: Signal<[String: [StickerPackItem]], NoError> {
|
||||
return self.animatedEmojiStickersValue.get()
|
||||
}
|
||||
|
||||
private var additionalAnimatedEmojiStickersValue: Promise<[String: [Int: StickerPackItem]]>?
|
||||
public var additionalAnimatedEmojiStickers: Signal<[String: [Int: StickerPackItem]], NoError> {
|
||||
let additionalAnimatedEmojiStickersValue: Promise<[String: [Int: StickerPackItem]]>
|
||||
if let current = self.additionalAnimatedEmojiStickersValue {
|
||||
additionalAnimatedEmojiStickersValue = current
|
||||
} else {
|
||||
additionalAnimatedEmojiStickersValue = Promise<[String: [Int: StickerPackItem]]>()
|
||||
self.additionalAnimatedEmojiStickersValue = additionalAnimatedEmojiStickersValue
|
||||
additionalAnimatedEmojiStickersValue.set(self.engine.stickers.loadedStickerPack(reference: .animatedEmojiAnimations, forceActualized: false)
|
||||
|> map { animatedEmoji -> [String: [Int: StickerPackItem]] in
|
||||
let sequence = "0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣".strippedEmoji
|
||||
var animatedEmojiStickers: [String: [Int: StickerPackItem]] = [:]
|
||||
switch animatedEmoji {
|
||||
case let .result(_, items, _):
|
||||
for item in items {
|
||||
let indexKeys = item.getStringRepresentationsOfIndexKeys()
|
||||
if indexKeys.count > 1, let first = indexKeys.first, let last = indexKeys.last {
|
||||
let emoji: String?
|
||||
let indexEmoji: String?
|
||||
if sequence.contains(first.strippedEmoji) {
|
||||
emoji = last
|
||||
indexEmoji = first
|
||||
} else if sequence.contains(last.strippedEmoji) {
|
||||
emoji = first
|
||||
indexEmoji = last
|
||||
} else {
|
||||
emoji = nil
|
||||
indexEmoji = nil
|
||||
}
|
||||
|
||||
if let emoji = emoji?.strippedEmoji, let indexEmoji = indexEmoji?.strippedEmoji.first, let strIndex = sequence.firstIndex(of: indexEmoji) {
|
||||
let index = sequence.distance(from: sequence.startIndex, to: strIndex)
|
||||
if animatedEmojiStickers[emoji] != nil {
|
||||
animatedEmojiStickers[emoji]![index] = item
|
||||
} else {
|
||||
animatedEmojiStickers[emoji] = [index: item]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
return animatedEmojiStickers
|
||||
})
|
||||
}
|
||||
return additionalAnimatedEmojiStickersValue.get()
|
||||
}
|
||||
|
||||
private var availableReactionsValue: Promise<AvailableReactions?>?
|
||||
public var availableReactions: Signal<AvailableReactions?, NoError> {
|
||||
let availableReactionsValue: Promise<AvailableReactions?>
|
||||
if let current = self.availableReactionsValue {
|
||||
availableReactionsValue = current
|
||||
} else {
|
||||
availableReactionsValue = Promise<AvailableReactions?>()
|
||||
self.availableReactionsValue = availableReactionsValue
|
||||
availableReactionsValue.set(self.engine.stickers.availableReactions())
|
||||
}
|
||||
return availableReactionsValue.get()
|
||||
}
|
||||
|
||||
private var userLimitsConfigurationDisposable: Disposable?
|
||||
public private(set) var userLimits: EngineConfiguration.UserLimits
|
||||
@@ -311,6 +377,7 @@ public final class AccountContextImpl: AccountContext {
|
||||
return
|
||||
}
|
||||
strongSelf.animatedEmojiStickers = stickers
|
||||
strongSelf.animatedEmojiStickersValue.set(.single(stickers))
|
||||
})
|
||||
|
||||
self.userLimitsConfigurationDisposable = (self.account.postbox.peerView(id: self.account.peerId)
|
||||
|
||||
Reference in New Issue
Block a user