From 1ca3bdc9f0dabcc6eec46c18f9d7bee937ce9fb0 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 29 Nov 2019 11:05:56 +0400 Subject: [PATCH 1/3] Revert "Update API" This reverts commit 1d4fe238fe393c8281e9355dadbca2b1d76065ff. --- submodules/TelegramApi/Sources/Api0.swift | 15 +- submodules/TelegramApi/Sources/Api1.swift | 244 +++++++++++++++++- submodules/TelegramApi/Sources/Api3.swift | 55 ++++ .../Sources/AccountIntermediateState.swift | 8 +- .../Sources/AccountStateManagementUtils.swift | 10 +- .../Sources/MessageReactions.swift | 5 +- .../Sources/ReactionsMessageAttribute.swift | 7 +- .../Sources/StoreMessage_Telegram.swift | 10 +- .../Sources/UpdateMessageService.swift | 4 +- .../TelegramUI/ChatController.swift | 4 +- .../ChatMessageBubbleItemNode.swift | 2 +- 11 files changed, 327 insertions(+), 37 deletions(-) diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index 68ef4d0fc9..c3eff97993 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -5,6 +5,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[570911930] = { return $0.readInt64() } dict[571523412] = { return $0.readDouble() } dict[-1255641564] = { return parseString($0) } + dict[-475111160] = { return Api.MessageReactionsList.parse_messageReactionsList($0) } dict[-1240849242] = { return Api.messages.StickerSet.parse_stickerSet($0) } dict[-457104426] = { return Api.InputGeoPoint.parse_inputGeoPointEmpty($0) } dict[-206066487] = { return Api.InputGeoPoint.parse_inputGeoPoint($0) } @@ -243,6 +244,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[967122427] = { return Api.Update.parse_updateNewScheduledMessage($0) } dict[-1870238482] = { return Api.Update.parse_updateDeleteScheduledMessages($0) } dict[-2112423005] = { return Api.Update.parse_updateTheme($0) } + dict[357013699] = { return Api.Update.parse_updateMessageReactions($0) } dict[-2027964103] = { return Api.Update.parse_updateGeoLiveViewed($0) } dict[1448076945] = { return Api.Update.parse_updateLoginToken($0) } dict[1558266229] = { return Api.PopularContact.parse_popularContact($0) } @@ -286,6 +288,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[1012306921] = { return Api.InputTheme.parse_inputTheme($0) } dict[-175567375] = { return Api.InputTheme.parse_inputThemeSlug($0) } dict[1158290442] = { return Api.messages.FoundGifs.parse_foundGifs($0) } + dict[-1199954735] = { return Api.MessageReactions.parse_messageReactions($0) } dict[-1132476723] = { return Api.FileLocation.parse_fileLocationToBeDeprecated($0) } dict[-716006138] = { return Api.Poll.parse_poll($0) } dict[423314455] = { return Api.InputNotifyPeer.parse_inputNotifyUsers($0) } @@ -564,7 +567,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1820043071] = { return Api.User.parse_user($0) } dict[-2082087340] = { return Api.Message.parse_messageEmpty($0) } dict[-1642487306] = { return Api.Message.parse_messageService($0) } - dict[1160515173] = { return Api.Message.parse_message($0) } + dict[-1752573244] = { return Api.Message.parse_message($0) } dict[186120336] = { return Api.messages.RecentStickers.parse_recentStickersNotModified($0) } dict[586395571] = { return Api.messages.RecentStickers.parse_recentStickers($0) } dict[-182231723] = { return Api.InputFileLocation.parse_inputEncryptedFileLocation($0) } @@ -619,6 +622,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1625153079] = { return Api.InputWebFileLocation.parse_inputWebFileGeoPointLocation($0) } dict[-332168592] = { return Api.MessageFwdHeader.parse_messageFwdHeader($0) } dict[398898678] = { return Api.help.Support.parse_support($0) } + dict[1873957073] = { return Api.ReactionCount.parse_reactionCount($0) } dict[1474492012] = { return Api.MessagesFilter.parse_inputMessagesFilterEmpty($0) } dict[-1777752804] = { return Api.MessagesFilter.parse_inputMessagesFilterPhotos($0) } dict[-1614803355] = { return Api.MessagesFilter.parse_inputMessagesFilterVideo($0) } @@ -646,6 +650,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1449145777] = { return Api.upload.CdnFile.parse_cdnFile($0) } dict[1984136919] = { return Api.wallet.LiteResponse.parse_liteResponse($0) } dict[415997816] = { return Api.help.InviteText.parse_inviteText($0) } + dict[-764945220] = { return Api.MessageUserReaction.parse_messageUserReaction($0) } dict[-1937807902] = { return Api.BotInlineMessage.parse_botInlineMessageText($0) } dict[982505656] = { return Api.BotInlineMessage.parse_botInlineMessageMediaGeo($0) } dict[1984755728] = { return Api.BotInlineMessage.parse_botInlineMessageMediaAuto($0) } @@ -845,6 +850,8 @@ public struct Api { public static func serializeObject(_ object: Any, buffer: Buffer, boxed: Swift.Bool) { switch object { + case let _1 as Api.MessageReactionsList: + _1.serialize(buffer, boxed) case let _1 as Api.messages.StickerSet: _1.serialize(buffer, boxed) case let _1 as Api.InputGeoPoint: @@ -979,6 +986,8 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.messages.FoundGifs: _1.serialize(buffer, boxed) + case let _1 as Api.MessageReactions: + _1.serialize(buffer, boxed) case let _1 as Api.FileLocation: _1.serialize(buffer, boxed) case let _1 as Api.Poll: @@ -1271,6 +1280,8 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.help.Support: _1.serialize(buffer, boxed) + case let _1 as Api.ReactionCount: + _1.serialize(buffer, boxed) case let _1 as Api.MessagesFilter: _1.serialize(buffer, boxed) case let _1 as Api.messages.Dialogs: @@ -1283,6 +1294,8 @@ public struct Api { _1.serialize(buffer, boxed) case let _1 as Api.help.InviteText: _1.serialize(buffer, boxed) + case let _1 as Api.MessageUserReaction: + _1.serialize(buffer, boxed) case let _1 as Api.BotInlineMessage: _1.serialize(buffer, boxed) case let _1 as Api.InputPeerNotifySettings: diff --git a/submodules/TelegramApi/Sources/Api1.swift b/submodules/TelegramApi/Sources/Api1.swift index 3864c7cbc9..3cbf567230 100644 --- a/submodules/TelegramApi/Sources/Api1.swift +++ b/submodules/TelegramApi/Sources/Api1.swift @@ -1,4 +1,66 @@ public extension Api { + public enum MessageReactionsList: TypeConstructorDescription { + case messageReactionsList(flags: Int32, count: Int32, reactions: [Api.MessageUserReaction], users: [Api.User], nextOffset: String?) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .messageReactionsList(let flags, let count, let reactions, let users, let nextOffset): + if boxed { + buffer.appendInt32(-475111160) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeInt32(count, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(reactions.count)) + for item in reactions { + item.serialize(buffer, true) + } + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(users.count)) + for item in users { + item.serialize(buffer, true) + } + if Int(flags) & Int(1 << 0) != 0 {serializeString(nextOffset!, buffer: buffer, boxed: false)} + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .messageReactionsList(let flags, let count, let reactions, let users, let nextOffset): + return ("messageReactionsList", [("flags", flags), ("count", count), ("reactions", reactions), ("users", users), ("nextOffset", nextOffset)]) + } + } + + public static func parse_messageReactionsList(_ reader: BufferReader) -> MessageReactionsList? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Int32? + _2 = reader.readInt32() + var _3: [Api.MessageUserReaction]? + if let _ = reader.readInt32() { + _3 = Api.parseVector(reader, elementSignature: 0, elementType: Api.MessageUserReaction.self) + } + var _4: [Api.User]? + if let _ = reader.readInt32() { + _4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.User.self) + } + var _5: String? + if Int(_1!) & Int(1 << 0) != 0 {_5 = parseString(reader) } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = (Int(_1!) & Int(1 << 0) == 0) || _5 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 { + return Api.MessageReactionsList.messageReactionsList(flags: _1!, count: _2!, reactions: _3!, users: _4!, nextOffset: _5) + } + else { + return nil + } + } + + } public enum InputGeoPoint: TypeConstructorDescription { case inputGeoPointEmpty case inputGeoPoint(lat: Double, long: Double) @@ -4082,6 +4144,7 @@ public extension Api { case updateNewScheduledMessage(message: Api.Message) case updateDeleteScheduledMessages(peer: Api.Peer, messages: [Int32]) case updateTheme(theme: Api.Theme) + case updateMessageReactions(peer: Api.Peer, msgId: Int32, reactions: Api.MessageReactions) case updateGeoLiveViewed(peer: Api.Peer, msgId: Int32) case updateLoginToken @@ -4708,6 +4771,14 @@ public extension Api { } theme.serialize(buffer, true) break + case .updateMessageReactions(let peer, let msgId, let reactions): + if boxed { + buffer.appendInt32(357013699) + } + peer.serialize(buffer, true) + serializeInt32(msgId, buffer: buffer, boxed: false) + reactions.serialize(buffer, true) + break case .updateGeoLiveViewed(let peer, let msgId): if boxed { buffer.appendInt32(-2027964103) @@ -4874,6 +4945,8 @@ public extension Api { return ("updateDeleteScheduledMessages", [("peer", peer), ("messages", messages)]) case .updateTheme(let theme): return ("updateTheme", [("theme", theme)]) + case .updateMessageReactions(let peer, let msgId, let reactions): + return ("updateMessageReactions", [("peer", peer), ("msgId", msgId), ("reactions", reactions)]) case .updateGeoLiveViewed(let peer, let msgId): return ("updateGeoLiveViewed", [("peer", peer), ("msgId", msgId)]) case .updateLoginToken: @@ -6136,6 +6209,27 @@ public extension Api { return nil } } + public static func parse_updateMessageReactions(_ reader: BufferReader) -> Update? { + var _1: Api.Peer? + if let signature = reader.readInt32() { + _1 = Api.parse(reader, signature: signature) as? Api.Peer + } + var _2: Int32? + _2 = reader.readInt32() + var _3: Api.MessageReactions? + if let signature = reader.readInt32() { + _3 = Api.parse(reader, signature: signature) as? Api.MessageReactions + } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + if _c1 && _c2 && _c3 { + return Api.Update.updateMessageReactions(peer: _1!, msgId: _2!, reactions: _3!) + } + else { + return nil + } + } public static func parse_updateGeoLiveViewed(_ reader: BufferReader) -> Update? { var _1: Api.Peer? if let signature = reader.readInt32() { @@ -7110,6 +7204,50 @@ public extension Api { } } + } + public enum MessageReactions: TypeConstructorDescription { + case messageReactions(flags: Int32, results: [Api.ReactionCount]) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .messageReactions(let flags, let results): + if boxed { + buffer.appendInt32(-1199954735) + } + serializeInt32(flags, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(results.count)) + for item in results { + item.serialize(buffer, true) + } + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .messageReactions(let flags, let results): + return ("messageReactions", [("flags", flags), ("results", results)]) + } + } + + public static func parse_messageReactions(_ reader: BufferReader) -> MessageReactions? { + var _1: Int32? + _1 = reader.readInt32() + var _2: [Api.ReactionCount]? + if let _ = reader.readInt32() { + _2 = Api.parseVector(reader, elementSignature: 0, elementType: Api.ReactionCount.self) + } + let _c1 = _1 != nil + let _c2 = _2 != nil + if _c1 && _c2 { + return Api.MessageReactions.messageReactions(flags: _1!, results: _2!) + } + else { + return nil + } + } + } public enum FileLocation: TypeConstructorDescription { case fileLocationToBeDeprecated(volumeId: Int64, localId: Int32) @@ -14222,7 +14360,7 @@ public extension Api { public enum Message: TypeConstructorDescription { case messageEmpty(id: Int32) case messageService(flags: Int32, id: Int32, fromId: Int32?, toId: Api.Peer, replyToMsgId: Int32?, date: Int32, action: Api.MessageAction) - case message(flags: Int32, id: Int32, fromId: Int32?, toId: Api.Peer, fwdFrom: Api.MessageFwdHeader?, viaBotId: Int32?, replyToMsgId: Int32?, date: Int32, message: String, media: Api.MessageMedia?, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, views: Int32?, editDate: Int32?, postAuthor: String?, groupedId: Int64?, restrictionReason: [Api.RestrictionReason]?) + case message(flags: Int32, id: Int32, fromId: Int32?, toId: Api.Peer, fwdFrom: Api.MessageFwdHeader?, viaBotId: Int32?, replyToMsgId: Int32?, date: Int32, message: String, media: Api.MessageMedia?, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, views: Int32?, editDate: Int32?, postAuthor: String?, groupedId: Int64?, reactions: Api.MessageReactions?, restrictionReason: [Api.RestrictionReason]?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -14244,9 +14382,9 @@ public extension Api { serializeInt32(date, buffer: buffer, boxed: false) action.serialize(buffer, true) break - case .message(let flags, let id, let fromId, let toId, let fwdFrom, let viaBotId, let replyToMsgId, let date, let message, let media, let replyMarkup, let entities, let views, let editDate, let postAuthor, let groupedId, let restrictionReason): + case .message(let flags, let id, let fromId, let toId, let fwdFrom, let viaBotId, let replyToMsgId, let date, let message, let media, let replyMarkup, let entities, let views, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason): if boxed { - buffer.appendInt32(1160515173) + buffer.appendInt32(-1752573244) } serializeInt32(flags, buffer: buffer, boxed: false) serializeInt32(id, buffer: buffer, boxed: false) @@ -14268,6 +14406,7 @@ public extension Api { if Int(flags) & Int(1 << 15) != 0 {serializeInt32(editDate!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 16) != 0 {serializeString(postAuthor!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 17) != 0 {serializeInt64(groupedId!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 20) != 0 {reactions!.serialize(buffer, true)} if Int(flags) & Int(1 << 22) != 0 {buffer.appendInt32(481674261) buffer.appendInt32(Int32(restrictionReason!.count)) for item in restrictionReason! { @@ -14283,8 +14422,8 @@ public extension Api { return ("messageEmpty", [("id", id)]) case .messageService(let flags, let id, let fromId, let toId, let replyToMsgId, let date, let action): return ("messageService", [("flags", flags), ("id", id), ("fromId", fromId), ("toId", toId), ("replyToMsgId", replyToMsgId), ("date", date), ("action", action)]) - case .message(let flags, let id, let fromId, let toId, let fwdFrom, let viaBotId, let replyToMsgId, let date, let message, let media, let replyMarkup, let entities, let views, let editDate, let postAuthor, let groupedId, let restrictionReason): - return ("message", [("flags", flags), ("id", id), ("fromId", fromId), ("toId", toId), ("fwdFrom", fwdFrom), ("viaBotId", viaBotId), ("replyToMsgId", replyToMsgId), ("date", date), ("message", message), ("media", media), ("replyMarkup", replyMarkup), ("entities", entities), ("views", views), ("editDate", editDate), ("postAuthor", postAuthor), ("groupedId", groupedId), ("restrictionReason", restrictionReason)]) + case .message(let flags, let id, let fromId, let toId, let fwdFrom, let viaBotId, let replyToMsgId, let date, let message, let media, let replyMarkup, let entities, let views, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason): + return ("message", [("flags", flags), ("id", id), ("fromId", fromId), ("toId", toId), ("fwdFrom", fwdFrom), ("viaBotId", viaBotId), ("replyToMsgId", replyToMsgId), ("date", date), ("message", message), ("media", media), ("replyMarkup", replyMarkup), ("entities", entities), ("views", views), ("editDate", editDate), ("postAuthor", postAuthor), ("groupedId", groupedId), ("reactions", reactions), ("restrictionReason", restrictionReason)]) } } @@ -14375,9 +14514,13 @@ public extension Api { if Int(_1!) & Int(1 << 16) != 0 {_15 = parseString(reader) } var _16: Int64? if Int(_1!) & Int(1 << 17) != 0 {_16 = reader.readInt64() } - var _17: [Api.RestrictionReason]? + var _17: Api.MessageReactions? + if Int(_1!) & Int(1 << 20) != 0 {if let signature = reader.readInt32() { + _17 = Api.parse(reader, signature: signature) as? Api.MessageReactions + } } + var _18: [Api.RestrictionReason]? if Int(_1!) & Int(1 << 22) != 0 {if let _ = reader.readInt32() { - _17 = Api.parseVector(reader, elementSignature: 0, elementType: Api.RestrictionReason.self) + _18 = Api.parseVector(reader, elementSignature: 0, elementType: Api.RestrictionReason.self) } } let _c1 = _1 != nil let _c2 = _2 != nil @@ -14395,9 +14538,10 @@ public extension Api { let _c14 = (Int(_1!) & Int(1 << 15) == 0) || _14 != nil let _c15 = (Int(_1!) & Int(1 << 16) == 0) || _15 != nil let _c16 = (Int(_1!) & Int(1 << 17) == 0) || _16 != nil - let _c17 = (Int(_1!) & Int(1 << 22) == 0) || _17 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 && _c12 && _c13 && _c14 && _c15 && _c16 && _c17 { - return Api.Message.message(flags: _1!, id: _2!, fromId: _3, toId: _4!, fwdFrom: _5, viaBotId: _6, replyToMsgId: _7, date: _8!, message: _9!, media: _10, replyMarkup: _11, entities: _12, views: _13, editDate: _14, postAuthor: _15, groupedId: _16, restrictionReason: _17) + let _c17 = (Int(_1!) & Int(1 << 20) == 0) || _17 != nil + let _c18 = (Int(_1!) & Int(1 << 22) == 0) || _18 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 && _c12 && _c13 && _c14 && _c15 && _c16 && _c17 && _c18 { + return Api.Message.message(flags: _1!, id: _2!, fromId: _3, toId: _4!, fwdFrom: _5, viaBotId: _6, replyToMsgId: _7, date: _8!, message: _9!, media: _10, replyMarkup: _11, entities: _12, views: _13, editDate: _14, postAuthor: _15, groupedId: _16, reactions: _17, restrictionReason: _18) } else { return nil @@ -15890,6 +16034,48 @@ public extension Api { } } + } + public enum ReactionCount: TypeConstructorDescription { + case reactionCount(flags: Int32, reaction: String, count: Int32) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .reactionCount(let flags, let reaction, let count): + if boxed { + buffer.appendInt32(1873957073) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeString(reaction, buffer: buffer, boxed: false) + serializeInt32(count, buffer: buffer, boxed: false) + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .reactionCount(let flags, let reaction, let count): + return ("reactionCount", [("flags", flags), ("reaction", reaction), ("count", count)]) + } + } + + public static func parse_reactionCount(_ reader: BufferReader) -> ReactionCount? { + var _1: Int32? + _1 = reader.readInt32() + var _2: String? + _2 = parseString(reader) + var _3: Int32? + _3 = reader.readInt32() + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + if _c1 && _c2 && _c3 { + return Api.ReactionCount.reactionCount(flags: _1!, reaction: _2!, count: _3!) + } + else { + return nil + } + } + } public enum MessagesFilter: TypeConstructorDescription { case inputMessagesFilterEmpty @@ -16202,6 +16388,44 @@ public extension Api { } } + } + public enum MessageUserReaction: TypeConstructorDescription { + case messageUserReaction(userId: Int32, reaction: String) + + public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { + switch self { + case .messageUserReaction(let userId, let reaction): + if boxed { + buffer.appendInt32(-764945220) + } + serializeInt32(userId, buffer: buffer, boxed: false) + serializeString(reaction, buffer: buffer, boxed: false) + break + } + } + + public func descriptionFields() -> (String, [(String, Any)]) { + switch self { + case .messageUserReaction(let userId, let reaction): + return ("messageUserReaction", [("userId", userId), ("reaction", reaction)]) + } + } + + public static func parse_messageUserReaction(_ reader: BufferReader) -> MessageUserReaction? { + var _1: Int32? + _1 = reader.readInt32() + var _2: String? + _2 = parseString(reader) + let _c1 = _1 != nil + let _c2 = _2 != nil + if _c1 && _c2 { + return Api.MessageUserReaction.messageUserReaction(userId: _1!, reaction: _2!) + } + else { + return nil + } + } + } public enum BotInlineMessage: TypeConstructorDescription { case botInlineMessageText(flags: Int32, message: String, entities: [Api.MessageEntity]?, replyMarkup: Api.ReplyMarkup?) diff --git a/submodules/TelegramApi/Sources/Api3.swift b/submodules/TelegramApi/Sources/Api3.swift index e4b3f67a78..ef1dad0a75 100644 --- a/submodules/TelegramApi/Sources/Api3.swift +++ b/submodules/TelegramApi/Sources/Api3.swift @@ -3161,6 +3161,61 @@ public extension Api { return result }) } + + public static func sendReaction(flags: Int32, peer: Api.InputPeer, msgId: Int32, reaction: String?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(627641572) + serializeInt32(flags, buffer: buffer, boxed: false) + peer.serialize(buffer, true) + serializeInt32(msgId, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {serializeString(reaction!, buffer: buffer, boxed: false)} + return (FunctionDescription(name: "messages.sendReaction", parameters: [("flags", flags), ("peer", peer), ("msgId", msgId), ("reaction", reaction)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in + let reader = BufferReader(buffer) + var result: Api.Updates? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.Updates + } + return result + }) + } + + public static func getMessagesReactions(peer: Api.InputPeer, id: [Int32]) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(-1950707482) + peer.serialize(buffer, true) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(id.count)) + for item in id { + serializeInt32(item, buffer: buffer, boxed: false) + } + return (FunctionDescription(name: "messages.getMessagesReactions", parameters: [("peer", peer), ("id", id)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in + let reader = BufferReader(buffer) + var result: Api.Updates? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.Updates + } + return result + }) + } + + public static func getMessageReactionsList(flags: Int32, peer: Api.InputPeer, id: Int32, reaction: String?, offset: String?, limit: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(363935594) + serializeInt32(flags, buffer: buffer, boxed: false) + peer.serialize(buffer, true) + serializeInt32(id, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {serializeString(reaction!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 1) != 0 {serializeString(offset!, buffer: buffer, boxed: false)} + serializeInt32(limit, buffer: buffer, boxed: false) + return (FunctionDescription(name: "messages.getMessageReactionsList", parameters: [("flags", flags), ("peer", peer), ("id", id), ("reaction", reaction), ("offset", offset), ("limit", limit)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.MessageReactionsList? in + let reader = BufferReader(buffer) + var result: Api.MessageReactionsList? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.MessageReactionsList + } + return result + }) + } } public struct channels { public static func readHistory(channel: Api.InputChannel, maxId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { diff --git a/submodules/TelegramCore/Sources/AccountIntermediateState.swift b/submodules/TelegramCore/Sources/AccountIntermediateState.swift index 208135a437..01e6f24b99 100644 --- a/submodules/TelegramCore/Sources/AccountIntermediateState.swift +++ b/submodules/TelegramCore/Sources/AccountIntermediateState.swift @@ -62,7 +62,7 @@ enum AccountStateMutationOperation { case DeleteMessages([MessageId]) case EditMessage(MessageId, StoreMessage) case UpdateMessagePoll(MediaId, Api.Poll?, Api.PollResults) - //case UpdateMessageReactions(MessageId, Api.MessageReactions) + case UpdateMessageReactions(MessageId, Api.MessageReactions) case UpdateMedia(MediaId, Media?) case ReadInbox(MessageId) case ReadOutbox(MessageId, Int32?) @@ -217,9 +217,9 @@ struct AccountMutableState { self.addOperation(.UpdateMessagePoll(id, poll, results)) } - /*mutating func updateMessageReactions(_ messageId: MessageId, reactions: Api.MessageReactions) { + mutating func updateMessageReactions(_ messageId: MessageId, reactions: Api.MessageReactions) { self.addOperation(.UpdateMessageReactions(messageId, reactions)) - }*/ + } mutating func updateMedia(_ id: MediaId, media: Media?) { self.addOperation(.UpdateMedia(id, media)) @@ -404,7 +404,7 @@ struct AccountMutableState { mutating func addOperation(_ operation: AccountStateMutationOperation) { switch operation { - case .DeleteMessages, .DeleteMessagesWithGlobalIds, .EditMessage, .UpdateMessagePoll, /*.UpdateMessageReactions,*/ .UpdateMedia, .ReadOutbox, .ReadGroupFeedInbox, .MergePeerPresences, .UpdateSecretChat, .AddSecretMessages, .ReadSecretOutbox, .AddPeerInputActivity, .UpdateCachedPeerData, .UpdatePinnedItemIds, .ReadMessageContents, .UpdateMessageImpressionCount, .UpdateInstalledStickerPacks, .UpdateRecentGifs, .UpdateChatInputState, .UpdateCall, .UpdateLangPack, .UpdateMinAvailableMessage, .UpdatePeerChatUnreadMark, .UpdateIsContact, .UpdatePeerChatInclusion, .UpdatePeersNearby, .UpdateTheme: + case .DeleteMessages, .DeleteMessagesWithGlobalIds, .EditMessage, .UpdateMessagePoll, .UpdateMessageReactions, .UpdateMedia, .ReadOutbox, .ReadGroupFeedInbox, .MergePeerPresences, .UpdateSecretChat, .AddSecretMessages, .ReadSecretOutbox, .AddPeerInputActivity, .UpdateCachedPeerData, .UpdatePinnedItemIds, .ReadMessageContents, .UpdateMessageImpressionCount, .UpdateInstalledStickerPacks, .UpdateRecentGifs, .UpdateChatInputState, .UpdateCall, .UpdateLangPack, .UpdateMinAvailableMessage, .UpdatePeerChatUnreadMark, .UpdateIsContact, .UpdatePeerChatInclusion, .UpdatePeersNearby, .UpdateTheme: break case let .AddMessages(messages, location): for message in messages { diff --git a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift index 5229060697..c524c7eb73 100644 --- a/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift +++ b/submodules/TelegramCore/Sources/AccountStateManagementUtils.swift @@ -1280,8 +1280,8 @@ private func finalStateWithUpdatesAndServerTime(postbox: Postbox, network: Netwo updatedState.updateLangPack(langCode: langCode, difference: difference) case let .updateMessagePoll(_, pollId, poll, results): updatedState.updateMessagePoll(MediaId(namespace: Namespaces.Media.CloudPoll, id: pollId), poll: poll, results: results) - /*case let .updateMessageReactions(peer, msgId, reactions): - updatedState.updateMessageReactions(MessageId(peerId: peer.peerId, namespace: Namespaces.Message.Cloud, id: msgId), reactions: reactions)*/ + case let .updateMessageReactions(peer, msgId, reactions): + updatedState.updateMessageReactions(MessageId(peerId: peer.peerId, namespace: Namespaces.Message.Cloud, id: msgId), reactions: reactions) case let .updateFolderPeers(folderPeers, _, _): for folderPeer in folderPeers { switch folderPeer { @@ -2025,7 +2025,7 @@ private func optimizedOperations(_ operations: [AccountStateMutationOperation]) var currentAddScheduledMessages: OptimizeAddMessagesState? for operation in operations { switch operation { - case .DeleteMessages, .DeleteMessagesWithGlobalIds, .EditMessage, .UpdateMessagePoll, /*.UpdateMessageReactions,*/ .UpdateMedia, .MergeApiChats, .MergeApiUsers, .MergePeerPresences, .UpdatePeer, .ReadInbox, .ReadOutbox, .ReadGroupFeedInbox, .ResetReadState, .ResetIncomingReadState, .UpdatePeerChatUnreadMark, .ResetMessageTagSummary, .UpdateNotificationSettings, .UpdateGlobalNotificationSettings, .UpdateSecretChat, .AddSecretMessages, .ReadSecretOutbox, .AddPeerInputActivity, .UpdateCachedPeerData, .UpdatePinnedItemIds, .ReadMessageContents, .UpdateMessageImpressionCount, .UpdateInstalledStickerPacks, .UpdateRecentGifs, .UpdateChatInputState, .UpdateCall, .UpdateLangPack, .UpdateMinAvailableMessage, .UpdateIsContact, .UpdatePeerChatInclusion, .UpdatePeersNearby, .UpdateTheme: + case .DeleteMessages, .DeleteMessagesWithGlobalIds, .EditMessage, .UpdateMessagePoll, .UpdateMessageReactions, .UpdateMedia, .MergeApiChats, .MergeApiUsers, .MergePeerPresences, .UpdatePeer, .ReadInbox, .ReadOutbox, .ReadGroupFeedInbox, .ResetReadState, .ResetIncomingReadState, .UpdatePeerChatUnreadMark, .ResetMessageTagSummary, .UpdateNotificationSettings, .UpdateGlobalNotificationSettings, .UpdateSecretChat, .AddSecretMessages, .ReadSecretOutbox, .AddPeerInputActivity, .UpdateCachedPeerData, .UpdatePinnedItemIds, .ReadMessageContents, .UpdateMessageImpressionCount, .UpdateInstalledStickerPacks, .UpdateRecentGifs, .UpdateChatInputState, .UpdateCall, .UpdateLangPack, .UpdateMinAvailableMessage, .UpdateIsContact, .UpdatePeerChatInclusion, .UpdatePeersNearby, .UpdateTheme: if let currentAddMessages = currentAddMessages, !currentAddMessages.messages.isEmpty { result.append(.AddMessages(currentAddMessages.messages, currentAddMessages.location)) } @@ -2347,7 +2347,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP updatedPoll = updatedPoll.withUpdatedResults(TelegramMediaPollResults(apiResults: results), min: resultsMin) updateMessageMedia(transaction: transaction, id: pollId, media: updatedPoll) } - /*case let .UpdateMessageReactions(messageId, reactions): + case let .UpdateMessageReactions(messageId, reactions): transaction.updateMessage(messageId, update: { currentMessage in var storeForwardInfo: StoreMessageForwardInfo? if let forwardInfo = currentMessage.forwardInfo { @@ -2366,7 +2366,7 @@ func replayFinalState(accountManager: AccountManager, postbox: Postbox, accountP attributes.append(ReactionsMessageAttribute(apiReactions: reactions)) } return .update(StoreMessage(id: currentMessage.id, globallyUniqueId: currentMessage.globallyUniqueId, groupingKey: currentMessage.groupingKey, timestamp: currentMessage.timestamp, flags: StoreMessageFlags(currentMessage.flags), tags: currentMessage.tags, globalTags: currentMessage.globalTags, localTags: currentMessage.localTags, forwardInfo: storeForwardInfo, authorId: currentMessage.author?.id, text: currentMessage.text, attributes: attributes, media: currentMessage.media)) - })*/ + }) case let .UpdateMedia(id, media): if let media = media as? TelegramMediaWebpage { updatedWebpages[id] = media diff --git a/submodules/TelegramCore/Sources/MessageReactions.swift b/submodules/TelegramCore/Sources/MessageReactions.swift index 72e52dfa51..c7b10828b2 100644 --- a/submodules/TelegramCore/Sources/MessageReactions.swift +++ b/submodules/TelegramCore/Sources/MessageReactions.swift @@ -34,8 +34,7 @@ private enum RequestUpdateMessageReactionError { private func requestUpdateMessageReaction(postbox: Postbox, network: Network, stateManager: AccountStateManager, messageId: MessageId) -> Signal { return .complete() - - /*return postbox.transaction { transaction -> (Peer, String?)? in + return postbox.transaction { transaction -> (Peer, String?)? in guard let peer = transaction.getPeer(messageId.peerId) else { return nil } @@ -91,7 +90,7 @@ private func requestUpdateMessageReaction(postbox: Postbox, network: Network, st |> castError(RequestUpdateMessageReactionError.self) |> ignoreValues } - }*/ + } } private final class ManagedApplyPendingMessageReactionsActionsHelper { diff --git a/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift b/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift index 86658a5ccb..f82b9d7d75 100644 --- a/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift +++ b/submodules/TelegramCore/Sources/ReactionsMessageAttribute.swift @@ -4,7 +4,7 @@ import TelegramApi import SyncCore -/*extension ReactionsMessageAttribute { +extension ReactionsMessageAttribute { func withUpdatedResults(_ reactions: Api.MessageReactions) -> ReactionsMessageAttribute { switch reactions { case let .messageReactions(flags, results): @@ -34,7 +34,7 @@ import SyncCore return ReactionsMessageAttribute(reactions: reactions) } } -}*/ +} public func mergedMessageReactions(attributes: [MessageAttribute]) -> ReactionsMessageAttribute? { var current: ReactionsMessageAttribute? @@ -86,7 +86,7 @@ public func mergedMessageReactions(attributes: [MessageAttribute]) -> ReactionsM } } -/*extension ReactionsMessageAttribute { +extension ReactionsMessageAttribute { convenience init(apiReactions: Api.MessageReactions) { switch apiReactions { case let .messageReactions(_, results): @@ -99,4 +99,3 @@ public func mergedMessageReactions(attributes: [MessageAttribute]) -> ReactionsM } } } -*/ diff --git a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift index c4f24f6dec..b95d950ce3 100644 --- a/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift +++ b/submodules/TelegramCore/Sources/StoreMessage_Telegram.swift @@ -136,7 +136,7 @@ func apiMessagePeerId(_ messsage: Api.Message) -> PeerId? { func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] { switch message { - case let .message(flags, _, fromId, toId, fwdHeader, viaBotId, _, _, _, media, _, entities, _, _, _, _, _): + case let .message(flags, _, fromId, toId, fwdHeader, viaBotId, _, _, _, media, _, entities, _, _, _, _, _, _): let peerId: PeerId switch toId { case let .peerUser(userId): @@ -240,7 +240,7 @@ func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] { func apiMessageAssociatedMessageIds(_ message: Api.Message) -> [MessageId]? { switch message { - case let .message(flags, _, fromId, toId, _, _, replyToMsgId, _, _, _, _, _, _, _, _, _, _): + case let .message(flags, _, fromId, toId, _, _, replyToMsgId, _, _, _, _, _, _, _, _, _, _, _): if let replyToMsgId = replyToMsgId { let peerId: PeerId switch toId { @@ -382,7 +382,7 @@ func messageTextEntitiesFromApiEntities(_ entities: [Api.MessageEntity]) -> [Mes extension StoreMessage { convenience init?(apiMessage: Api.Message, namespace: MessageId.Namespace = Namespaces.Message.Cloud) { switch apiMessage { - case let .message(flags, id, fromId, toId, fwdFrom, viaBotId, replyToMsgId, date, message, media, replyMarkup, entities, views, editDate, postAuthor, groupingId, restrictionReason): + case let .message(flags, id, fromId, toId, fwdFrom, viaBotId, replyToMsgId, date, message, media, replyMarkup, entities, views, editDate, postAuthor, groupingId, reactions, restrictionReason): let peerId: PeerId var authorId: PeerId? switch toId { @@ -537,9 +537,9 @@ extension StoreMessage { attributes.append(ContentRequiresValidationMessageAttribute()) } - /*if let reactions = reactions { + if let reactions = reactions { attributes.append(ReactionsMessageAttribute(apiReactions: reactions)) - }*/ + } if let restrictionReason = restrictionReason { attributes.append(RestrictedContentMessageAttribute(rules: restrictionReason.map(RestrictionRule.init(apiReason:)))) diff --git a/submodules/TelegramCore/Sources/UpdateMessageService.swift b/submodules/TelegramCore/Sources/UpdateMessageService.swift index af0f1c0443..fe537679f7 100644 --- a/submodules/TelegramCore/Sources/UpdateMessageService.swift +++ b/submodules/TelegramCore/Sources/UpdateMessageService.swift @@ -58,7 +58,7 @@ class UpdateMessageService: NSObject, MTMessageService { self.putNext(groups) } case let .updateShortChatMessage(flags, id, fromId, chatId, message, pts, ptsCount, date, fwdFrom, viaBotId, replyToMsgId, entities): - let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: fromId, toId: Api.Peer.peerChat(chatId: chatId), fwdFrom: fwdFrom, viaBotId: viaBotId, replyToMsgId: replyToMsgId, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, editDate: nil, postAuthor: nil, groupedId: nil/*, reactions: nil*/, restrictionReason: nil) + let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: fromId, toId: Api.Peer.peerChat(chatId: chatId), fwdFrom: fwdFrom, viaBotId: viaBotId, replyToMsgId: replyToMsgId, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil) let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount) let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil) if groups.count != 0 { @@ -75,7 +75,7 @@ class UpdateMessageService: NSObject, MTMessageService { generatedToId = Api.Peer.peerUser(userId: self.peerId.id) } - let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: generatedFromId, toId: generatedToId, fwdFrom: fwdFrom, viaBotId: viaBotId, replyToMsgId: replyToMsgId, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, editDate: nil, postAuthor: nil, groupedId: nil/*, reactions: nil*/, restrictionReason: nil) + let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: generatedFromId, toId: generatedToId, fwdFrom: fwdFrom, viaBotId: viaBotId, replyToMsgId: replyToMsgId, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil) let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount) let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil) if groups.count != 0 { diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 9a14a4b18f..581c73bad9 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -567,7 +567,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } var reactionItems: [ReactionContextItem] = [] - /*let reactions: [(String, String, String)] = [ + let reactions: [(String, String, String)] = [ ("😔", "Sad", "sad"), ("😳", "Surprised", "surprised"), ("😂", "Fun", "lol"), @@ -586,7 +586,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if let path = getAppBundle().path(forResource: name, ofType: "tgs") { reactionItems.append(ReactionContextItem(value: value, text: text, path: path)) } - }*/ + } if Namespaces.Message.allScheduled.contains(message.id.namespace) { reactionItems = [] } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 5ebfc4829d..65d0fb2e10 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -375,7 +375,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode self.view.addGestureRecognizer(recognizer) self.view.isExclusiveTouch = true - if true { + if false { let replyRecognizer = ChatSwipeToReplyRecognizer(target: self, action: #selector(self.swipeToReplyGesture(_:))) replyRecognizer.shouldBegin = { [weak self] in if let strongSelf = self, let item = strongSelf.item { From 46d7c6ac38f3f556b4de0abc2bc84959ef67d9a0 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 29 Nov 2019 12:24:18 +0400 Subject: [PATCH 2/3] Temp --- NotificationService/Serialization.m | 2 +- .../TelegramCore/Sources/MessageReactions.swift | 1 - .../TelegramCore/Sources/Serialization.swift | 2 +- .../StillReactions/simplereaction_10@2x.png | Bin 0 -> 2405 bytes .../StillReactions/simplereaction_10@3x.png | Bin 0 -> 4150 bytes .../StillReactions/simplereaction_11@2x.png | Bin 0 -> 2689 bytes .../StillReactions/simplereaction_11@3x.png | Bin 0 -> 4874 bytes .../StillReactions/simplereaction_12@2x.png | Bin 0 -> 2738 bytes .../StillReactions/simplereaction_12@3x.png | Bin 0 -> 4910 bytes .../StillReactions/simplereaction_13@2x.png | Bin 0 -> 1883 bytes .../StillReactions/simplereaction_13@3x.png | Bin 0 -> 3350 bytes .../StillReactions/simplereaction_14@2x.png | Bin 0 -> 2082 bytes .../StillReactions/simplereaction_14@3x.png | Bin 0 -> 3453 bytes .../StillReactions/simplereaction_15@2x.png | Bin 0 -> 2619 bytes .../StillReactions/simplereaction_15@3x.png | Bin 0 -> 4679 bytes .../StillReactions/simplereaction_16@2x.png | Bin 0 -> 2659 bytes .../StillReactions/simplereaction_16@3x.png | Bin 0 -> 4748 bytes .../StillReactions/simplereaction_17@2x.png | Bin 0 -> 3019 bytes .../StillReactions/simplereaction_17@3x.png | Bin 0 -> 5490 bytes .../StillReactions/simplereaction_18@2x.png | Bin 0 -> 2299 bytes .../StillReactions/simplereaction_18@3x.png | Bin 0 -> 3953 bytes .../StillReactions/simplereaction_19@2x.png | Bin 0 -> 2891 bytes .../StillReactions/simplereaction_19@3x.png | Bin 0 -> 5335 bytes .../StillReactions/simplereaction_1@2x.png | Bin 0 -> 2518 bytes .../StillReactions/simplereaction_1@3x.png | Bin 0 -> 4353 bytes .../StillReactions/simplereaction_20@2x.png | Bin 0 -> 3056 bytes .../StillReactions/simplereaction_20@3x.png | Bin 0 -> 5417 bytes .../StillReactions/simplereaction_2@2x.png | Bin 0 -> 2159 bytes .../StillReactions/simplereaction_2@3x.png | Bin 0 -> 3599 bytes .../StillReactions/simplereaction_3@2x.png | Bin 0 -> 2272 bytes .../StillReactions/simplereaction_3@3x.png | Bin 0 -> 3863 bytes .../StillReactions/simplereaction_4@2x.png | Bin 0 -> 2535 bytes .../StillReactions/simplereaction_4@3x.png | Bin 0 -> 4549 bytes .../StillReactions/simplereaction_5@2x.png | Bin 0 -> 3167 bytes .../StillReactions/simplereaction_5@3x.png | Bin 0 -> 5995 bytes .../StillReactions/simplereaction_6@2x.png | Bin 0 -> 1911 bytes .../StillReactions/simplereaction_6@3x.png | Bin 0 -> 3764 bytes .../StillReactions/simplereaction_7@2x.png | Bin 0 -> 1846 bytes .../StillReactions/simplereaction_7@3x.png | Bin 0 -> 3754 bytes .../StillReactions/simplereaction_8@2x.png | Bin 0 -> 2385 bytes .../StillReactions/simplereaction_8@3x.png | Bin 0 -> 4115 bytes .../StillReactions/simplereaction_9@2x.png | Bin 0 -> 2579 bytes .../StillReactions/simplereaction_9@3x.png | Bin 0 -> 4452 bytes 43 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_13@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_13@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_14@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_14@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_15@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_15@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_16@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_16@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_17@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_17@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_1@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_1@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_20@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_20@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_3@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_3@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_4@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_4@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_6@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_6@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_7@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_7@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@3x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@2x.png create mode 100644 submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@3x.png diff --git a/NotificationService/Serialization.m b/NotificationService/Serialization.m index 76a2978a00..cd0732944d 100644 --- a/NotificationService/Serialization.m +++ b/NotificationService/Serialization.m @@ -3,7 +3,7 @@ @implementation Serialization - (NSUInteger)currentLayer { - return 107; + return 108; } - (id _Nullable)parseMessage:(NSData * _Nullable)data { diff --git a/submodules/TelegramCore/Sources/MessageReactions.swift b/submodules/TelegramCore/Sources/MessageReactions.swift index c7b10828b2..15ea99175a 100644 --- a/submodules/TelegramCore/Sources/MessageReactions.swift +++ b/submodules/TelegramCore/Sources/MessageReactions.swift @@ -33,7 +33,6 @@ private enum RequestUpdateMessageReactionError { } private func requestUpdateMessageReaction(postbox: Postbox, network: Network, stateManager: AccountStateManager, messageId: MessageId) -> Signal { - return .complete() return postbox.transaction { transaction -> (Peer, String?)? in guard let peer = transaction.getPeer(messageId.peerId) else { return nil diff --git a/submodules/TelegramCore/Sources/Serialization.swift b/submodules/TelegramCore/Sources/Serialization.swift index 42be89fba0..f0a22a6eb7 100644 --- a/submodules/TelegramCore/Sources/Serialization.swift +++ b/submodules/TelegramCore/Sources/Serialization.swift @@ -210,7 +210,7 @@ public class BoxedMessage: NSObject { public class Serialization: NSObject, MTSerialization { public func currentLayer() -> UInt { - return 107 + return 108 } public func parseMessage(_ data: Data!) -> Any! { diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..273fc1baa10ad6254d6171dccb424175da81ec8d GIT binary patch literal 2405 zcmV-r37YnaP)*S@r?_sWuGClQW?-?j2Gk+JGmAYf9bj+;J6 z)1+=n3MFl!zd~`Kfl>;EQc6Q0X$|?2D1_3`LJ||~63b0ehuX1SJC@zpmL*$nX`eGY zGq>l=T9$UTYfDLgg&cNf?%ciSobR4{&bj9f@Fji0Eg=3M^Hcj*o47+WAj4W9&(C?d z;1$IFQ_km=|CsrejjQBq-;@8F(F0Kf=apYMFvU@2_;Sn*FQ|{qloGk z#kUTPE(YR)0jd|eB8Wyid|Q1@8u+>|#9A5CC3saWx(o>=i>ifB&jQ_S56JuQQ}p7i zkEJJiokHQSW(NJ@r$=)O0lFZ7>Q7rceAj+VnA#o@);m#eN)^)~LWD>s5!Iydf_h}z ztPhcKfpN!2&ijvVd#_6k2gDQaUAPsx+E9~)F+c0Q?rQ3{p(l@=y`ii^{A`s8TB>sLuqMyMKTmYGV=Mr zv1kr|o?r_Fd(w&uLwnRU-KW%nb z!LnFpgHfaD`s1Em^FX!X6#=RjwB-v5f z0wJDG9oX4iiK`;Og0Oc&m-mWB${%4G!T~{XL3yv(=4aK=t)zy=&*f!VEHfg(I;1Y| z347V?l{oeCPWC<5&h8dr8ApAH(ibpzF@@p54DwkQk*I+s%VKD1js!Z(`76EqN?~Lu zi@{52A_kgUBWPV3gCrdowIi7HcdIvd{YC70GdowtJb8+A?Ije5(<`W_Cx z(vPu`JZhUl&?y;zI&S0R53b^&Z?8nW&I(p+uE2S1T7cA;jkkKw!7wz$h{tslj`t0r zu{nh8dsZOaKvqn9_hEQ?J@Fr%D`OtO0%VtA%9t0^(D&9QgvnxCH@705p!`S6RLFa9 z@&(#n&0B+GO+L9<)Wo)j?tmFGV1zU%T9)alJkEYJioSO)q35ehp&2q(u-&d(0;CP= zPK0!Gkd`DA(XjfSR@B959)aHxdxDjQ>Bh8>pi$6GiMIAQ$tZI1y)I$Wq{BG- zWY8YcOqugn&Wjb>#`bfQBg-h!hwfRv%>Se znBMyc8LgM9j3Si+JWQQ!WF`_~S!~?mY%iRd#6RC1z~%mFj9$ybEqKs$4V$(t!S3&^ z3e0|8-t2=|9UAxkJC||%{i_(EiA_zqWORXsW((i=!5XYsS4&loAYE(-%8LxSw|7_5a3QbH*o!5j!F{iZ1j+m_Z~^RC+{J%lkll*1KDJs%yp2HH=9d6Y=y7Y3O1 zD5zX)xVHuO?^s5bw23#3vnM8S{`44WXZ56jbt&Jcbd(moMa?XNsnmkh;rkfW3cgF# zhZXo4@pr7Prx+11EFHCR1KG5TvEdxn-Q7gd$FrwFy+$kik2fwE1PP?0vr-{dX~S~ zng>u*IO5yxBqj@Wf}$*-z(7SS85F(k9h7U>Y9zd(^@?2lXYeb&3e-`OuB)Zw9z;L? z7YKluD3GhT6GHR*Zm?c&l=xuKmmWIrD|t+&9h>GfpBU%Nl5%@4u|B>k(j2hNAMnzR zbxb=hofkfYwC8nKvr9kzO%y|N| z*?u>rC|z(g&UFZCPtXDA56^vwsRsyT<13q%1bh08 z$uT&Zhob#gj2H5Bg8r43n0WQM-jU+$%FtA`AdjQ7aKe+}=QT^)ry2}XETy9ZXAMqY zv>*Tby{kBPava?cv?JaW4$=zqd6eHKujPVDrDIhcHg>lbt;iE3ZwtVUx{m94f7F$F zRy=tm#e9|MrU02i{drr1@8_SD(4I!EW-88oREn{)IXT*JXlD$WR9lo44!mFH>EN!> zWK61x*n%oW$4)AI)g)DfzWTjX-t*%7N5?Axo9VkHKpr^pa!+mCRgVc>{ai$3D-xzq z4JHID<_d*%370DfwolBAt@sSUF6q)>Pf3hZRm)UQ6|R-=F?7uPETAeX`m*zjYJvX& X6}Ni3540}Q00000NkvXXu0mjfD;b0l literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_10@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9512f41d51578767b68771f51d43c30b8f13fe2d GIT binary patch literal 4150 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 A+yDRo literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..23ea3e011630e882b6df0053507d415b9c1e97e9 GIT binary patch literal 2689 zcmV-{3V!v8P)45875?s9=FQ?6+vD*vNrxovv$PpNKRmb1-B-Y3tLOpTZ9nV! zoO@S#*sl5R4y5HV@xZ?PY=F)RpnR%*350XEH1*p>$XJSaK$BGlM39IKs+dWO+EACi z&HE5J7Z|jCnfKn8jp1u9Hu$S>|c}k2H(mYRy_%7leoqn9ilM zjVNWsBhah|F;IjYb_V=WZ@a6@-vu}9{qU@@X)ewQF#purW>eTd*8|#JXtKhxE<~@L z2e8Qo)zX55NO5=j>>M2LFUV^Ti~DzXO%@%$AB&pt+mC#*6?xQ(h}|?K`M5BLv7K_za$_G%l&fQ*v%AxD)vZdx5}_yO*$E)kcr@!k2rNAgLmId;Y?30P*LU_{$FoO~%@h%> z3EPgOHa*Wsa-sr<$A3KCh+CjA1!mW3=VD;5=DN|ulZ8d#BM_5|Uy9|Bl zmAu+b{RP0JRM}x1tcmmy>BN$8-aO!9puk1JhZ`?3#dbY%_e;h~W zu}n#(=OkrbIDveIWIc^VRwM{ht8%2d5u^N+}O`y6qPy*Y3W|T5&N5;pP?tlSlBB1%& z(((U{|Bj<5-OH_a=-%+@Mrkm#r$DC&=Q1Njgrfo6_5J0T(^7+@Z>6yP=?)a~E~2%h z4%*N2TA5zIX$2OoOrZPyA#DBA`^aVK!Ag7;D1^aYNRy3{JTAn?F*N~TM+fw!b3~Zn z#8lr>8_QL!CWvcpS%{UFB@tw!kRT}KnP5yKQeII8P1f;!FQRX|gKpTyE~7jqJdc#^hWn)Rl932rg_Z~#P|6A_RNhnp&BwEC zA4TP@YDTx3hL>hfPML4#L4L@FmL=zuGbvlmknVRUXRH3dX08|rv*bd=|qAYk}!6)|F&-L}X zSabLNG+4xk$2;)$8=X|x1=Dg6X0-~@t5(q9eHo-vWEd1&& z+jWs08bG@5BMhgyFx-0@nW26HNy8as8^vuktRMpQRj9u(ftLCtYLatN&EKkc0zAXu z?OiV+67oyd2S1u zT9zZZu!S*Lho*&#;JK^edoIYGrLg7sqoiN)gvKo|eGCJdP9oNI*tr}|AN>Hkw{5|a z6}7NP&=}>Kw9PJ7dz0~SY%)L640H%%bu41uijU@9yOM}_~JOeesvNr|NSJQ zi3S{gb1(M)b30?mgJF`@13`WQ(C95Se1?HTr?|xez3i5@ytXlkLT(g8-QBop{bDpP zt6@6xtkPHTJV)*w$=kb1izj_e>p>;sY+19G$HlFP8+D>3iV@PxlfQinXZqt<_rOD# z)4Bqg{sG2giiR`XojiP}T#$8>b&E}SFdAhzG}6m;IPuPY?0Do?n14YQ-+gcus#zj& zI0JvkN%^*SySeGL-IK7DZf682A6;U(q2x~tQ~XpmT9#-IBh@#G=l<{kjvdo*<+nEC zirdzswxJ1RFfs+Hq9O)ax5&pDQm4DIXX`VJ;b+jgT(CqgLmfF$cIN0kl8}R6Xw?Ic zh&!i$3o#==1)pc(YEKLOTDSBKvYvZ5FN}1qh}|!q!hinNi$H7vF1hw*v|hdj4b2M? zj6_R3r99eq@;Ey7yn=)Oei44Y3*WdQi7RhxMwHbAT?CgR6T03X*(UrUtqA>)E)h4K_B+tVbvH8} z6?g6$DJ?k1*Q@}l_390lv$$cI={P@R?%k$YEDfw6AWuqG9I0M?s51zMVCfQUDnyR8 zE<@0Kt00U1u!O(eb@WFA$bBF-9vE+NOKWEOnl(VBKyHTCn`{dvjjENt?yiHYT_=TX zw)`bnGjN&87BWCQK9N&kNxAN(B_n?d%j# z#dAoD=eZYh`{%J5FiX^sX#(%or92ERc!cF9ht5~+^8r@YGm9h{7o6$01UA{Gqd1~r v&@Df3+>o%CA-xB@PXlTuTVKw9AwBSaZWJ*G9Np#>00000NkvXXu0mjfdNLyL literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_11@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bafa6391bd7b768648bf37ea03f0ca6da65f92b3 GIT binary patch literal 4874 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d34297d32f3f6f1ca60695b733daee36b37f52eb GIT binary patch literal 2738 zcmV;j3QhHiP)WU-PxIJ3HO4mVVIPN-2f56bcesD?5TT0n(yW8&W?9S}W z+m)*bXq2-I^Z%O}KlUOU>jwEln6YwCZ`-1TqPXA;7HSUT37=t!i{-T=-V z?PHHODQoIF6aMCaohhKhOKaQuTIhxk>237yv(Q-qDo1}&Tk>AyoiqV52q@T?)NE*T zs0B357MprDDP|qrKu0vK;WP1V=Ew(!cOx_JG+DNNpE{Aefits`VVOatr*G~`TE%D3 z?A|OEH(6*Rf=O^;Nn>RH7>b7~2pOg6c?rx}orRkv0u#N4xI7qF7}`CC($Oj`YAv%U zf!5_&*qJl3FwP{^H>RRO@Rzceez57Dmj`PC&RnUBndDi;n}lOsjdsuSRfMrUMfe2; zhr$d0D&g2)PeOfIh43S&HV1QWn1h~g&4rUPYGU9rYWp@1;MmJ2AqQDZn2qED51s4h zAh#lopcujBp|jm-xa|o`PDE>x{=|)B-5d*;a+#q)<9o_g&&gK%mWhn(9@#d8Q+o=C z3QQBsc@qSd8?T^K>Nvxk2nG5*8>@cYgZW==kImTs;z{gz{2)5Z0lI8$G7U~d0;kd* z(ihXT6O87pjn)-eEV{KF>55;ChJ$TZSMFYM+qQ`*_>4C-P_nvO2>a^5v)p|@KZ3Cx z!{~7ot*lX|{}h!#cT&f>*>HBy_NCzv2cI3lyf5V;=yztEE(BQFT04YU*F|6KEBi>j zTSZD}6bZQRpW_%kP{Nu==6jASuf^cl3NGDc*4Jq!K)6@Rlt>o`0t~)2ilw%~e6O}q zL~mCFpF>$<#Ho6*%OD#aSo6B)`GKyn`Ng6Fi7E8;1TBp$8 zfwnd)6O0F|xpW#pvP~zY)KaR)snE%zN`w|}Za^4JCO1z7SLZYp%{agG1SC;8X&Y4& zFeb33kl{5lj4UHFNAqj?adkX|cBLyLdC8RJ@o*YIz2#1eNA6%vwUZqV1k2bMH*eVI zv<$ORkv=%cHEpZ1kPH%&=i0Ao!Y~1j(H(?YbQUtt*>J$?@QiC%Qi={Lb{fYtfW5uO z0>Ze6$Sg^t_3|bhuCRm#Mo{hKQ};5!`{>dUHMa0}28ba7TX0(&qGkv0m-x5gbY^!0 z+Q{r7f78m4J~mOVaHORLm~leVz*+w-9prm&Z}?{HbfW;4R; zzX4z1a8+Q@?Hy=cm0^D2?&NJ=oF1jIdUK~md1yhI#56C7r4KED+f2QX zkCHXEZZ(6`Gz}occ4Y}sWcrUxZZHXW<&PF4acvFvQ}ipLhC?b_zr!MG=buqd|H zpwW-)13zXO^$NehLbcQG|VqF%jC|1gboib^N>_!V_pGGos z=9$Hu#kGdV@ERFs@)n<)J;u0~mT$uM`x?c}(4hG4i`DRV>;8y|XssTpc%qZFlX6T^ zeE;ncyz;^!%7|Pg|h#unQEljj1#X3{;=+PzAkP--p;cpj5SCDWAjt{@Y0_S!?uiCNwEZ8=x=pl z@srpuIhtIil*CuQ(Sr>SEMvRKNu#U2aYQ4*P~@wP&cm<27Rzh6%<#ebb9?mIPNnp( z#7J1xA2H!EkxKg1Eq5=$Wmo1A#$~F$+5lnm$@FP{W?V;R@P#ag*L=Q{=Ix1Pn1mk7 zEQA#(@e8}P@J3xy!D|9 z4(q%pHD==RZ z*z1|Qu12HGg3pJ6^=lWU1GA-+n7QF{&HxRc-UK<&wK~ydXI4a3cn3mxlNNfZJKE9xP47O{vg=#@!nEAv| sD|>mbIl{nhbs?ZG2*{^Q|En7KHzjRAPZ*TIUjP6A07*qoM6N<$f>V?~mjD0& literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_12@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9eddf176c100314a930b321c0127a840e57502 GIT binary patch literal 4910 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_13@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_13@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4220a0f2157f8626441fa9124e36f92080796b2 GIT binary patch literal 1883 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 M07*qoM6N<$f{6R&j{pDw literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_14@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_14@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..afb24ede6d35d337988e1b12523bc7a90c487e5d GIT binary patch literal 3453 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 fR(jwQ*#rLr@l!N2U^iH)80+Us~P-r1d* z)9=h?!`j|B4($`-NV9W0|M!3Azny;;_r>k=varlBAtOeB=g)XJ>XpUz z1Ev2J|5FiEfWTk2G&q?;n;o*6J>_=8MVn#BXh2A*JVGjsk{Ux;We|;~vF)X4Dx>JR zjdLcb9=W=`T=M%&TW)|9U-F?YgOptgDlVj`SWqb!zQ{wVQK7`U!u4O_^)AFhABk@a zrq6}qq6w;p`=f}(&i5U4lQeOwFT`pY4@qdR+B{4NB`d0h&vThSjt3Nd_*vfgYQOZv zK&f1Q*2-f@e1F%>Vu&t^p!)r$^L^L3OIXHjA`)7O7E7vl2qH{IAwrx9MLX1^Z3{j` z-UTL0K4!f4e8+o28rUK3`S;PYkvtRhX*u=i#+C5g2UXa(T{N35s?~;w(P9Qg7aLJp zizb@)Akq%hRC&TLcu%;7dMNzuo&Pzltj@)P1l7Y=^?DLNm0@|O=(MA%Edmjth?Wwx zo==AQSnQyjDk_L^dN)vM7HhzWeI&GeMk+n)$EQj;%4@5cf&j*d{u|QFM}A zOu(n7QlkYN-amn<2`Z8cu5mUn*CN84-^FC_v||jJue+A}9kt_<*zAd)+=V{5oPFh$ zi<_k(?nbK_M`suy@Z`9IeXoxNWS z5}m}3$u0#j(P;^TCgmft)Y-yFWOi?B2vdUUVGs~?0X}H4V#i!za@!eG6A6z zWuX|L^hz=4zhLZ zXcl{38^tx(^Pn!k zuXUuID5m_I)pIvIBW`%EP>VT_Ae{W=Aw#ZJ&6X`JYLOB{2Pd(9V-lNhJ|AIQXD=ay z!c4(MBu0pOZZ;%N9LwRro^i0|!KE9H9G=2!|2U4;t_ZHba|M>KY6dJ~wOWSEc~>Ge zeJSsDEl98o*-ux*MdB29&&R4Yt*~vgLQcCzD!l%$VZ8bBD6ZVpgDW>L3F=%eu#Su5 zvIczZ?v)6cl;OQobdfnR6D)Y|;4qf-B@p3GB(z6NCth~k{<9L~hP8r8VZp2tRA}pn z=}@9ed5~OYqKLl_4B_~ZEYhhQF6!?Kh;T(M5$HyOKF?k}7 zL~{!XoMK45+O=;EjvzZ#gh}f!p*8!j>O#-b1RCj`#&|=8oW`Xt5#lnW>SS08>N_3W zH8eQ!%NwP5zZB(LsW*zcgD)+X9mxW%QP{!2(#=9OVQ6XJ7kKHJBiOe)4V(3oVT`wT zpWrcudw#G6J-sYXI?1$G^w4Kk9nbgTp@G{udqBSp#%zMG@L7`4uQlr=Z6t+rgl(sfV0SOW^9S^y0$R?PzVc1E{f)0y3#0F*rfHgmY$vgk}i# zK?4I-O~H8MJ_o z@>z%>p$$}I$K~*7h+FX3G$>j;q)Uw+y6;vD7^QNdfxx!GWBoIWpnjmk$|!Tk^_0z6 z)Q{#5l27(Ep{*wl+tR^bGbL!h1dDPACaoQqkEb}xlaVUp$Ri_|JeXsZ5@^0CiryPL z5N&6z@s(?ajSp*(g3EaXr6~@ueJ`n^7h|!mD3~k7d%;Ku2eGGLRxIt&Vh4ApkjuGD zhB$i9Yv68E5iU-+*#CR6Co-RV2-6sF3}qKTzrp;6&=dWOM->0lYjygLz;A)RR3?!6cdZ5BqJPh;f8ajc0b z^e_!|PK~=h-Wr@lVQ0`kMDm`vgCfhGMehSQ;@ANV%=?LTP9jc1NsD_jBZq|m-Rx@CH~82P^RPbdiA!Q`B5q)v zgW~<$PjQ<^P&_c?up~XM3M!{E%(^p#VO^p`%d@rr+hd3DZ$%SJijQ)h z#3-agv^sPv*-nx=SHe6xxGgt@eA?LWUxy3gdfq&Ofv`36B0*mlsiKFOIex67*E@4( zIL7_V&i62x)sS@w>K8*ZW4ri?^N`56jvD6Lbt$O_tS46oBj1dg=-=3bYZ-@oc8+57 zgX!S&rRA~&daiB85q^_Qlvo>2VFhPik2?Yf3x>*hYM4fTgpUH(EvS;;!i}Dc{M@jO zdsVAxi6z`IbbC}=_p0RdV?w^YC&k8g4Abc%R`s{DhwNh~q-zbEj6-?6@!(;Ex!|=; zD)^+HBH0lh<0a|kJiJGUpDab{`78KAprIEes3)k$Hn;kI@y9H)_oKGI*$m+&aw=K>7L7rDV6&;B{Fgy@-`ZLlk|Y&BtOTuu96d$f`9*b-{mKCUzWMdwW5?b< zKKNna2K{Y!I}b|D@kd3oMqKpJ{UTOvV7;)}nmf1np0SmLR!U3Q;NLW-t*K*_McFSY zx=IbnkpDb<`zgeW@8IArM{GY+6wjw}P6Vss0nxsV7Te_*+?f?H%KI*gJz#Kg+sqruX-5Uc9?R0ONS`W%q$?l<6^l$dlYcr76XyV1w!UhmV8s>T2O d`ZI5V{{rWC<@(I-Fd_f|002ovPDHLkV1lbS8Q%Z^ literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_15@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_15@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5caafcfbe973b25617ccab9acae301a929d69a GIT binary patch literal 4679 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 R84&;g002ovPDHLkV1f=T`VIg9 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_16@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_16@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..015aade5a4a91f58722a07a43e9c48462c7b05d6 GIT binary patch literal 4748 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ῄo(yD(PbQ|1)=QRG))_NS3DbhvUgMluFYyx2p5O>w6Zg@hO-iUxnk z121Kz$14}?Xc3*{b2f5g2F6k*GFg}0>w%<2P*m24Ts{lO$P!&CsEGxU3TlWa!|K7& zvZg$@AC5h=|AE1Ko3~8@EPM35n4Q;uT@vstnmfBl2@x<6GcwgrgJMg{rO0Y?aP!^2 zgpsF`)!T)5Z#NRBdXXADNy3L=435Dx^0ZHas(IlJ6(JNWMa@DHhgB$T_63jjq^=lE=h|X_IM6Zp)25+<1)1Ys$h=xjWi+6K z{T@Xq6%`7V z8AYNPR7iy^BRM#LLpxu?-YtJa-#hydoVA8d1k}WeoFsL^AVRmmkjz_kEMqp(?Qwt( zY#+Es7BzMPoVePgcr52&MZJv@IzsG!>0jvF@djeGb*Q~)F6&K7$I9dkHA0)a7 zP}Spb2xvB$L~>{V{YMX>>)ky#abO?fJ-w9q8I;fTVR5~QZPa1g+$GYb^GpGxNH9{& znd~t5gqaE!lvIA$)UDLes9stU(wGQ*F@}ieblt?Y%_E4duEvJPJCRT4(cO_m@1aB3 z)&6IADSmvR2wek^RVw@h&^GhPXERiJ($FamZHL-?@gbfR8Gh}W8uZOeV9S0J@q~_< zWx;|zohnZ}sdLA)M{SQ*I0_U14kgCAqyF&ILuvaLPERTv38)aR?Ms+g7CeS!ks~Nw zS%a?QV|e|A9_qZvwRV=`lRnhFr{jZU0b;R_%rC4sURLNTrZmRyFtlD{ZtBQfiE5`;j$m?0TseuWbIX&;(HUh#Z)V-3ejBhys`xl~qBk zTvLy)Uo(@=?$j9cX2FK3u9)`vyAH2@=*iOM0ly|`hV6`mC5#T<+ms#OS$MvQ>6Gi* zjWXKTj_223TBB~>{*@$2cc4i2U{(MI9oFN0W7O#kV*k#54D@9v=B$EMg%knUOJPzu zD})wmHky~lh-!k+a%5eq#XM=7j>{iY_~--dwnGV#6=)+{w-t{3Q-GWe;It*Q{pr>S z74lo@)y6%{FI6JqVVqoU(Ba3(SQtK~V`NB2j^<+cLu#SYM9Y29h~qSqsAQPlBc)7w zYvZ0IYI#r!YtOP9x1~-~^@*?3T>Ob&r`!;4u&lbW`Ko38jNTJ`SJI>~`3s;9hX<&F zh*uxtFi(RKzcEw1O&}kS5omg=zzsLa;cl`m`F9><-)Fb)8-JQ9I?gmbXMkceZ-X>Y z(c-O8f=#Y$uZAtH;EXrOD!E=9OADtxT1dem-p#lsHz=_?Idfihpgpe!^Bw5iZLqe< z&hbo`rrkR)fD=0fP*k^ipdkp0U*I_QTyp;`dV3TaU&GS`yiex*D78PwsN7`Hz1=(? zU=zAN7r=?l;#vS((IUf0Nl4h^@=6pAt;of|KIij*nkxUR`Ip`T{{!hh-QD&h6{`RM N002ovPDHLkV1kOov1tGR literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_17@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_17@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ec79f985dcc1e0c6f7d161635b4e2c286ea1148d GIT binary patch literal 5490 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

TLZj7x8P8`f=Mm!+o<#_IJ< z7;GMvclNYHeoHnaRe?Au86-+#ExVySgh*-*&+J5c=Taeu@mB_M=+TGp;+_XFa`-SR zg(9M*NsLn~O3cuH!|_uK158KTiD7omR5OK23m1F~SKA{?E&yiCjgn!8K@Y2w5YJFO z*DAO17yqgdfGi?^U%lFfxz9!>HH3o?PvH20eQ4Uq^0)>a>o%gUtpkBbjCM=I z7GP8jkA3qR<4r0P^G{)fRiXEvnZoq&DGVJxh~v*ajp0KF=_68<@Dz&|i$z2fSFN$Y zoi&sy()zLBBZF#FdXv$~h=c_Tr#0v-qg51(08_d%YAYA3bWcG zpGl!*nkX0YC}h$|r$&*cADHGbGd6l0=E&Qv)u!B8gr$WPfm|#2nm* z0t=WrZu3aXYw-}%6D*ppmEB5Zrgm*X!X#iHMUc)F%+~4I0==J3&S@U!1gyy!N2l{t zY2cDr8XMc@(EH9_oIaLe4=U${8`gIOFpF}2mJB$7(ZNHs?I2q};p*9-rjbK*FUSWnZ1tgYaf~{Bm`h%GK3)QK~yI-!+1Dd^we@^ z#|voCb7i``#4!ti1*Xs9+uywk-OR_!P7XUe58<M@184I{tU~aNfzT1d^nw_UeVjU$9M`KYJMDzi88sW(9)eC zC>tkUn)M3!dEr$72;p*29lfLW`^>XkpZ~80yhfKuR_g1U-`$VvZ(T(Ja2Jm{-kC`u zoiQ-T_hsf-nWeKuOl685z0<7OEl0~KW&g}@v@cHm-Ib?n^DO|DKk}cxYdSa*Iz&^M z<0e(SV%pJ)WgE2Ve8th8zdP{g*vF#3XzVIY>AG|nSRF|j*SR|BWl=*%8G2a#@c9ce z=-8RK`0)1ktig_*{cO)tA;rT_lo3tM;!VbAC2t3w-Cyn+XEQ!lF)gEFx;YB`5DUC- zI;#AiQ@QL**z-+!${XbC8RL%Kdh_MojZP@irCCmorP~Q*S+gY-IsP60XX9^=4}I29 z>KfapeBP!Sd%}`QWSAj6_t*%2{=MTEK2fbL&lNabfd{OcjC>o_c+<8v#F?>41?Y~K z;EWZa+it~joX37RvG&vNbw5#L7pRXfTqF%wo8>0k5O+(4Qu$3&*hT1z#%}_yUEH;c zFOj{^*HS)iq=r^mxOYvN8{&T4v~3G~`sZ9*UG2~ZDHitL77QDtMZTgia?JUoK^ z?2JrL(7rgBAXObuZSEz`5>`Z_GMd>Qy7JmqY}?W0^`e8)per-)9;HL0bah5V2Dm3m zrutN9-`;1{S7GAguLN4UNo#<#&V1X%u3fJITAi76)V?hD%qF*9$?aI@Q|3MFPTtG} zBLLZk>11O(A@NYr$=R4@cjASoCvotpahyJxW%^lJ093Q{TI>`L8%qYz-5F~Q*doOy?%VRU1ok=^RumhE+#kwS2%b&!Q*&O$lVxdHVzD5g1N6Lc$=Tb( z=;E$I9knIE!b7~Rk^+aXGC8Rd+$m40%<$YS|NW|F2fu{VzZhRBSfTx#0DGY2*>4Oa zY^!p+X6T<}ZoGymWc9VBdU{&)7hhvv&4H( zS=ql5kS<%cy4NM49lGuygYiAELJ#1>4`q3)OtRu}&VXwxdAoHL-)gpSK18Q-mu6^< zqSvgc37GO{GVcLrkBV;2%byq6EF=@WbRfY!CGTw=Zk~x`b()m62Ae4vy+|1+bFGm5=?|uQMi<*_xd3vUKJ%Th@_bU zN*hYiVJ#3tBc-;y%=a#TY?pmM@YQ7pad`jSxu~$Lzj!RHvG~t({Vwlt;Z1W9OoUnx zcCKcoa~%tY%@o!u&Y5Ihy9m|%D#Xk%B0pxR6esv|AJfXcdMNl5Yt3oY?a!TUCvbj- z6`d|9;M&Rr=)G);7Cne*BZ7#p)kdj@+c&Muoa&gL(z9_WRp6az&CV!Z07*qoM6N<$g7l5A-2eap literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7f63b34942ad459dd1a8a056ae3ff1e1d88a5e19 GIT binary patch literal 2299 zcmVZ3>-9ctFSfA_n3sX|0~+E;O#l%{@PmLDvHbVbxH1h`?J`! zdy$oIt(b43ka0Dp{zw$1!-8gXwl8t++0x`*R>-=k@JLf(&gPAj%K;i|s|tEOvO|o- z6Iy#?xx+uN%INsw8j{)k)A_z93pzycoM~EmWyp&M7gVCYI^() zQCCQkuwl*&KNN=q%K{A3g3qmB+1wcjmlTy7g7wGtW~FW_fUi<}jfj-PEOYp3U@`keMc0#e~tWcz5dl`=^3Ma&NS8QJ4!BkpPY zqa$1R-M%+1@%bHM@)g}MmJh{}FbordaCqE*qirO9Q{Gno(9T*(B zcOpJ{=AoeRL9iayb?fPduzaSoSMR#hx`}fI2MM{#XwXs#q>>3ZU|?=# z04}FgDhk%hyo<6X3J($iQC-s^I-IC&`4;@MB8U%M#g&79LF`61L`j|`n!yF@mSM)y zwf0=^v3QNKNR13Y5XTP0)KjSZ+IloUw+rR-mm^TS7~!TzF%pg9@PYjl;Zo1y3P_w8S$is@4omvwr<&sk>O!1dEzC^Uf2j#vYwL+>ky@_jdufhM+-jNsH`UeduD}8 z)TX*HS~hJ1Tz<4~ei{c49>AG1XYlCi)d<(j#nmGpL5mH;G<1X`t5CP%+t~g3Z?J3E zE}T4h0@X9C@zBF7QEU!ExzPm^qGxzC@mOP-@{i8zTHa3y9HNwB+Ihttte~fWLmh`Q272e6x1nnq?XLnZ z#eqdNAq2dtTZjH~hAGEOUVzS1t{IfOBH@6CB3Fc=YtShoT`o5iMahUN_W5k9aYPIB z!=xu;&@`_h)<%*!gE{(Ias(9(ncQSt3!q{>m@Hhf>a_30%aCzrD%~sf(Oob zqPn>*x!LnELv9JhEaHhOVARtiPK;Nf0CnLl=)D6^~)##;0gQF1s9V+O*kr)4>Zz zGr^?Dltcu0U51yC=BB)9#)LE^m}XovOquoXq{zcX>q_}|k# z7#dAb%VrE%5MP^fEWyn!McO#scEqZr>~hND_vDXzotcHDNgzwQOJ^cP37B(U zu3m7AmjP3Oq{y}m1J^$P2zq?{B+0+&Y7j<>j=8&kBygc;@Kw4-h&YzmnbyV6N!xCZ zs9&c#xqop@sWdxWVmG7X(8iXr1p~92vHW|#gQU1gxt=9uf_PdiIaP3A9QxJs&=UlZ z!+Qep2KmC()qMk}x(8x#Sj+YtNqw1Snapij?E#M}vE_8?l(WI{BCfdu=RU)cH@6`^ zNcoi%aA`9r1&#kwGhqW4(0{rEN8Z?m6eaO&a4e5q$Dos_DW(2WmEF*Ubv&M?iAOBZ zfi#p9sc=Zbq>E6RIsN2@q4(%MjP_o_tX1tOUGNZ`#X*Q7iz9_v3bDS+R9*g#%l~?h zz(q5Wo0c*0$sR-(fBPOY64NNlk5dNVcG}+=;uE=_Du6hpjP_o@@ppGX^_9ULs)Afp zVz*x$5Dbv5#?hVK>12ziLqJk9kVsM55%JZ;`H29{cHmTWG||kNJ{Q^0Nm^zLw^EBX zI*7sHzD%TZAaS%x@_5C`C6C8ASXkhNo+xg{wGpZdA5P@W0JH}s;my9`#8c;ch6GM6 zyq1aKau>}Jm(oq>^c;(9!FC4+l`Z-=2+D`dw{E6!}jmNfQ<<+1PShJ|Q6iA#M^ zeAR!GUG&Fq9Zk|fj?-=Hw=}3bNY777eJ=Vhfocnir*yk@;-?MJv95a43l)EVAxPrRKOBv}I}UB^?KXfs+}`MH6-;3( zftW>ElY9DWq~bK`?4sRYB&WJT-9y5XEJ?B)9@8`fRBD2zXaz;X@>6#7TY}}IbsoVI zxDjyDF{Z0litIN^<9!gV^O7JOj_Jt*@1MkYlB5L%(e@Q^aNAW7^L?iK7MPv|{s$W$ VQ{vIfbj1Jw002ovPDHLkV1g9KXYBw0 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_18@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c825b6c26756702def4af68a64b55fdf30dba498 GIT binary patch literal 3953 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c54d87dd6cb5609874669ce765a189f7accef55e GIT binary patch literal 2891 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_19@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..641e0059909a9d3ff0f84a343ce767c47e3d972b GIT binary patch literal 5335 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 T-Yik$00000NkvXXu0mjfhW3qY literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e1b6baefb07d0eabf8c04ff87665eff3e042a7 GIT binary patch literal 2159 zcmV-#2$1)QP)RM2Z>^gCK8*F)JIIGF=~yCmW0}Lm?{}Vq!gG=Y6(+^&P-?K&dibx6ggdea)-*i?EY>&pvyv$9L9iuXBh#81Hin@c-laWborIeZ+D|#jQwQnALPq z`#ku1;l0YgCV)c3bo8F<@^i~wp6hhv{h-$lxzn;#A_63mAzNmsAn%gPvy{qSrH4ls zpbV^=8=D3wM?Z7@^0fYNEUxw{OWhTc>>;Ikge1j^ixw0KDC7)@Oe&FADWGA@M<{8( z&0jq=vl)mR1}M+>Cn%ZR9_Hi$cIW^p{sgCNMaHWhevTqhMb#YQ>fGns_EpGVfmvbNX1o@?7lk;kPQvnoQONC`b0)qmu2VlBNKu}?3Aa8(-LV99C*B)4Bif|D zdB7edd$*Tl*Loz-!IN?v@x97e6=16)pA%ahOsqM~lu$S|^u%nql; zvhA-JsveY} zC*;WIw^UG7O_~Dq3+a26Yu(PBs2?U%BP3Peu(Z6aX>kDu#abY-w~#K-GD;2AXfm>} z8CS$zo@F`qr?t-AQ-!NCtzk2(g4ja=zMqroI+T+VfLd@@r*rhzV;ATTzZ#=U7t&DP z1SQt~GnS@5{`xKY+p%$)MfNs;G;Hl2fO4Do`awDV#fDh4D^N?5z{&Sp%DP=zU5_0| zsCO+~^U|L$(O-TyPJyrK%ETf){mh+YRhJ#G1t`=*htJWu(HXK`i$au{2cOtYR4`S% zG>mN6KssE{%IG_S$@CuVyjO;4e;NR=l_bmoE+iP%vop`gENIhr;A)V}T`8=Z+)23RK)554o| zF0wrZU_`t2bYc$LYBJ27m`#13>LQH;#0BlHPj)tm*AkO!lQ_ynP25=zu#6&Fm%%}$ zIo8_woZ6EP?>wp%5x$`V?V zQH5VkOqr~F6&fl}i`QC5-hE0VYnLD`q{=hYGF0vi?s{;MB`OrfiJ@u!j4OmNhzLy1 zYLSOltY-*n02+IMb`qrk4QGU4MaWt+BL)3n2p;n@^IFMkF=G#*g8nhEh$rePYh8?8 zIPP^=uYkTS$;iHS2S_qY0iAtmf-b!|A9;OSUpwu+`$meJwyY8^t4K0d$syH!DriM- z)KfJ8R59y}<;Lk zr{AT~)0d0xZVJvUf*v|#p-@nwUU5Tzyq>fHAU|~ibzdE&tSre~E^=8tQ}zAWYcu2{ z@lm@f!_0jgbz|qQuFD_k$jc&n?W6qUs9zCMnlu13>ux-GLI>elp2AyC7Ef8FyhZ@l zEt3$V_ibC~OONird217*Hu`yShweYvM}4<+MQ?RAic8>(Oqqjh zpAvm-S$RX6o2tG3{|=lfejj{gvueMq_-mv2Z$?NLqXK)~hl0bM*li(j$KY~S5Z z+jg}hgHa@^i@7mJ0jUIVJcE8n>tEo-{(JoR@M4YPs+%) zD*(wUbIf6sV-FxTd~Dv;%`jnUDg2eem9#{u@LyPNJ}BVe_?Z&@13ok|TjXl~zb-(- zCNB)Mp}#wb4;$a%gxX52E=#9NoB+^DkkpGRp$BL|t>hWhlZ67l+Ju)SkY`n!cZ45) z5$*Weqh9K&)X^8LZ9RRY^WQ>IIiNhe5}1<$osFQQVHcuIS8axQNrx+W87IUdDhFQJ z@yR4jtcURV=BHH1yxFXz6q#%PHw@6Q$sno8-u_sxow}Lq;DNyBd*R(a%dy<(&97`t z<7(3s6(o=S^J3|fD)fF&socNm{79Y$YofRoQQh690G4?TQ2Nk-ieGDa$P0j+n2-ab{>46w4UYXVqiHrEJjZ@)$Pw4&LdD6hj7@>)Zh l9M#tXs#^XB^Y^_4{s;SRIx_j^hSLB5002ovPDHLkV1m?=6kGrR literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_2@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b91a7da7bd17d7c3fcaccd591e83e92f6e03b4c GIT binary patch literal 3599 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 VRb=(VDeV9N002ovPDHLkV1lWc%6b3* literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_3@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec81c23584e59e7b169b5fe04956c2c8f9835dd GIT binary patch literal 2272 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_4@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_4@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4e5e24842ea582f632d32630c3ed52fc077b38 GIT binary patch literal 4549 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04ca9f9a403ed9fb868db8b4f38e26d709b6e8f5 GIT binary patch literal 3167 zcmV-l450IgP)45875?shvwLPdwrA{YI16!-W}(o4fm9?UN(1@98XAf~ zs*3ufP)ZjnT8df~6{MCfP!Od7iBLrAkU)Y6L2PXWX_P_&Nl2Uk3AJ&&kC%9x{k_}o zyk}c+NJ=PF>JP3o^JeDVckXx3`ObIF9pLlv|K|Z^0PC}Yr9KNo>i~Ze$wdnKMh9lG z1B5g%NTAIcdJkZ~UWw?zTiAs_O$V>k?WmiUkaO^kIo8v$n#pqcGx_ z48iUu=#75(w_b+!meU3LsR6D>B2fwd*JBp$Ul?&H+UtjTz6j^9L8wDlpl9erkf#Mu!stUyl|pHT168u&J8Gd2 z^uxL%sMO6Rf{JK^`e+f6Nj1RAl`wC;4ZPb(kpA&CWii9I9PxM4tKIZ!AFsoX$SEeEJVIR2i&Y+&fry?(PE&EgcRo12A%0MBMx$oMrAS% z-+~1&%a%b+n+9|H?ZD6=Q8CWkmUtAFm*C=H+QA6H9wW%!BB#>BL$(?sVK-F4{9rlK z!~anZHX~ZC5xFI#%w5w%rea>ysA&P{G7A;7erC==BH}Zc83LlphMGDV>U+0AeeF6R z7zExw474&IE?xmFSwb|!KsxP(Ul4KxnK^O4!K9!;4PW$du&)S<&fWeLGM(Jg$%jaX zgYdaQg_~xCjWxH-f#upXn8HVLbVy%`!ottS&oKG}^lJ;u(;J}{F9vqKN!RpKVd$rd z1k{~B1=c?X)9|DhcFq-ViWlWg@aCEE{YBU%n7$awy5yGFKk2AIRW+Bqq{3%XwIL6j zp&`Qn%QZ;eO;LGFa&@=Gajh2Jk0)mP~;-w<EcP*E*$i90?5kj7$Ksd+J5*SIX3exhu(DBT|{?ujwwR3%|?~Rtr^M56oZ4kkXcf zv!BV+#rqZ)qPZS|JDAZn%hrCD$8~E-idt06VXpn6I$-9X#jaZp$DeMQ}3=SY~0tDz3 zSYLWQcqedh5|SYjxt2VLyV4?yiy>AAlV!!YXerEYR)>R!C@p?uDc+q~O-&;>YTK}_ zN(Gn}lK&}g^wG=F-n1F9DjWXmBg$MqIp|0o_Xfl2%GTDc{7%5yA~+bfU=$_Hx=z2ljT2=$mUs z%hU^~jE}%~4V#VIYD31FA0=Tp(akwoT}FWs8*WL~xEz*$c|a5#iRjvF=W0ZL7<< zlG5nRNvYB;WZ(l=pyPGGt?Ssx8SDh624JnuLEXr(*4Ks|)I|)Ni&1-qFl6WCt)y#P zPIzmO@Ua&xsgm$7jr902U>slw$x0ub3*#2bCS=QFXsne@R*5LgX+)p9OO)p0i^+jT=yVhL<-C-b>1Z;DN}b6Cg%_0BLi z?ck*YNN7K6p0ID0gw01+q|- zfEL6I;;#2cfw{=Wmf}?!4%xH}$zmCNm`w?vbIL{vdd@PWA{5<;Ns>dfJOpP^nU?VK zq2mqHzyL$g$lU5IsP|Y?@At!Z4(V_Q+w}O95bFfnrZiK8GU1MK?s{J*zK;PL{WZgl zH)go;f^MhGzxW!`;|U^DTn}bpMdQHiD0d%Xb0F)8SA+=Ntf%jeXou~6Bl+=r4eP9+ za&Da-b}S)(fSq-c&!qhp+$t;&i>Jf@6UvRT`<*|W0FE;}3OH)OhS~B}q}d`(94nL6uC zk0v{JctYINeZ5&*jn6q)@ZEOgVp=6>-WXteT-R(*E7CD2k9V11&+;X=(nxSH06c_`;WMiks+D+ON8J*pX&fVl4MdZ}O zHFxUU{5#4GVCq8d=a(gc6HbhG*Kiv}j{v)H3TU#hulHCAYh% z437}4l%~fW_#at=w$`!fr@DSDKzWc`3}%sBLjV1QDX^5)CJnQvo{h_tOG6_RveHDH}lPd@gh;dCJ3y znoR>tSrZ^mn=O_lv}46LY&=F7=)-IUc9JnK@eik+Ytfk=vvs=HPXzFIqh9EvRn+zx ziVdAwWP|3f<#CmC(`o*#)|^GK_2d5kJKpB!pZ^yg_&2lq|J(fHxsm_?002ovPDHLk FV1ly=`9lBz literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_5@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4a899721f0280f741293070a29e1fbbd0170f3 GIT binary patch literal 5995 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_7@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_7@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b4592ab6bc89ee3369fe009ab3fe51b7fbffb28c GIT binary patch literal 3754 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 Ul-F)dFaQ7m07*qoM6N<$g6AIjssI20 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0225bc10bf01680b7e562080d36145c118f5a216 GIT binary patch literal 2385 zcmV-X39j~uP){!UU48aa!P@$+C3RCuGbh0;U&v(}R%eM_srN+us|a zF{;jN%$T4#@Riwxyf-&!>&MCS%bqr?p>?x?sZ&}NJ!p&rPmL;Lx{YT}!@~#KGsj`6 zYwG#;@63eavP`CoUBn8P)%Fva=@6Y3LG${?g`SgpPKB&*t4N?7$&fa60jMw;1qd+}iY%x@ z-)23i5eMkcdnV&_n!Ni~!L<*Dcm2KVek7-Y9@8_w+0YKxdC`QeXH-KlX&P;)7(HfD zb-EEHR$LMtb)oulz(Ao7S@*5H8+g^;)zLX-tj5JX37UORJmhM;q{I4qDrHAaQ-ofd z0kMe&MKx=ndNVM$a%qz{hqPl}R=bW}n9@-kWTzxeqK{uD#tSq$yjlnvk!b}1&a8HLtnjGxfa|c zf)abg`lgELIFfb=v_y`{>#($)`k)(EE)1|1*Mh8`6PYf`o;u!5UEUC*I7);YZ0?Xc z?t1Pvv0Z*zK2IWu+~^|#ORY5xAsaygN}UU_2rGrFT|+qd+F2a=eHY>+&nNdCA`>Tx zzr5XrH-32r*N6dK#4KVf#$w3kHu;!SNIyIgFfehV0KFy<)b%PJL^|W(M&}4_-yFu3 z&Ovm3)DO!tc>39;XnCj}YGPbY1mnG;qgv{1m924xHD;oJW4&_(q3W?@ls(eehY-`IwQ%Njs0 z`(>jNtoAi?jLW)eT{G(HZJg}5&L!`|rL%oVHifZuM?2=vkIPmWGC6nYM2sqeW)C#W zXo_XPkCf&)F+BC%Mabnmf(Mb99Ys7Iq8AA>4eu3=(S?)^F-(@MY($ElAL>nGWVis^ z)=0IL!Y-&R*Fy{AUoo0WLC*-QWc*>v8f!JYC<9Yd2+>G@UTcCe9vc=;NW@Ci`|4vD zl@L>07fD*wPd0{-YzV>ggbA})Vu05?>Yy?abZp@3cZ`*Ysw7#{T`yX`bddyW6>qiQ z5RjO3DgJ{Ba-8;wPoyTu@@#B~j*#JrZ!efWIT7MC@7S5~>K|hY{zVl*wWou@C}O!jX7L3|q)Cr!J1iV3 zDON49Jm5;+U@zye`xq-Tr%v{u>-+##teuTk#!w_0fDpUWlg7V~cBA#dD89kWme$H2 zB!BX~PtbiMjYpqs#q3lBtPFl}zjOolDjf~ECnU)5A3#>Jp5DB9E(&W%$mUh#4DFb6g*cfIVN zR7-T8o>%(BV9ea@&*DVK4Sam^7VZw_5RC<~?BUt?>euHW`2gFns;p)jGIslKXK?h- zpWysQcSx*&1Pk`cbt$ah(1t`ZOr4U)ucnQ6GyPxf=%>`~_s>@{noRJuMYbDh`K=Y# zPh-g}8=;aoN#?k$xh(fpmL0`;I}$=zb{jv?OUBCRQU)0FSMlDR%=D{gzfzbi>{xlSGJ!GTxKLa~Xc9EPpc4}QE7 zk8n0F-zmIcywQ+)kR&B( z{2hg7mLTbB);`$`*#^c2FZsEE<~j7d)VT7HfFfC+T%VJ7U3dRbZ}wNo=c^N=EH39M zm$)os-r3aX-Oc_~!}=j+Ss}yCUDe5Y7l-Vr87_0JWsES1{5`xRYlfv1kHQSPd1KtY z+N*n6?L5+7#;SF`FF{e_xA82`G0*9s`3WMLMJ%KYH+>Z)QE4IsrNU9Zq4Jz;uxS$O zWjz_9`!e1QxawzvTD{Tm{f>y+$*%{ag58WTSpN7;_w!WDETzcStw2YJrh>B?-00000NkvXXu0mjf D6{m`; literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_8@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..651f1ab6ac580f17edda854d39c95164a7b274ff GIT binary patch literal 4115 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 Rx6%Lr002ovPDHLkV1n|5?u7sV literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@2x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bf39785e58f0d2020f4fdaba812b11555c30d9 GIT binary patch literal 2579 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 literal 0 HcmV?d00001 diff --git a/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@3x.png b/submodules/TelegramUI/TelegramUI/Resources/StillReactions/simplereaction_9@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f724365468d4a1ca33ee7220c3cc3b1a509042d3 GIT binary patch literal 4452 zcmV-q5u5IbP)_NrREt1%3zS4aMTlQ74ZlpSHpD?=ZDi;sn<Wk)`2@=ST>%4a@}tEU-xZBpNQ(hGL~L^dzVlE>{7-X7xF=oZ zK9k9sKN(KiZ#VzdYZ>k)$Me4EeFN5Q%l&AqUFiDq4=82cO)xd0F^6KQG729J@ZEw6 z@w3I306)i7#PLw*B_xI+3lC&9UQo|I16(1Qd%kb}VkQHG+* z^>H`v{Ecb(pH^RJ&&*0-E;`3%M(aHjeq>|46Slu@!uUK*Fyc@fsv!WQF36B1W?2Ma zDV#(qd8O$N{b}g_EKG3=g`|S}{e-FizU(u524-X8GX|{NHd^@xwcH5U51WRu$#on* zDt%DRW#c9+fC_0+uFsSvq|^!Da@zW2oWRSfX4vcx^*Bquwwa-w-EvA|M zM>K9;P#9X_t0e>0-`-H`Som908EYIxhOHs`EdBNOMWSt*xM~b~pk2y9ms;=ovwy80 zTU%YK7$pJL-(D1O%kU+`Fm88P5*dvITNfym$7R3I3yuvmZ-=rdbE|7u_v`IUk0nq^ zfbGhrbqvDyxwacsHO#9#Wfm0|wwKS7U$YDT7xwc$P1$o2JK?38f?n!#9XCpLe_;<- zteLVw!9S-3tRKC;Lgn2Dxw;-<29Ku5c*P{!d7u?+$3<@9<*?|0l#HH$lcg-kzraNS zDtohd;a=zVwWUCjFFc<7$g0g~j6etJWKi|6%m?)k)ShtP6cRuhd6t^-;VjN{ z#xcx&rJ}5=4WV&f8Op1J2>6*JB=Q^moUR%SlCKz#lL$|LStw^{30Qp1t#vgBkj?)NJ+w3g%Mk2GQ3Z7ry-WyBWgb1Y6eVla|U zj#luZ<)rUo`I#yLNrHWGvNP%RhTm9C?fQ&*1}QR?8u{?Pe*FB2qd0zK6h5DU%9=15 zTS91PDMu~yav)^FM=f}%O3b@t;=N2k{-B8sA8keE!wv>|Q|RrA@lexzPhiInkK(}V z{kZe>tOn%!VAJZp70x%y580i@#U9_u`CK$Z~vs3i}h}@v=MP4G@&SiAkFy9 zi7`C=gSXMyF^1|nK`g$u1~+YL#G<7&sAfR(IwJ8i@n!Y`rE7OwMCMm4UQvz3E7>+n z(?s(g9?GKQ@F3o3??uOmDdRS?Y!8M7#x8?j)fm`e=3QE$iYVij0Xz)5>} zPFQ25cHDqbLErU}Hv`A6XHTN*L>x`6QQZ28d04Zh1yKQ-AJ>itQnbo{vnDYkIWTVz zg=*I4YnocHY*iihyl@6DJ=2L($79&_pPjh-%PU|}HdWz+j-`ThtJN6USj7p-U?KiR z0Y|d-Vr`+B7G@Z1?_e4jd^bUJ9;Eq3aMu@?V#O_uaPuyP`_jmy^Kj_L2HU?t$U>yd zhfsiKE!y@3pY8;BpBxl{CNefsu{`~kH5LE1XyPI687}i<%O@71h5>BHV@Gjl{{a4w zylbT{AU~JpL3XW96LP9 z*D!r8i7eYXlfFBrK1>s@#F7;?Xqa0@e`esC4li#=5opiJIF9^o5U1!eqr>c!XjPGN zw%oL+4_#A@)}>Xrc5MT)ym#l%PGEG1fSV)Z{WfC#uEL6&>frZr z6ZxVLabYZx$KDsa@WL-ndqK*fSxXd_6|(HNd;0NewI3^PtjDc)F2t(!bG>vODW^S4 zj+Q=L4mP7Bw(Be?#73?aG-*1$nIBaRK1T;M(~Jk00?ciRV(x-+>|-kW+4qj1zb`?J z2H~%!%lOztFfG|OoA(@>cPH%yn4!KDKKGRsSiP=+f)x@&BEQC-on6@e!?(GfX(&|A zkr3mC-_Lr22PNopDWsAKy!K)@278kD4EJ1jTdPb&yvQz-A&9IxAE0H|@sMP|BWHXjQNpoT#VpV*Fd){1LidFghS}<8^K6# zKbGW7v`~LJZDuRqM{WsjdS*^E3or+rj?!9sr(88ZbXkS zhfvVanzbaCjN|pzX45&uB2DOAy#|?Oo3ZegHSm|SS7kb3_kz(=!+85l5{v5&;j@c0 zdXEmEuR96W;V|Uzrk*)fVN-)^H?=Sw)u6Jq0lzqSA3EZV2rsHabwfEzOqW0y$j+X{ ziC11m?TKB8IfvkKnrliqCwmHV@fxK~n;z}&Ow-m;8epJ`%`Wei)G!IG6a^Kv7Fs@i zCr+OD7=mRHEc7uY*%Na$aXOph7>8>Kq=G)*D5fms<@q$@o!f=~xMy`u2!DJp;|y;b z%Tj8BGab&exEJ!7^K0F*3Jfl|1+kWEuweNPy3;%SZepuR2g!KN+5QCV;mYA$>QK^Qv8qbb54fqZ1DnEx@r!tWib)raN&FaIxj`( zA2j7uA}bKfY3Eq6l|=ztwtLj^p-(wjf_PpbTJ+XpdyikI<;KSHc{G41 z2dRm*ZY&=#Yo%kFxr)V%f5Yl%_w#+Y;p6w>=B;<4s>*RB4emhJr`WY1Fas^KrR?ucVT>j{+J6SG zKK&#@<(04kv=*9SE}cedbQqcB2)|EbY%qgJ6D!)1iL$UI)q_-q^hu6;zzk-8cd6x< z1dMGj#LUOnKgDRZO2_Of?<5;$;AfO4!!}N;z7xNF1MhYmDCV9+U>!FdWWJ;p{Q=JANL;&{rscW-RgfXSQB1*5;T+xi!riqlcxeqMjZ7YhT2Ae!A6UH4SasImi+4cewvq zm11=0VQnid*-VL`rQ0g>npL`!Qk1e78HQ$!epVTes81Ij>r57PTEL>^fwa}G4fjW^ zqLYvZ)y$(_&g7SuB>Jh0d!{R>O7^2&mvoRZ9slZXb6U!ok!%kMmj5t}2_al9+Tc4;H0B?^H! z7ipbg>$ua<=J(as;sId9KEIvKROm?O_2Ky**Nl;HQ|=ZHXVIKi{v*_abM1qy3C^xX_wn*DjrwrmRwJ?Y3^i z?q{Q`zG5r$yY!#yPWQ#lu|y76&8-ZGx+<590o>t;XK=9_)Li2LqgQNiE&P z>T2zlW~|`&C&Y>4)LPp6)f2VZGnmH7o-rgi3Rae7r#0UEY3lkf-@E7GLz{MZ9rqMT zi~l(zz_N{MWAF56bboCkcOR#0U)Mh09V5wH@ZgC-G>w%ZoiEUp5p;wz<@I;8vV3ep zHktPNXhhP$WZ*i_(g(ize604cnju(`f5w1i z5$?YsKhU=8P$XRUK+w#8j?zAuQ~uhnvvH;9XpH9L03>zDWJ!p==VuS>uVA$%qg9V+ z@BHUE@j2&`H6Cen4<_l;yup;YT)xkBvj3C|S3a3|>CGYR*jC_VCzf8~ZFYcV!?sN} z%ZR?v!>>M~f@Qzfw)2<#8Nya&_{ubst<4{o;hi{KmQISnNPf!XO+dxj1*DKfD+1J_ zKK?`rNfr{EirN|8z;;wdVcM~Iiq12pV?U}R;RA^;E#l94W>2#RJi&ADYwP3q^L=}x zE1b83x!{xRg0_WVZ{BDfZ?#f6#mr4DF?WlLN(7VFxdOMfR*-sKFnf2%>rwfYVYMxsSCrI zJ}d|%F^Y^jy)lQjHlD=gr4Iz~R1xLT4f+;Y2vnHfqrjy66q*!aFtRfavSSV!j@!ka q=}z76%HLN`;K~VHIf4H-C-A>T?4C0000 Date: Fri, 29 Nov 2019 16:15:12 +0400 Subject: [PATCH 3/3] Improve reaction selection UI --- .../ContextUI/Sources/ContextController.swift | 4 +- .../Display/Display/CAAnimationUtils.swift | 6 +- .../Sources/ReactionContextNode.swift | 6 +- .../Sources/ReactionSelectionNode.swift | 30 +++--- .../Sources/ReactionSelectionParentNode.swift | 2 +- .../ReactionSwipeGestureRecognizer.swift | 4 +- .../TelegramUI/ChatController.swift | 4 +- .../ChatControllerInteraction.swift | 4 +- .../ChatMessageAttachedContentNode.swift | 2 +- .../ChatMessageBubbleContentNode.swift | 2 +- .../ChatMessageBubbleItemNode.swift | 26 +++-- .../ChatMessageContactBubbleContentNode.swift | 2 +- .../ChatMessageDateAndStatusNode.swift | 102 +++++++++++++++--- .../ChatMessageFileBubbleContentNode.swift | 2 +- .../ChatMessageGameBubbleContentNode.swift | 2 +- .../ChatMessageInteractiveFileNode.swift | 2 +- .../ChatMessageInvoiceBubbleContentNode.swift | 2 +- .../TelegramUI/ChatMessageItemView.swift | 4 +- .../ChatMessageMapBubbleContentNode.swift | 2 +- .../ChatMessageMediaBubbleContentNode.swift | 2 +- .../ChatMessagePollBubbleContentNode.swift | 2 +- ...atMessageRestrictedBubbleContentNode.swift | 2 +- .../ChatMessageTextBubbleContentNode.swift | 2 +- .../ChatMessageWebpageBubbleContentNode.swift | 2 +- 24 files changed, 150 insertions(+), 68 deletions(-) diff --git a/submodules/ContextUI/Sources/ContextController.swift b/submodules/ContextUI/Sources/ContextController.swift index 7a3ef594cf..af0637b866 100644 --- a/submodules/ContextUI/Sources/ContextController.swift +++ b/submodules/ContextUI/Sources/ContextController.swift @@ -920,7 +920,7 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi } } - func animateOutToReaction(value: String, into targetNode: ASImageNode, hideNode: Bool, completion: @escaping () -> Void) { + func animateOutToReaction(value: String, into targetNode: ASDisplayNode, hideNode: Bool, completion: @escaping () -> Void) { guard let reactionContextNode = self.reactionContextNode else { self.animateOut(result: .default, completion: completion) return @@ -1481,7 +1481,7 @@ public final class ContextController: ViewController, StandalonePresentableContr self.dismiss(result: .default, completion: completion) } - public func dismissWithReaction(value: String, into targetNode: ASImageNode, hideNode: Bool, completion: (() -> Void)?) { + public func dismissWithReaction(value: String, into targetNode: ASDisplayNode, hideNode: Bool, completion: (() -> Void)?) { if !self.wasDismissed { self.wasDismissed = true self.controllerNode.animateOutToReaction(value: value, into: targetNode, hideNode: hideNode, completion: { [weak self] in diff --git a/submodules/Display/Display/CAAnimationUtils.swift b/submodules/Display/Display/CAAnimationUtils.swift index 8246010784..0a251ebae1 100644 --- a/submodules/Display/Display/CAAnimationUtils.swift +++ b/submodules/Display/Display/CAAnimationUtils.swift @@ -71,7 +71,7 @@ public extension CALayer { animation.isAdditive = additive if !delay.isZero { - animation.beginTime = CACurrentMediaTime() + delay + animation.beginTime = CACurrentMediaTime() + delay * UIView.animationDurationFactor() animation.fillMode = .both } @@ -101,7 +101,7 @@ public extension CALayer { } if !delay.isZero { - animation.beginTime = CACurrentMediaTime() + delay + animation.beginTime = CACurrentMediaTime() + delay * UIView.animationDurationFactor() animation.fillMode = .both } @@ -178,7 +178,7 @@ public extension CALayer { } if !delay.isZero { - animation.beginTime = CACurrentMediaTime() + delay + animation.beginTime = CACurrentMediaTime() + delay * UIView.animationDurationFactor() animation.fillMode = .both } diff --git a/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift index 427e712b6e..d7a15edd46 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift @@ -377,14 +377,12 @@ public final class ReactionContextNode: ASDisplayNode { } } - public func animateOutToReaction(value: String, targetNode: ASImageNode, hideNode: Bool, completion: @escaping () -> Void) { + public func animateOutToReaction(value: String, targetNode: ASDisplayNode, hideNode: Bool, completion: @escaping () -> Void) { for itemNode in self.itemNodes { switch itemNode.reaction { case let .reaction(itemValue, _, _): if itemValue == value { - if let snapshotView = itemNode.view.snapshotContentTree(keepTransform: true) { - let targetSnapshotView = UIImageView() - targetSnapshotView.image = targetNode.image + if let snapshotView = itemNode.view.snapshotContentTree(keepTransform: true), let targetSnapshotView = targetNode.view.snapshotContentTree() { targetSnapshotView.frame = self.view.convert(targetNode.bounds, from: targetNode.view) itemNode.isHidden = true self.view.addSubview(targetSnapshotView) diff --git a/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift index 9b8debf415..3243132a1e 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift @@ -255,7 +255,11 @@ final class ReactionSelectionNode: ASDisplayNode { let backgroundHeight: CGFloat = floor(self.minimizedReactionSize * 1.8) var backgroundFrame = CGRect(origin: CGPoint(x: -shadowBlur, y: -shadowBlur), size: CGSize(width: contentWidth + shadowBlur * 2.0, height: backgroundHeight + shadowBlur * 2.0)) - backgroundFrame = backgroundFrame.offsetBy(dx: floor((constrainedSize.width - contentWidth) / 2.0), dy: startingPoint.y - backgroundHeight - 12.0) + if constrainedSize.width > 500.0 { + backgroundFrame = backgroundFrame.offsetBy(dx: constrainedSize.width - contentWidth - 44.0, dy: startingPoint.y - backgroundHeight - 12.0) + } else { + backgroundFrame = backgroundFrame.offsetBy(dx: floor((constrainedSize.width - contentWidth) / 2.0), dy: startingPoint.y - backgroundHeight - 12.0) + } backgroundFrame.origin.x = max(0.0, backgroundFrame.minX) backgroundFrame.origin.x = min(constrainedSize.width - backgroundFrame.width, backgroundFrame.minX) @@ -383,9 +387,9 @@ final class ReactionSelectionNode: ASDisplayNode { let backgroundOffset: CGPoint if self.isRightAligned { - backgroundOffset = CGPoint(x: (self.backgroundNode.frame.width - shadowBlur) / 2.0 - 42.0, y: (self.backgroundNode.frame.height - shadowBlur) / 2.0) + backgroundOffset = CGPoint(x: (self.backgroundNode.frame.width - shadowBlur) / 2.0 - 42.0, y: 10.0) } else { - backgroundOffset = CGPoint(x: -(self.backgroundNode.frame.width - shadowBlur) / 2.0 + 42.0, y: (self.backgroundNode.frame.height - shadowBlur) / 2.0) + backgroundOffset = CGPoint(x: -(self.backgroundNode.frame.width - shadowBlur) / 2.0 + 42.0, y: 10.0) } let damping: CGFloat = 100.0 @@ -393,14 +397,15 @@ final class ReactionSelectionNode: ASDisplayNode { let animationOffset: Double = 1.0 - Double(i) / Double(self.reactionNodes.count - 1) var nodeOffset: CGPoint if self.isRightAligned { - nodeOffset = CGPoint(x: self.reactionNodes[i].frame.minX - (self.backgroundNode.frame.maxX - shadowBlur) / 2.0 - 42.0, y: self.reactionNodes[i].frame.minY - self.backgroundNode.frame.maxY - shadowBlur) + nodeOffset = CGPoint(x: self.reactionNodes[i].frame.minX - (self.backgroundNode.frame.maxX - shadowBlur) / 2.0 - 42.0, y: 10.0) } else { - nodeOffset = CGPoint(x: self.reactionNodes[i].frame.minX - (self.backgroundNode.frame.minX + shadowBlur) / 2.0 - 42.0, y: self.reactionNodes[i].frame.minY - self.backgroundNode.frame.maxY - shadowBlur) + nodeOffset = CGPoint(x: self.reactionNodes[i].frame.minX - (self.backgroundNode.frame.minX + shadowBlur) / 2.0 - 42.0, y: 10.0) } - nodeOffset.x = -nodeOffset.x + nodeOffset.x = 0.0 nodeOffset.y = 30.0 - self.reactionNodes[i].layer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.5 + animationOffset * 0.28, initialVelocity: 0.0, damping: damping) - self.reactionNodes[i].layer.animateSpring(from: NSValue(cgPoint: nodeOffset), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: 0.5, initialVelocity: 0.0, damping: damping, additive: true) + self.reactionNodes[i].layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.04, delay: animationOffset * 0.1) + self.reactionNodes[i].layer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.5, delay: animationOffset * 0.1, initialVelocity: 0.0, damping: damping) + //self.reactionNodes[i].layer.animateSpring(from: NSValue(cgPoint: nodeOffset), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: 0.5, delay: animationOffset * 0.1, initialVelocity: 0.0, damping: damping, additive: true) } self.backgroundNode.layer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: 0.5, initialVelocity: 0.0, damping: damping) @@ -409,7 +414,7 @@ final class ReactionSelectionNode: ASDisplayNode { self.backgroundShadowNode.layer.animateSpring(from: NSValue(cgPoint: backgroundOffset), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: 0.5, initialVelocity: 0.0, damping: damping, additive: true) } - func animateOut(into targetNode: ASImageNode?, hideTarget: Bool, completion: @escaping () -> Void) { + func animateOut(into targetNode: ASDisplayNode?, hideTarget: Bool, completion: @escaping () -> Void) { self.hapticFeedback.prepareTap() var completedContainer = false @@ -424,9 +429,8 @@ final class ReactionSelectionNode: ASDisplayNode { if let targetNode = targetNode { for i in 0 ..< self.reactionNodes.count { if let isMaximized = self.reactionNodes[i].isMaximized, isMaximized { - if let snapshotView = self.reactionNodes[i].view.snapshotContentTree() { - let targetSnapshotView = UIImageView() - targetSnapshotView.image = targetNode.image + targetNode.recursivelyEnsureDisplaySynchronously(true) + if let snapshotView = self.reactionNodes[i].view.snapshotContentTree(), let targetSnapshotView = targetNode.view.snapshotContentTree() { targetSnapshotView.frame = self.view.convert(targetNode.bounds, from: targetNode.view) self.reactionNodes[i].isHidden = true self.view.addSubview(targetSnapshotView) @@ -485,7 +489,7 @@ final class ReactionSelectionNode: ASDisplayNode { } } - self.backgroundNode.layer.animateScale(from: 1.0, to: 0.01, duration: 0.2, removeOnCompletion: false) + //self.backgroundNode.layer.animateScale(from: 1.0, to: 0.01, duration: 0.2, removeOnCompletion: false) self.backgroundShadowNode.layer.animateScale(from: 1.0, to: 0.01, duration: 0.2, removeOnCompletion: false) self.backgroundNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) self.backgroundShadowNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { _ in diff --git a/submodules/ReactionSelectionNode/Sources/ReactionSelectionParentNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionSelectionParentNode.swift index 66a7128362..e02bf48f5f 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionSelectionParentNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionSelectionParentNode.swift @@ -47,7 +47,7 @@ public final class ReactionSelectionParentNode: ASDisplayNode { return nil } - func dismissReactions(into targetNode: ASImageNode?, hideTarget: Bool) { + func dismissReactions(into targetNode: ASDisplayNode?, hideTarget: Bool) { if let currentNode = self.currentNode { currentNode.animateOut(into: targetNode, hideTarget: hideTarget, completion: { [weak currentNode] in currentNode?.removeFromSupernode() diff --git a/submodules/ReactionSelectionNode/Sources/ReactionSwipeGestureRecognizer.swift b/submodules/ReactionSelectionNode/Sources/ReactionSwipeGestureRecognizer.swift index f03217d367..1380aad26f 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionSwipeGestureRecognizer.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionSwipeGestureRecognizer.swift @@ -102,7 +102,7 @@ public final class ReactionSwipeGestureRecognizer: UIPanGestureRecognizer { } let elevate = self.shouldElevateAnchorPoint?() ?? false - let activationTimer = Timer(timeInterval: elevate ? 0.1 : 0.01, target: TimerTarget { [weak self] in + let activationTimer = Timer(timeInterval: elevate ? 0.15 : 0.01, target: TimerTarget { [weak self] in guard let strongSelf = self else { return } @@ -178,7 +178,7 @@ public final class ReactionSwipeGestureRecognizer: UIPanGestureRecognizer { } } - public func complete(into targetNode: ASImageNode?, hideTarget: Bool) { + public func complete(into targetNode: ASDisplayNode?, hideTarget: Bool) { if self.isAwaitingCompletion { self.currentContainer?.dismissReactions(into: targetNode, hideTarget: hideTarget) self.state = .ended diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 581c73bad9..9a14a4b18f 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -567,7 +567,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } var reactionItems: [ReactionContextItem] = [] - let reactions: [(String, String, String)] = [ + /*let reactions: [(String, String, String)] = [ ("😔", "Sad", "sad"), ("😳", "Surprised", "surprised"), ("😂", "Fun", "lol"), @@ -586,7 +586,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G if let path = getAppBundle().path(forResource: name, ofType: "tgs") { reactionItems.append(ReactionContextItem(value: value, text: text, path: path)) } - } + }*/ if Namespaces.Message.allScheduled.contains(message.id.namespace) { reactionItems = [] } diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift index a711a465b9..02b137bb06 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift @@ -98,7 +98,7 @@ public final class ChatControllerInteraction { let sendScheduledMessagesNow: ([MessageId]) -> Void let editScheduledMessagesTime: ([MessageId]) -> Void let performTextSelectionAction: (UInt32, String, TextSelectionAction) -> Void - let updateMessageReaction: (MessageId, String) -> Void + let updateMessageReaction: (MessageId, String?) -> Void let openMessageReactions: (MessageId) -> Void let displaySwipeToReplyHint: () -> Void @@ -115,7 +115,7 @@ public final class ChatControllerInteraction { var searchTextHighightState: (String, [MessageIndex])? var seenOneTimeAnimatedMedia = Set() - init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, TapLongTapOrDoubleTapGestureRecognizer?) -> Void, openMessageContextActions: @escaping (Message, ASDisplayNode, CGRect, ContextGesture?) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendCurrentMessage: @escaping (Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool, ASDisplayNode, CGRect) -> Bool, sendGif: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Bool, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openTheme: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, chatControllerNode: @escaping () -> ASDisplayNode?, reactionContainerNode: @escaping () -> ReactionSelectionParentNode?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, scheduleCurrentMessage: @escaping () -> Void, sendScheduledMessagesNow: @escaping ([MessageId]) -> Void, editScheduledMessagesTime: @escaping ([MessageId]) -> Void, performTextSelectionAction: @escaping (UInt32, String, TextSelectionAction) -> Void, updateMessageReaction: @escaping (MessageId, String) -> Void, openMessageReactions: @escaping (MessageId) -> Void, displaySwipeToReplyHint: @escaping () -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState, stickerSettings: ChatInterfaceStickerSettings) { + init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect, TapLongTapOrDoubleTapGestureRecognizer?) -> Void, openMessageContextActions: @escaping (Message, ASDisplayNode, CGRect, ContextGesture?) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendCurrentMessage: @escaping (Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool, ASDisplayNode, CGRect) -> Bool, sendGif: @escaping (FileMediaReference, ASDisplayNode, CGRect) -> Bool, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openTheme: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, chatControllerNode: @escaping () -> ASDisplayNode?, reactionContainerNode: @escaping () -> ReactionSelectionParentNode?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, scheduleCurrentMessage: @escaping () -> Void, sendScheduledMessagesNow: @escaping ([MessageId]) -> Void, editScheduledMessagesTime: @escaping ([MessageId]) -> Void, performTextSelectionAction: @escaping (UInt32, String, TextSelectionAction) -> Void, updateMessageReaction: @escaping (MessageId, String?) -> Void, openMessageReactions: @escaping (MessageId) -> Void, displaySwipeToReplyHint: @escaping () -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState, stickerSettings: ChatInterfaceStickerSettings) { self.openMessage = openMessage self.openPeer = openPeer self.openPeerMention = openPeerMention diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift index 74175a44ff..6056cd9f7c 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageAttachedContentNode.swift @@ -1051,7 +1051,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode { return self.contentImageNode?.playMediaWithSound() } - func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.statusNode.isHidden { return self.statusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleContentNode.swift index a13e437b08..27b0638d0b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleContentNode.swift @@ -177,7 +177,7 @@ class ChatMessageBubbleContentNode: ASDisplayNode { func updateIsExtractedToContextPreview(_ value: Bool) { } - func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { return nil } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 65d0fb2e10..09527ddeae 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -522,8 +522,14 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode if let item = strongSelf.item, let reaction = reaction { switch reaction { case let .reaction(value, _, _): - strongSelf.awaitingAppliedReaction = (value, {}) - item.controllerInteraction.updateMessageReaction(item.message.id, value) + var resolvedValue: String? + if let reactionsAttribute = mergedMessageReactions(attributes: item.message.attributes), reactionsAttribute.reactions.contains(where: { $0.value == value }) { + resolvedValue = nil + } else { + resolvedValue = value + } + strongSelf.awaitingAppliedReaction = (resolvedValue, {}) + item.controllerInteraction.updateMessageReaction(item.message.id, resolvedValue) case .reply: strongSelf.reactionRecognizer?.complete(into: nil, hideTarget: false) var bounds = strongSelf.bounds @@ -1994,13 +2000,15 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode } strongSelf.awaitingAppliedReaction = nil - var targetNode: ASImageNode? + var targetNode: ASDisplayNode? var hideTarget = false - for contentNode in strongSelf.contentNodes { - if let (reactionNode, count) = contentNode.reactionTargetNode(value: awaitingAppliedReaction) { - targetNode = reactionNode - hideTarget = count == 1 - break + if let awaitingAppliedReaction = awaitingAppliedReaction { + for contentNode in strongSelf.contentNodes { + if let (reactionNode, count) = contentNode.reactionTargetNode(value: awaitingAppliedReaction) { + targetNode = reactionNode + hideTarget = count == 1 + break + } } } strongSelf.reactionRecognizer?.complete(into: targetNode, hideTarget: hideTarget) @@ -2853,7 +2861,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode self.contextSourceNode.contentNode.addSubnode(accessoryItemNode) } - override func targetReactionNode(value: String) -> (ASImageNode, Int)? { + override func targetReactionNode(value: String) -> (ASDisplayNode, Int)? { for contentNode in self.contentNodes { if let (reactionNode, count) = contentNode.reactionTargetNode(value: value) { return (reactionNode, count) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageContactBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageContactBubbleContentNode.swift index 5523ff8921..fff42f4db5 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageContactBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageContactBubbleContentNode.swift @@ -346,7 +346,7 @@ class ChatMessageContactBubbleContentNode: ChatMessageBubbleContentNode { } } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.dateAndStatusNode.isHidden { return self.dateAndStatusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageDateAndStatusNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageDateAndStatusNode.swift index 43bdfbba29..12b8e635f9 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageDateAndStatusNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageDateAndStatusNode.swift @@ -8,6 +8,7 @@ import Display import SwiftSignalKit import TelegramPresentationData import AccountContext +import AppBundle private let reactionCountFont = Font.semibold(11.0) @@ -42,26 +43,90 @@ enum ChatMessageDateAndStatusType: Equatable { case FreeOutgoing(ChatMessageDateAndStatusOutgoingType) } -private let reactionSize: CGFloat = 19.0 +private let reactionSize: CGFloat = 20.0 private let reactionFont = Font.regular(12.0) -private final class StatusReactionNode: ASImageNode { +private final class StatusReactionNodeParameters: NSObject { + let value: String + let previousValue: String? + + init(value: String, previousValue: String?) { + self.value = value + self.previousValue = previousValue + } +} + +private func drawReaction(context: CGContext, value: String, in rect: CGRect) { + var fileId: Int? + switch value { + case "😔": + fileId = 8 + case "😳": + fileId = 19 + case "😂": + fileId = 17 + case "👍": + fileId = 6 + case "❤": + fileId = 13 + default: + break + } + if let fileId = fileId, let path = getAppBundle().path(forResource: "simplereaction_\(fileId)@2x", ofType: "png"), let image = UIImage(contentsOfFile: path) { + context.saveGState() + context.translateBy(x: rect.midX, y: rect.midY) + context.scaleBy(x: 1.0, y: -1.0) + context.translateBy(x: -rect.midX, y: -rect.midY) + context.draw(image.cgImage!, in: rect) + context.restoreGState() + } else { + let string = NSAttributedString(string: value, font: reactionFont, textColor: .black) + string.draw(at: CGPoint(x: rect.minX + 1.0, y: rect.minY + 3.0)) + } +} + +private final class StatusReactionNode: ASDisplayNode { let value: String var count: Int + var previousValue: String? { + didSet { + self.setNeedsDisplay() + } + } - init(value: String, count: Int) { + init(value: String, count: Int, previousValue: String?) { self.value = value self.count = count + self.previousValue = previousValue super.init() - self.image = generateImage(CGSize(width: reactionSize, height: reactionSize), rotatedContext: { size, context in - context.clear(CGRect(origin: CGPoint(), size: size)) - UIGraphicsPushContext(context) - let string = NSAttributedString(string: value, font: reactionFont, textColor: .black) - string.draw(at: CGPoint(x: 1.0, y: 3.0)) - UIGraphicsPopContext() - }) + self.isOpaque = false + self.backgroundColor = nil + } + + override func drawParameters(forAsyncLayer layer: _ASDisplayLayer) -> NSObjectProtocol? { + return StatusReactionNodeParameters(value: self.value, previousValue: self.previousValue) + } + + @objc override public class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) { + let context = UIGraphicsGetCurrentContext()! + + if !isRasterizing { + context.setBlendMode(.copy) + context.setFillColor(UIColor.clear.cgColor) + context.fill(bounds) + } + + guard let parameters = parameters as? StatusReactionNodeParameters else { + return + } + drawReaction(context: context, value: parameters.value, in: bounds) + if let previousValue = parameters.previousValue { + let previousRect = bounds.offsetBy(dx: -14.0, dy: 0) + context.setBlendMode(.destinationOut) + drawReaction(context: context, value: previousValue, in: previousRect) + } } } @@ -346,9 +411,11 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { var reactionCountLayoutAndApply: (TextNodeLayout, () -> TextNode)? + let reactionSpacing: CGFloat = -4.0 + let reactionTrailingSpacing: CGFloat = 4.0 var reactionInset: CGFloat = 0.0 if !reactions.isEmpty { - reactionInset = 5.0 + CGFloat(reactions.count) * reactionSize + reactionInset = 5.0 + CGFloat(reactions.count) * reactionSize + CGFloat(reactions.count - 1) * reactionSpacing + reactionTrailingSpacing var count = 0 for reaction in reactions { @@ -499,8 +566,9 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { if strongSelf.reactionNodes.count > i, strongSelf.reactionNodes[i].value == reactions[i].value { node = strongSelf.reactionNodes[i] node.count = Int(reactions[i].count) + node.previousValue = i == 0 ? nil : reactions[i - 1].value } else { - node = StatusReactionNode(value: reactions[i].value, count: Int(reactions[i].count)) + node = StatusReactionNode(value: reactions[i].value, count: Int(reactions[i].count), previousValue: i == 0 ? nil : reactions[i - 1].value) if strongSelf.reactionNodes.count > i { let previousNode = strongSelf.reactionNodes[i] if animated { @@ -522,11 +590,15 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } node.frame = CGRect(origin: CGPoint(x: reactionOffset, y: backgroundInsets.top + offset - 3.0), size: CGSize(width: reactionSize, height: reactionSize)) - reactionOffset += reactionSize + reactionOffset += reactionSize + reactionSpacing + } + if !reactions.isEmpty { + reactionOffset += reactionTrailingSpacing } for _ in reactions.count ..< strongSelf.reactionNodes.count { let node = strongSelf.reactionNodes.removeLast() if animated { + node.layer.animateScale(from: 1.0, to: 0.1, duration: 0.2, removeOnCompletion: false) node.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak node] _ in node?.removeFromSupernode() }) @@ -558,7 +630,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - if !strongSelf.reactionNodes.isEmpty { + if false, !strongSelf.reactionNodes.isEmpty { if strongSelf.reactionButtonNode == nil { let reactionButtonNode = HighlightTrackingButtonNode() strongSelf.reactionButtonNode = reactionButtonNode @@ -610,7 +682,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - func reactionNode(value: String) -> (ASImageNode, Int)? { + func reactionNode(value: String) -> (ASDisplayNode, Int)? { for node in self.reactionNodes { if node.value == value { return (node, node.count) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageFileBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageFileBubbleContentNode.swift index e36825afab..c837e89d56 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageFileBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageFileBubbleContentNode.swift @@ -119,7 +119,7 @@ class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode { self.interactiveFileNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { return self.interactiveFileNode.reactionTargetNode(value: value) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageGameBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageGameBubbleContentNode.swift index 2c178e673d..ce6f6e2a96 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageGameBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageGameBubbleContentNode.swift @@ -134,7 +134,7 @@ final class ChatMessageGameBubbleContentNode: ChatMessageBubbleContentNode { return self.contentNode.transitionNode(media: media) } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { return self.contentNode.reactionTargetNode(value: value) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift index 1fc51fde50..623d79e24b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift @@ -947,7 +947,7 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode { self.playerUpdateTimer = nil } - func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.dateAndStatusNode.isHidden { return self.dateAndStatusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift index 467e78d1b3..0964c03b96 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift @@ -137,7 +137,7 @@ final class ChatMessageInvoiceBubbleContentNode: ChatMessageBubbleContentNode { return self.contentNode.transitionNode(media: media) } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { return self.contentNode.reactionTargetNode(value: value) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift index 0634cb759d..b6b51c671b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift @@ -634,7 +634,7 @@ public class ChatMessageItemView: ListViewItemNode { var item: ChatMessageItem? var accessibilityData: ChatMessageAccessibilityData? - var awaitingAppliedReaction: (String, () -> Void)? + var awaitingAppliedReaction: (String?, () -> Void)? public required convenience init() { self.init(layerBacked: false) @@ -814,7 +814,7 @@ public class ChatMessageItemView: ListViewItemNode { } } - func targetReactionNode(value: String) -> (ASImageNode, Int)? { + func targetReactionNode(value: String) -> (ASDisplayNode, Int)? { return nil } } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageMapBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageMapBubbleContentNode.swift index 52476028ca..e0762b3917 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageMapBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageMapBubbleContentNode.swift @@ -469,7 +469,7 @@ class ChatMessageMapBubbleContentNode: ChatMessageBubbleContentNode { } } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.dateAndStatusNode.isHidden { return self.dateAndStatusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift index 8fda443f1f..5448edda4e 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift @@ -386,7 +386,7 @@ class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode { return false } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.dateAndStatusNode.isHidden { return self.dateAndStatusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift index dcd5621f02..809eb01d56 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessagePollBubbleContentNode.swift @@ -955,7 +955,7 @@ class ChatMessagePollBubbleContentNode: ChatMessageBubbleContentNode { } } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.statusNode.isHidden { return self.statusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageRestrictedBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageRestrictedBubbleContentNode.swift index 218cb6c4ef..28fc9229f4 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageRestrictedBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageRestrictedBubbleContentNode.swift @@ -245,7 +245,7 @@ class ChatMessageRestrictedBubbleContentNode: ChatMessageBubbleContentNode { self.statusNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false) } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.statusNode.isHidden { return self.statusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift index ee8f9339ad..d0a192ef72 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift @@ -579,7 +579,7 @@ class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode { } } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { if !self.statusNode.isHidden { return self.statusNode.reactionNode(value: value) } diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift index 84c0d56d3a..2dfdb1f388 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift @@ -511,7 +511,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { self.contentNode.updateTouchesAtPoint(point.flatMap { $0.offsetBy(dx: -contentNodeFrame.minX, dy: -contentNodeFrame.minY) }) } - override func reactionTargetNode(value: String) -> (ASImageNode, Int)? { + override func reactionTargetNode(value: String) -> (ASDisplayNode, Int)? { return self.contentNode.reactionTargetNode(value: value) } }