mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 09:20:08 +00:00
Update API
This commit is contained in:
parent
d0e130ec8b
commit
2c53fd2273
@ -557,7 +557,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
|
|||||||
dict[-1098720356] = { return Api.MediaArea.parse_mediaAreaVenue($0) }
|
dict[-1098720356] = { return Api.MediaArea.parse_mediaAreaVenue($0) }
|
||||||
dict[1235637404] = { return Api.MediaArea.parse_mediaAreaWeather($0) }
|
dict[1235637404] = { return Api.MediaArea.parse_mediaAreaWeather($0) }
|
||||||
dict[-808853502] = { return Api.MediaAreaCoordinates.parse_mediaAreaCoordinates($0) }
|
dict[-808853502] = { return Api.MediaAreaCoordinates.parse_mediaAreaCoordinates($0) }
|
||||||
dict[-356721331] = { return Api.Message.parse_message($0) }
|
dict[-1743401272] = { return Api.Message.parse_message($0) }
|
||||||
dict[-1868117372] = { return Api.Message.parse_messageEmpty($0) }
|
dict[-1868117372] = { return Api.Message.parse_messageEmpty($0) }
|
||||||
dict[2055212554] = { return Api.Message.parse_messageService($0) }
|
dict[2055212554] = { return Api.Message.parse_messageService($0) }
|
||||||
dict[-872240531] = { return Api.MessageAction.parse_messageActionBoostApply($0) }
|
dict[-872240531] = { return Api.MessageAction.parse_messageActionBoostApply($0) }
|
||||||
@ -607,6 +607,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
|
|||||||
dict[1192749220] = { return Api.MessageAction.parse_messageActionStarGift($0) }
|
dict[1192749220] = { return Api.MessageAction.parse_messageActionStarGift($0) }
|
||||||
dict[775611918] = { return Api.MessageAction.parse_messageActionStarGiftUnique($0) }
|
dict[775611918] = { return Api.MessageAction.parse_messageActionStarGiftUnique($0) }
|
||||||
dict[1474192222] = { return Api.MessageAction.parse_messageActionSuggestProfilePhoto($0) }
|
dict[1474192222] = { return Api.MessageAction.parse_messageActionSuggestProfilePhoto($0) }
|
||||||
|
dict[866770590] = { return Api.MessageAction.parse_messageActionSuggestedPostApproval($0) }
|
||||||
dict[-940721021] = { return Api.MessageAction.parse_messageActionTodoAppendTasks($0) }
|
dict[-940721021] = { return Api.MessageAction.parse_messageActionTodoAppendTasks($0) }
|
||||||
dict[-864265079] = { return Api.MessageAction.parse_messageActionTodoCompletions($0) }
|
dict[-864265079] = { return Api.MessageAction.parse_messageActionTodoCompletions($0) }
|
||||||
dict[228168278] = { return Api.MessageAction.parse_messageActionTopicCreate($0) }
|
dict[228168278] = { return Api.MessageAction.parse_messageActionTopicCreate($0) }
|
||||||
@ -999,6 +1000,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = {
|
|||||||
dict[-1870436597] = { return Api.StoryView.parse_storyViewPublicForward($0) }
|
dict[-1870436597] = { return Api.StoryView.parse_storyViewPublicForward($0) }
|
||||||
dict[-1116418231] = { return Api.StoryView.parse_storyViewPublicRepost($0) }
|
dict[-1116418231] = { return Api.StoryView.parse_storyViewPublicRepost($0) }
|
||||||
dict[-1923523370] = { return Api.StoryViews.parse_storyViews($0) }
|
dict[-1923523370] = { return Api.StoryViews.parse_storyViews($0) }
|
||||||
|
dict[-1779537299] = { return Api.SuggestedPost.parse_suggestedPost($0) }
|
||||||
dict[1964978502] = { return Api.TextWithEntities.parse_textWithEntities($0) }
|
dict[1964978502] = { return Api.TextWithEntities.parse_textWithEntities($0) }
|
||||||
dict[-1609668650] = { return Api.Theme.parse_theme($0) }
|
dict[-1609668650] = { return Api.Theme.parse_theme($0) }
|
||||||
dict[-94849324] = { return Api.ThemeSettings.parse_themeSettings($0) }
|
dict[-94849324] = { return Api.ThemeSettings.parse_themeSettings($0) }
|
||||||
@ -2202,6 +2204,8 @@ public extension Api {
|
|||||||
_1.serialize(buffer, boxed)
|
_1.serialize(buffer, boxed)
|
||||||
case let _1 as Api.StoryViews:
|
case let _1 as Api.StoryViews:
|
||||||
_1.serialize(buffer, boxed)
|
_1.serialize(buffer, boxed)
|
||||||
|
case let _1 as Api.SuggestedPost:
|
||||||
|
_1.serialize(buffer, boxed)
|
||||||
case let _1 as Api.TextWithEntities:
|
case let _1 as Api.TextWithEntities:
|
||||||
_1.serialize(buffer, boxed)
|
_1.serialize(buffer, boxed)
|
||||||
case let _1 as Api.Theme:
|
case let _1 as Api.Theme:
|
||||||
|
|||||||
@ -60,15 +60,15 @@ public extension Api {
|
|||||||
}
|
}
|
||||||
public extension Api {
|
public extension Api {
|
||||||
indirect enum Message: TypeConstructorDescription {
|
indirect enum Message: TypeConstructorDescription {
|
||||||
case message(flags: Int32, flags2: Int32, id: Int32, fromId: Api.Peer?, fromBoostsApplied: Int32?, peerId: Api.Peer, savedPeerId: Api.Peer?, fwdFrom: Api.MessageFwdHeader?, viaBotId: Int64?, viaBusinessBotId: Int64?, replyTo: Api.MessageReplyHeader?, date: Int32, message: String, media: Api.MessageMedia?, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, views: Int32?, forwards: Int32?, replies: Api.MessageReplies?, editDate: Int32?, postAuthor: String?, groupedId: Int64?, reactions: Api.MessageReactions?, restrictionReason: [Api.RestrictionReason]?, ttlPeriod: Int32?, quickReplyShortcutId: Int32?, effect: Int64?, factcheck: Api.FactCheck?, reportDeliveryUntilDate: Int32?, paidMessageStars: Int64?)
|
case message(flags: Int32, flags2: Int32, id: Int32, fromId: Api.Peer?, fromBoostsApplied: Int32?, peerId: Api.Peer, savedPeerId: Api.Peer?, fwdFrom: Api.MessageFwdHeader?, viaBotId: Int64?, viaBusinessBotId: Int64?, replyTo: Api.MessageReplyHeader?, date: Int32, message: String, media: Api.MessageMedia?, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, views: Int32?, forwards: Int32?, replies: Api.MessageReplies?, editDate: Int32?, postAuthor: String?, groupedId: Int64?, reactions: Api.MessageReactions?, restrictionReason: [Api.RestrictionReason]?, ttlPeriod: Int32?, quickReplyShortcutId: Int32?, effect: Int64?, factcheck: Api.FactCheck?, reportDeliveryUntilDate: Int32?, paidMessageStars: Int64?, suggestedPost: Api.SuggestedPost?)
|
||||||
case messageEmpty(flags: Int32, id: Int32, peerId: Api.Peer?)
|
case messageEmpty(flags: Int32, id: Int32, peerId: Api.Peer?)
|
||||||
case messageService(flags: Int32, id: Int32, fromId: Api.Peer?, peerId: Api.Peer, savedPeerId: Api.Peer?, replyTo: Api.MessageReplyHeader?, date: Int32, action: Api.MessageAction, reactions: Api.MessageReactions?, ttlPeriod: Int32?)
|
case messageService(flags: Int32, id: Int32, fromId: Api.Peer?, peerId: Api.Peer, savedPeerId: Api.Peer?, replyTo: Api.MessageReplyHeader?, date: Int32, action: Api.MessageAction, reactions: Api.MessageReactions?, ttlPeriod: Int32?)
|
||||||
|
|
||||||
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
|
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
|
||||||
switch self {
|
switch self {
|
||||||
case .message(let flags, let flags2, let id, let fromId, let fromBoostsApplied, let peerId, let savedPeerId, let fwdFrom, let viaBotId, let viaBusinessBotId, let replyTo, let date, let message, let media, let replyMarkup, let entities, let views, let forwards, let replies, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason, let ttlPeriod, let quickReplyShortcutId, let effect, let factcheck, let reportDeliveryUntilDate, let paidMessageStars):
|
case .message(let flags, let flags2, let id, let fromId, let fromBoostsApplied, let peerId, let savedPeerId, let fwdFrom, let viaBotId, let viaBusinessBotId, let replyTo, let date, let message, let media, let replyMarkup, let entities, let views, let forwards, let replies, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason, let ttlPeriod, let quickReplyShortcutId, let effect, let factcheck, let reportDeliveryUntilDate, let paidMessageStars, let suggestedPost):
|
||||||
if boxed {
|
if boxed {
|
||||||
buffer.appendInt32(-356721331)
|
buffer.appendInt32(-1743401272)
|
||||||
}
|
}
|
||||||
serializeInt32(flags, buffer: buffer, boxed: false)
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
serializeInt32(flags2, buffer: buffer, boxed: false)
|
serializeInt32(flags2, buffer: buffer, boxed: false)
|
||||||
@ -108,6 +108,7 @@ public extension Api {
|
|||||||
if Int(flags2) & Int(1 << 3) != 0 {factcheck!.serialize(buffer, true)}
|
if Int(flags2) & Int(1 << 3) != 0 {factcheck!.serialize(buffer, true)}
|
||||||
if Int(flags2) & Int(1 << 5) != 0 {serializeInt32(reportDeliveryUntilDate!, buffer: buffer, boxed: false)}
|
if Int(flags2) & Int(1 << 5) != 0 {serializeInt32(reportDeliveryUntilDate!, buffer: buffer, boxed: false)}
|
||||||
if Int(flags2) & Int(1 << 6) != 0 {serializeInt64(paidMessageStars!, buffer: buffer, boxed: false)}
|
if Int(flags2) & Int(1 << 6) != 0 {serializeInt64(paidMessageStars!, buffer: buffer, boxed: false)}
|
||||||
|
if Int(flags2) & Int(1 << 7) != 0 {suggestedPost!.serialize(buffer, true)}
|
||||||
break
|
break
|
||||||
case .messageEmpty(let flags, let id, let peerId):
|
case .messageEmpty(let flags, let id, let peerId):
|
||||||
if boxed {
|
if boxed {
|
||||||
@ -137,8 +138,8 @@ public extension Api {
|
|||||||
|
|
||||||
public func descriptionFields() -> (String, [(String, Any)]) {
|
public func descriptionFields() -> (String, [(String, Any)]) {
|
||||||
switch self {
|
switch self {
|
||||||
case .message(let flags, let flags2, let id, let fromId, let fromBoostsApplied, let peerId, let savedPeerId, let fwdFrom, let viaBotId, let viaBusinessBotId, let replyTo, let date, let message, let media, let replyMarkup, let entities, let views, let forwards, let replies, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason, let ttlPeriod, let quickReplyShortcutId, let effect, let factcheck, let reportDeliveryUntilDate, let paidMessageStars):
|
case .message(let flags, let flags2, let id, let fromId, let fromBoostsApplied, let peerId, let savedPeerId, let fwdFrom, let viaBotId, let viaBusinessBotId, let replyTo, let date, let message, let media, let replyMarkup, let entities, let views, let forwards, let replies, let editDate, let postAuthor, let groupedId, let reactions, let restrictionReason, let ttlPeriod, let quickReplyShortcutId, let effect, let factcheck, let reportDeliveryUntilDate, let paidMessageStars, let suggestedPost):
|
||||||
return ("message", [("flags", flags as Any), ("flags2", flags2 as Any), ("id", id as Any), ("fromId", fromId as Any), ("fromBoostsApplied", fromBoostsApplied as Any), ("peerId", peerId as Any), ("savedPeerId", savedPeerId as Any), ("fwdFrom", fwdFrom as Any), ("viaBotId", viaBotId as Any), ("viaBusinessBotId", viaBusinessBotId as Any), ("replyTo", replyTo as Any), ("date", date as Any), ("message", message as Any), ("media", media as Any), ("replyMarkup", replyMarkup as Any), ("entities", entities as Any), ("views", views as Any), ("forwards", forwards as Any), ("replies", replies as Any), ("editDate", editDate as Any), ("postAuthor", postAuthor as Any), ("groupedId", groupedId as Any), ("reactions", reactions as Any), ("restrictionReason", restrictionReason as Any), ("ttlPeriod", ttlPeriod as Any), ("quickReplyShortcutId", quickReplyShortcutId as Any), ("effect", effect as Any), ("factcheck", factcheck as Any), ("reportDeliveryUntilDate", reportDeliveryUntilDate as Any), ("paidMessageStars", paidMessageStars as Any)])
|
return ("message", [("flags", flags as Any), ("flags2", flags2 as Any), ("id", id as Any), ("fromId", fromId as Any), ("fromBoostsApplied", fromBoostsApplied as Any), ("peerId", peerId as Any), ("savedPeerId", savedPeerId as Any), ("fwdFrom", fwdFrom as Any), ("viaBotId", viaBotId as Any), ("viaBusinessBotId", viaBusinessBotId as Any), ("replyTo", replyTo as Any), ("date", date as Any), ("message", message as Any), ("media", media as Any), ("replyMarkup", replyMarkup as Any), ("entities", entities as Any), ("views", views as Any), ("forwards", forwards as Any), ("replies", replies as Any), ("editDate", editDate as Any), ("postAuthor", postAuthor as Any), ("groupedId", groupedId as Any), ("reactions", reactions as Any), ("restrictionReason", restrictionReason as Any), ("ttlPeriod", ttlPeriod as Any), ("quickReplyShortcutId", quickReplyShortcutId as Any), ("effect", effect as Any), ("factcheck", factcheck as Any), ("reportDeliveryUntilDate", reportDeliveryUntilDate as Any), ("paidMessageStars", paidMessageStars as Any), ("suggestedPost", suggestedPost as Any)])
|
||||||
case .messageEmpty(let flags, let id, let peerId):
|
case .messageEmpty(let flags, let id, let peerId):
|
||||||
return ("messageEmpty", [("flags", flags as Any), ("id", id as Any), ("peerId", peerId as Any)])
|
return ("messageEmpty", [("flags", flags as Any), ("id", id as Any), ("peerId", peerId as Any)])
|
||||||
case .messageService(let flags, let id, let fromId, let peerId, let savedPeerId, let replyTo, let date, let action, let reactions, let ttlPeriod):
|
case .messageService(let flags, let id, let fromId, let peerId, let savedPeerId, let replyTo, let date, let action, let reactions, let ttlPeriod):
|
||||||
@ -231,6 +232,10 @@ public extension Api {
|
|||||||
if Int(_2!) & Int(1 << 5) != 0 {_29 = reader.readInt32() }
|
if Int(_2!) & Int(1 << 5) != 0 {_29 = reader.readInt32() }
|
||||||
var _30: Int64?
|
var _30: Int64?
|
||||||
if Int(_2!) & Int(1 << 6) != 0 {_30 = reader.readInt64() }
|
if Int(_2!) & Int(1 << 6) != 0 {_30 = reader.readInt64() }
|
||||||
|
var _31: Api.SuggestedPost?
|
||||||
|
if Int(_2!) & Int(1 << 7) != 0 {if let signature = reader.readInt32() {
|
||||||
|
_31 = Api.parse(reader, signature: signature) as? Api.SuggestedPost
|
||||||
|
} }
|
||||||
let _c1 = _1 != nil
|
let _c1 = _1 != nil
|
||||||
let _c2 = _2 != nil
|
let _c2 = _2 != nil
|
||||||
let _c3 = _3 != nil
|
let _c3 = _3 != nil
|
||||||
@ -261,8 +266,9 @@ public extension Api {
|
|||||||
let _c28 = (Int(_2!) & Int(1 << 3) == 0) || _28 != nil
|
let _c28 = (Int(_2!) & Int(1 << 3) == 0) || _28 != nil
|
||||||
let _c29 = (Int(_2!) & Int(1 << 5) == 0) || _29 != nil
|
let _c29 = (Int(_2!) & Int(1 << 5) == 0) || _29 != nil
|
||||||
let _c30 = (Int(_2!) & Int(1 << 6) == 0) || _30 != nil
|
let _c30 = (Int(_2!) & Int(1 << 6) == 0) || _30 != nil
|
||||||
if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 && _c12 && _c13 && _c14 && _c15 && _c16 && _c17 && _c18 && _c19 && _c20 && _c21 && _c22 && _c23 && _c24 && _c25 && _c26 && _c27 && _c28 && _c29 && _c30 {
|
let _c31 = (Int(_2!) & Int(1 << 7) == 0) || _31 != nil
|
||||||
return Api.Message.message(flags: _1!, flags2: _2!, id: _3!, fromId: _4, fromBoostsApplied: _5, peerId: _6!, savedPeerId: _7, fwdFrom: _8, viaBotId: _9, viaBusinessBotId: _10, replyTo: _11, date: _12!, message: _13!, media: _14, replyMarkup: _15, entities: _16, views: _17, forwards: _18, replies: _19, editDate: _20, postAuthor: _21, groupedId: _22, reactions: _23, restrictionReason: _24, ttlPeriod: _25, quickReplyShortcutId: _26, effect: _27, factcheck: _28, reportDeliveryUntilDate: _29, paidMessageStars: _30)
|
if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 && _c8 && _c9 && _c10 && _c11 && _c12 && _c13 && _c14 && _c15 && _c16 && _c17 && _c18 && _c19 && _c20 && _c21 && _c22 && _c23 && _c24 && _c25 && _c26 && _c27 && _c28 && _c29 && _c30 && _c31 {
|
||||||
|
return Api.Message.message(flags: _1!, flags2: _2!, id: _3!, fromId: _4, fromBoostsApplied: _5, peerId: _6!, savedPeerId: _7, fwdFrom: _8, viaBotId: _9, viaBusinessBotId: _10, replyTo: _11, date: _12!, message: _13!, media: _14, replyMarkup: _15, entities: _16, views: _17, forwards: _18, replies: _19, editDate: _20, postAuthor: _21, groupedId: _22, reactions: _23, restrictionReason: _24, ttlPeriod: _25, quickReplyShortcutId: _26, effect: _27, factcheck: _28, reportDeliveryUntilDate: _29, paidMessageStars: _30, suggestedPost: _31)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return nil
|
return nil
|
||||||
@ -389,6 +395,7 @@ public extension Api {
|
|||||||
case messageActionStarGift(flags: Int32, gift: Api.StarGift, message: Api.TextWithEntities?, convertStars: Int64?, upgradeMsgId: Int32?, upgradeStars: Int64?, fromId: Api.Peer?, peer: Api.Peer?, savedId: Int64?)
|
case messageActionStarGift(flags: Int32, gift: Api.StarGift, message: Api.TextWithEntities?, convertStars: Int64?, upgradeMsgId: Int32?, upgradeStars: Int64?, fromId: Api.Peer?, peer: Api.Peer?, savedId: Int64?)
|
||||||
case messageActionStarGiftUnique(flags: Int32, gift: Api.StarGift, canExportAt: Int32?, transferStars: Int64?, fromId: Api.Peer?, peer: Api.Peer?, savedId: Int64?, resaleStars: Int64?, canTransferAt: Int32?, canResellAt: Int32?)
|
case messageActionStarGiftUnique(flags: Int32, gift: Api.StarGift, canExportAt: Int32?, transferStars: Int64?, fromId: Api.Peer?, peer: Api.Peer?, savedId: Int64?, resaleStars: Int64?, canTransferAt: Int32?, canResellAt: Int32?)
|
||||||
case messageActionSuggestProfilePhoto(photo: Api.Photo)
|
case messageActionSuggestProfilePhoto(photo: Api.Photo)
|
||||||
|
case messageActionSuggestedPostApproval(flags: Int32)
|
||||||
case messageActionTodoAppendTasks(list: [Api.TodoItem])
|
case messageActionTodoAppendTasks(list: [Api.TodoItem])
|
||||||
case messageActionTodoCompletions(completed: [Int32], incompleted: [Int32])
|
case messageActionTodoCompletions(completed: [Int32], incompleted: [Int32])
|
||||||
case messageActionTopicCreate(flags: Int32, title: String, iconColor: Int32, iconEmojiId: Int64?)
|
case messageActionTopicCreate(flags: Int32, title: String, iconColor: Int32, iconEmojiId: Int64?)
|
||||||
@ -797,6 +804,12 @@ public extension Api {
|
|||||||
}
|
}
|
||||||
photo.serialize(buffer, true)
|
photo.serialize(buffer, true)
|
||||||
break
|
break
|
||||||
|
case .messageActionSuggestedPostApproval(let flags):
|
||||||
|
if boxed {
|
||||||
|
buffer.appendInt32(866770590)
|
||||||
|
}
|
||||||
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
|
break
|
||||||
case .messageActionTodoAppendTasks(let list):
|
case .messageActionTodoAppendTasks(let list):
|
||||||
if boxed {
|
if boxed {
|
||||||
buffer.appendInt32(-940721021)
|
buffer.appendInt32(-940721021)
|
||||||
@ -953,6 +966,8 @@ public extension Api {
|
|||||||
return ("messageActionStarGiftUnique", [("flags", flags as Any), ("gift", gift as Any), ("canExportAt", canExportAt as Any), ("transferStars", transferStars as Any), ("fromId", fromId as Any), ("peer", peer as Any), ("savedId", savedId as Any), ("resaleStars", resaleStars as Any), ("canTransferAt", canTransferAt as Any), ("canResellAt", canResellAt as Any)])
|
return ("messageActionStarGiftUnique", [("flags", flags as Any), ("gift", gift as Any), ("canExportAt", canExportAt as Any), ("transferStars", transferStars as Any), ("fromId", fromId as Any), ("peer", peer as Any), ("savedId", savedId as Any), ("resaleStars", resaleStars as Any), ("canTransferAt", canTransferAt as Any), ("canResellAt", canResellAt as Any)])
|
||||||
case .messageActionSuggestProfilePhoto(let photo):
|
case .messageActionSuggestProfilePhoto(let photo):
|
||||||
return ("messageActionSuggestProfilePhoto", [("photo", photo as Any)])
|
return ("messageActionSuggestProfilePhoto", [("photo", photo as Any)])
|
||||||
|
case .messageActionSuggestedPostApproval(let flags):
|
||||||
|
return ("messageActionSuggestedPostApproval", [("flags", flags as Any)])
|
||||||
case .messageActionTodoAppendTasks(let list):
|
case .messageActionTodoAppendTasks(let list):
|
||||||
return ("messageActionTodoAppendTasks", [("list", list as Any)])
|
return ("messageActionTodoAppendTasks", [("list", list as Any)])
|
||||||
case .messageActionTodoCompletions(let completed, let incompleted):
|
case .messageActionTodoCompletions(let completed, let incompleted):
|
||||||
@ -1752,6 +1767,17 @@ public extension Api {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static func parse_messageActionSuggestedPostApproval(_ reader: BufferReader) -> MessageAction? {
|
||||||
|
var _1: Int32?
|
||||||
|
_1 = reader.readInt32()
|
||||||
|
let _c1 = _1 != nil
|
||||||
|
if _c1 {
|
||||||
|
return Api.MessageAction.messageActionSuggestedPostApproval(flags: _1!)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
public static func parse_messageActionTodoAppendTasks(_ reader: BufferReader) -> MessageAction? {
|
public static func parse_messageActionTodoAppendTasks(_ reader: BufferReader) -> MessageAction? {
|
||||||
var _1: [Api.TodoItem]?
|
var _1: [Api.TodoItem]?
|
||||||
if let _ = reader.readInt32() {
|
if let _ = reader.readInt32() {
|
||||||
|
|||||||
@ -530,6 +530,50 @@ public extension Api {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public extension Api {
|
||||||
|
enum SuggestedPost: TypeConstructorDescription {
|
||||||
|
case suggestedPost(flags: Int32, starsAmount: Int64, scheduleDate: Int32?)
|
||||||
|
|
||||||
|
public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) {
|
||||||
|
switch self {
|
||||||
|
case .suggestedPost(let flags, let starsAmount, let scheduleDate):
|
||||||
|
if boxed {
|
||||||
|
buffer.appendInt32(-1779537299)
|
||||||
|
}
|
||||||
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
|
serializeInt64(starsAmount, buffer: buffer, boxed: false)
|
||||||
|
if Int(flags) & Int(1 << 0) != 0 {serializeInt32(scheduleDate!, buffer: buffer, boxed: false)}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func descriptionFields() -> (String, [(String, Any)]) {
|
||||||
|
switch self {
|
||||||
|
case .suggestedPost(let flags, let starsAmount, let scheduleDate):
|
||||||
|
return ("suggestedPost", [("flags", flags as Any), ("starsAmount", starsAmount as Any), ("scheduleDate", scheduleDate as Any)])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func parse_suggestedPost(_ reader: BufferReader) -> SuggestedPost? {
|
||||||
|
var _1: Int32?
|
||||||
|
_1 = reader.readInt32()
|
||||||
|
var _2: Int64?
|
||||||
|
_2 = reader.readInt64()
|
||||||
|
var _3: Int32?
|
||||||
|
if Int(_1!) & Int(1 << 0) != 0 {_3 = reader.readInt32() }
|
||||||
|
let _c1 = _1 != nil
|
||||||
|
let _c2 = _2 != nil
|
||||||
|
let _c3 = (Int(_1!) & Int(1 << 0) == 0) || _3 != nil
|
||||||
|
if _c1 && _c2 && _c3 {
|
||||||
|
return Api.SuggestedPost.suggestedPost(flags: _1!, starsAmount: _2!, scheduleDate: _3)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
public extension Api {
|
public extension Api {
|
||||||
enum TextWithEntities: TypeConstructorDescription {
|
enum TextWithEntities: TypeConstructorDescription {
|
||||||
case textWithEntities(text: String, entities: [Api.MessageEntity])
|
case textWithEntities(text: String, entities: [Api.MessageEntity])
|
||||||
|
|||||||
@ -8238,9 +8238,9 @@ public extension Api.functions.messages {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public extension Api.functions.messages {
|
public extension Api.functions.messages {
|
||||||
static func sendMedia(flags: Int32, peer: Api.InputPeer, replyTo: Api.InputReplyTo?, media: Api.InputMedia, message: String, randomId: Int64, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, scheduleDate: Int32?, sendAs: Api.InputPeer?, quickReplyShortcut: Api.InputQuickReplyShortcut?, effect: Int64?, allowPaidStars: Int64?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
static func sendMedia(flags: Int32, peer: Api.InputPeer, replyTo: Api.InputReplyTo?, media: Api.InputMedia, message: String, randomId: Int64, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, scheduleDate: Int32?, sendAs: Api.InputPeer?, quickReplyShortcut: Api.InputQuickReplyShortcut?, effect: Int64?, allowPaidStars: Int64?, suggestedPost: Api.SuggestedPost?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
||||||
let buffer = Buffer()
|
let buffer = Buffer()
|
||||||
buffer.appendInt32(-1521431176)
|
buffer.appendInt32(-1403659839)
|
||||||
serializeInt32(flags, buffer: buffer, boxed: false)
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
peer.serialize(buffer, true)
|
peer.serialize(buffer, true)
|
||||||
if Int(flags) & Int(1 << 0) != 0 {replyTo!.serialize(buffer, true)}
|
if Int(flags) & Int(1 << 0) != 0 {replyTo!.serialize(buffer, true)}
|
||||||
@ -8258,7 +8258,8 @@ public extension Api.functions.messages {
|
|||||||
if Int(flags) & Int(1 << 17) != 0 {quickReplyShortcut!.serialize(buffer, true)}
|
if Int(flags) & Int(1 << 17) != 0 {quickReplyShortcut!.serialize(buffer, true)}
|
||||||
if Int(flags) & Int(1 << 18) != 0 {serializeInt64(effect!, buffer: buffer, boxed: false)}
|
if Int(flags) & Int(1 << 18) != 0 {serializeInt64(effect!, buffer: buffer, boxed: false)}
|
||||||
if Int(flags) & Int(1 << 21) != 0 {serializeInt64(allowPaidStars!, buffer: buffer, boxed: false)}
|
if Int(flags) & Int(1 << 21) != 0 {serializeInt64(allowPaidStars!, buffer: buffer, boxed: false)}
|
||||||
return (FunctionDescription(name: "messages.sendMedia", parameters: [("flags", String(describing: flags)), ("peer", String(describing: peer)), ("replyTo", String(describing: replyTo)), ("media", String(describing: media)), ("message", String(describing: message)), ("randomId", String(describing: randomId)), ("replyMarkup", String(describing: replyMarkup)), ("entities", String(describing: entities)), ("scheduleDate", String(describing: scheduleDate)), ("sendAs", String(describing: sendAs)), ("quickReplyShortcut", String(describing: quickReplyShortcut)), ("effect", String(describing: effect)), ("allowPaidStars", String(describing: allowPaidStars))]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in
|
if Int(flags) & Int(1 << 22) != 0 {suggestedPost!.serialize(buffer, true)}
|
||||||
|
return (FunctionDescription(name: "messages.sendMedia", parameters: [("flags", String(describing: flags)), ("peer", String(describing: peer)), ("replyTo", String(describing: replyTo)), ("media", String(describing: media)), ("message", String(describing: message)), ("randomId", String(describing: randomId)), ("replyMarkup", String(describing: replyMarkup)), ("entities", String(describing: entities)), ("scheduleDate", String(describing: scheduleDate)), ("sendAs", String(describing: sendAs)), ("quickReplyShortcut", String(describing: quickReplyShortcut)), ("effect", String(describing: effect)), ("allowPaidStars", String(describing: allowPaidStars)), ("suggestedPost", String(describing: suggestedPost))]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in
|
||||||
let reader = BufferReader(buffer)
|
let reader = BufferReader(buffer)
|
||||||
var result: Api.Updates?
|
var result: Api.Updates?
|
||||||
if let signature = reader.readInt32() {
|
if let signature = reader.readInt32() {
|
||||||
@ -8269,9 +8270,9 @@ public extension Api.functions.messages {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public extension Api.functions.messages {
|
public extension Api.functions.messages {
|
||||||
static func sendMessage(flags: Int32, peer: Api.InputPeer, replyTo: Api.InputReplyTo?, message: String, randomId: Int64, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, scheduleDate: Int32?, sendAs: Api.InputPeer?, quickReplyShortcut: Api.InputQuickReplyShortcut?, effect: Int64?, allowPaidStars: Int64?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
static func sendMessage(flags: Int32, peer: Api.InputPeer, replyTo: Api.InputReplyTo?, message: String, randomId: Int64, replyMarkup: Api.ReplyMarkup?, entities: [Api.MessageEntity]?, scheduleDate: Int32?, sendAs: Api.InputPeer?, quickReplyShortcut: Api.InputQuickReplyShortcut?, effect: Int64?, allowPaidStars: Int64?, suggestedPost: Api.SuggestedPost?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
||||||
let buffer = Buffer()
|
let buffer = Buffer()
|
||||||
buffer.appendInt32(-68013046)
|
buffer.appendInt32(-33170278)
|
||||||
serializeInt32(flags, buffer: buffer, boxed: false)
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
peer.serialize(buffer, true)
|
peer.serialize(buffer, true)
|
||||||
if Int(flags) & Int(1 << 0) != 0 {replyTo!.serialize(buffer, true)}
|
if Int(flags) & Int(1 << 0) != 0 {replyTo!.serialize(buffer, true)}
|
||||||
@ -8288,7 +8289,8 @@ public extension Api.functions.messages {
|
|||||||
if Int(flags) & Int(1 << 17) != 0 {quickReplyShortcut!.serialize(buffer, true)}
|
if Int(flags) & Int(1 << 17) != 0 {quickReplyShortcut!.serialize(buffer, true)}
|
||||||
if Int(flags) & Int(1 << 18) != 0 {serializeInt64(effect!, buffer: buffer, boxed: false)}
|
if Int(flags) & Int(1 << 18) != 0 {serializeInt64(effect!, buffer: buffer, boxed: false)}
|
||||||
if Int(flags) & Int(1 << 21) != 0 {serializeInt64(allowPaidStars!, buffer: buffer, boxed: false)}
|
if Int(flags) & Int(1 << 21) != 0 {serializeInt64(allowPaidStars!, buffer: buffer, boxed: false)}
|
||||||
return (FunctionDescription(name: "messages.sendMessage", parameters: [("flags", String(describing: flags)), ("peer", String(describing: peer)), ("replyTo", String(describing: replyTo)), ("message", String(describing: message)), ("randomId", String(describing: randomId)), ("replyMarkup", String(describing: replyMarkup)), ("entities", String(describing: entities)), ("scheduleDate", String(describing: scheduleDate)), ("sendAs", String(describing: sendAs)), ("quickReplyShortcut", String(describing: quickReplyShortcut)), ("effect", String(describing: effect)), ("allowPaidStars", String(describing: allowPaidStars))]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in
|
if Int(flags) & Int(1 << 22) != 0 {suggestedPost!.serialize(buffer, true)}
|
||||||
|
return (FunctionDescription(name: "messages.sendMessage", parameters: [("flags", String(describing: flags)), ("peer", String(describing: peer)), ("replyTo", String(describing: replyTo)), ("message", String(describing: message)), ("randomId", String(describing: randomId)), ("replyMarkup", String(describing: replyMarkup)), ("entities", String(describing: entities)), ("scheduleDate", String(describing: scheduleDate)), ("sendAs", String(describing: sendAs)), ("quickReplyShortcut", String(describing: quickReplyShortcut)), ("effect", String(describing: effect)), ("allowPaidStars", String(describing: allowPaidStars)), ("suggestedPost", String(describing: suggestedPost))]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in
|
||||||
let reader = BufferReader(buffer)
|
let reader = BufferReader(buffer)
|
||||||
var result: Api.Updates?
|
var result: Api.Updates?
|
||||||
if let signature = reader.readInt32() {
|
if let signature = reader.readInt32() {
|
||||||
@ -8906,6 +8908,24 @@ public extension Api.functions.messages {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public extension Api.functions.messages {
|
||||||
|
static func toggleSuggestedPostApproval(flags: Int32, peer: Api.InputPeer, msgId: Int32, scheduleDate: Int32?) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
||||||
|
let buffer = Buffer()
|
||||||
|
buffer.appendInt32(806598987)
|
||||||
|
serializeInt32(flags, buffer: buffer, boxed: false)
|
||||||
|
peer.serialize(buffer, true)
|
||||||
|
serializeInt32(msgId, buffer: buffer, boxed: false)
|
||||||
|
if Int(flags) & Int(1 << 0) != 0 {serializeInt32(scheduleDate!, buffer: buffer, boxed: false)}
|
||||||
|
return (FunctionDescription(name: "messages.toggleSuggestedPostApproval", parameters: [("flags", String(describing: flags)), ("peer", String(describing: peer)), ("msgId", String(describing: msgId)), ("scheduleDate", String(describing: scheduleDate))]), 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 extension Api.functions.messages {
|
public extension Api.functions.messages {
|
||||||
static func toggleTodoCompleted(peer: Api.InputPeer, msgId: Int32, completed: [Int32], incompleted: [Int32]) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
static func toggleTodoCompleted(peer: Api.InputPeer, msgId: Int32, completed: [Int32], incompleted: [Int32]) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.Updates>) {
|
||||||
let buffer = Buffer()
|
let buffer = Buffer()
|
||||||
|
|||||||
@ -236,6 +236,7 @@ private var declaredEncodables: Void = {
|
|||||||
declareEncodable(TelegramMediaTodo.self, f: { TelegramMediaTodo(decoder: $0) })
|
declareEncodable(TelegramMediaTodo.self, f: { TelegramMediaTodo(decoder: $0) })
|
||||||
declareEncodable(TelegramMediaTodo.Item.self, f: { TelegramMediaTodo.Item(decoder: $0) })
|
declareEncodable(TelegramMediaTodo.Item.self, f: { TelegramMediaTodo.Item(decoder: $0) })
|
||||||
declareEncodable(TelegramMediaTodo.Completion.self, f: { TelegramMediaTodo.Completion(decoder: $0) })
|
declareEncodable(TelegramMediaTodo.Completion.self, f: { TelegramMediaTodo.Completion(decoder: $0) })
|
||||||
|
declareEncodable(SuggestedPostMessageAttribute.self, f: { SuggestedPostMessageAttribute(decoder: $0) })
|
||||||
return
|
return
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@ -128,7 +128,7 @@ public func tagsForStoreMessage(incoming: Bool, attributes: [MessageAttribute],
|
|||||||
|
|
||||||
func apiMessagePeerId(_ messsage: Api.Message) -> PeerId? {
|
func apiMessagePeerId(_ messsage: Api.Message) -> PeerId? {
|
||||||
switch messsage {
|
switch messsage {
|
||||||
case let .message(_, _, _, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
let chatPeerId = messagePeerId
|
let chatPeerId = messagePeerId
|
||||||
return chatPeerId.peerId
|
return chatPeerId.peerId
|
||||||
case let .messageEmpty(_, _, peerId):
|
case let .messageEmpty(_, _, peerId):
|
||||||
@ -144,7 +144,7 @@ func apiMessagePeerId(_ messsage: Api.Message) -> PeerId? {
|
|||||||
|
|
||||||
func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] {
|
func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] {
|
||||||
switch message {
|
switch message {
|
||||||
case let .message(_, _, _, fromId, _, chatPeerId, savedPeerId, fwdHeader, viaBotId, viaBusinessBotId, replyTo, _, _, media, _, entities, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, fromId, _, chatPeerId, savedPeerId, fwdHeader, viaBotId, viaBusinessBotId, replyTo, _, _, media, _, entities, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
let peerId: PeerId = chatPeerId.peerId
|
let peerId: PeerId = chatPeerId.peerId
|
||||||
|
|
||||||
var result = [peerId]
|
var result = [peerId]
|
||||||
@ -232,7 +232,7 @@ func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch action {
|
switch action {
|
||||||
case .messageActionChannelCreate, .messageActionChatDeletePhoto, .messageActionChatEditPhoto, .messageActionChatEditTitle, .messageActionEmpty, .messageActionPinMessage, .messageActionHistoryClear, .messageActionGameScore, .messageActionPaymentSent, .messageActionPaymentSentMe, .messageActionPhoneCall, .messageActionScreenshotTaken, .messageActionCustomAction, .messageActionBotAllowed, .messageActionSecureValuesSent, .messageActionSecureValuesSentMe, .messageActionContactSignUp, .messageActionGroupCall, .messageActionSetMessagesTTL, .messageActionGroupCallScheduled, .messageActionSetChatTheme, .messageActionChatJoinedByRequest, .messageActionWebViewDataSent, .messageActionWebViewDataSentMe, .messageActionGiftPremium, .messageActionGiftStars, .messageActionTopicCreate, .messageActionTopicEdit, .messageActionSuggestProfilePhoto, .messageActionSetChatWallPaper, .messageActionGiveawayLaunch, .messageActionGiveawayResults, .messageActionBoostApply, .messageActionRequestedPeerSentMe, .messageActionStarGift, .messageActionStarGiftUnique, .messageActionPaidMessagesRefunded, .messageActionPaidMessagesPrice, .messageActionTodoCompletions, .messageActionTodoAppendTasks:
|
case .messageActionChannelCreate, .messageActionChatDeletePhoto, .messageActionChatEditPhoto, .messageActionChatEditTitle, .messageActionEmpty, .messageActionPinMessage, .messageActionHistoryClear, .messageActionGameScore, .messageActionPaymentSent, .messageActionPaymentSentMe, .messageActionPhoneCall, .messageActionScreenshotTaken, .messageActionCustomAction, .messageActionBotAllowed, .messageActionSecureValuesSent, .messageActionSecureValuesSentMe, .messageActionContactSignUp, .messageActionGroupCall, .messageActionSetMessagesTTL, .messageActionGroupCallScheduled, .messageActionSetChatTheme, .messageActionChatJoinedByRequest, .messageActionWebViewDataSent, .messageActionWebViewDataSentMe, .messageActionGiftPremium, .messageActionGiftStars, .messageActionTopicCreate, .messageActionTopicEdit, .messageActionSuggestProfilePhoto, .messageActionSetChatWallPaper, .messageActionGiveawayLaunch, .messageActionGiveawayResults, .messageActionBoostApply, .messageActionRequestedPeerSentMe, .messageActionStarGift, .messageActionStarGiftUnique, .messageActionPaidMessagesRefunded, .messageActionPaidMessagesPrice, .messageActionTodoCompletions, .messageActionTodoAppendTasks, .messageActionSuggestedPostApproval:
|
||||||
break
|
break
|
||||||
case let .messageActionChannelMigrateFrom(_, chatId):
|
case let .messageActionChannelMigrateFrom(_, chatId):
|
||||||
result.append(PeerId(namespace: Namespaces.Peer.CloudGroup, id: PeerId.Id._internalFromInt64Value(chatId)))
|
result.append(PeerId(namespace: Namespaces.Peer.CloudGroup, id: PeerId.Id._internalFromInt64Value(chatId)))
|
||||||
@ -279,7 +279,7 @@ func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] {
|
|||||||
|
|
||||||
func apiMessageAssociatedMessageIds(_ message: Api.Message) -> (replyIds: ReferencedReplyMessageIds, generalIds: [MessageId])? {
|
func apiMessageAssociatedMessageIds(_ message: Api.Message) -> (replyIds: ReferencedReplyMessageIds, generalIds: [MessageId])? {
|
||||||
switch message {
|
switch message {
|
||||||
case let .message(_, _, id, _, _, chatPeerId, _, _, _, _, replyTo, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, id, _, _, chatPeerId, _, _, _, _, replyTo, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
if let replyTo = replyTo {
|
if let replyTo = replyTo {
|
||||||
let peerId: PeerId = chatPeerId.peerId
|
let peerId: PeerId = chatPeerId.peerId
|
||||||
|
|
||||||
@ -691,7 +691,7 @@ func messageTextEntitiesFromApiEntities(_ entities: [Api.MessageEntity]) -> [Mes
|
|||||||
extension StoreMessage {
|
extension StoreMessage {
|
||||||
convenience init?(apiMessage: Api.Message, accountPeerId: PeerId, peerIsForum: Bool, namespace: MessageId.Namespace = Namespaces.Message.Cloud) {
|
convenience init?(apiMessage: Api.Message, accountPeerId: PeerId, peerIsForum: Bool, namespace: MessageId.Namespace = Namespaces.Message.Cloud) {
|
||||||
switch apiMessage {
|
switch apiMessage {
|
||||||
case let .message(flags, flags2, id, fromId, boosts, chatPeerId, savedPeerId, fwdFrom, viaBotId, viaBusinessBotId, replyTo, date, message, media, replyMarkup, entities, views, forwards, replies, editDate, postAuthor, groupingId, reactions, restrictionReason, ttlPeriod, quickReplyShortcutId, messageEffectId, factCheck, reportDeliveryUntilDate, paidMessageStars):
|
case let .message(flags, flags2, id, fromId, boosts, chatPeerId, savedPeerId, fwdFrom, viaBotId, viaBusinessBotId, replyTo, date, message, media, replyMarkup, entities, views, forwards, replies, editDate, postAuthor, groupingId, reactions, restrictionReason, ttlPeriod, quickReplyShortcutId, messageEffectId, factCheck, reportDeliveryUntilDate, paidMessageStars, suggestedPost):
|
||||||
var attributes: [MessageAttribute] = []
|
var attributes: [MessageAttribute] = []
|
||||||
|
|
||||||
if (flags2 & (1 << 4)) != 0 {
|
if (flags2 & (1 << 4)) != 0 {
|
||||||
@ -1012,6 +1012,10 @@ extension StoreMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let suggestedPost {
|
||||||
|
attributes.append(SuggestedPostMessageAttribute(apiSuggestedPost: suggestedPost))
|
||||||
|
}
|
||||||
|
|
||||||
var storeFlags = StoreMessageFlags()
|
var storeFlags = StoreMessageFlags()
|
||||||
|
|
||||||
if let replyMarkup = replyMarkup {
|
if let replyMarkup = replyMarkup {
|
||||||
|
|||||||
@ -228,6 +228,20 @@ func telegramMediaActionFromApiAction(_ action: Api.MessageAction) -> TelegramMe
|
|||||||
return TelegramMediaAction(action: .todoCompletions(completed: completed, incompleted: incompleted))
|
return TelegramMediaAction(action: .todoCompletions(completed: completed, incompleted: incompleted))
|
||||||
case let .messageActionTodoAppendTasks(list):
|
case let .messageActionTodoAppendTasks(list):
|
||||||
return TelegramMediaAction(action: .todoAppendTasks(list.map { TelegramMediaTodo.Item(apiItem: $0) }))
|
return TelegramMediaAction(action: .todoAppendTasks(list.map { TelegramMediaTodo.Item(apiItem: $0) }))
|
||||||
|
case let .messageActionSuggestedPostApproval(flags):
|
||||||
|
let status: TelegramMediaActionType.SuggestedPostApprovalStatus
|
||||||
|
if (flags & (1 << 0)) != 0 {
|
||||||
|
let reason: TelegramMediaActionType.SuggestedPostApprovalStatus.RejectionReason
|
||||||
|
if (flags & (1 << 0)) != 1 {
|
||||||
|
reason = .lowBalance
|
||||||
|
} else {
|
||||||
|
reason = .generic
|
||||||
|
}
|
||||||
|
status = .rejected(reason: reason)
|
||||||
|
} else {
|
||||||
|
status = .approved
|
||||||
|
}
|
||||||
|
return TelegramMediaAction(action: .suggestedPostApprovalStatus(status: status))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -256,6 +256,8 @@ private func filterMessageAttributesForOutgoingMessage(_ attributes: [MessageAtt
|
|||||||
return true
|
return true
|
||||||
case _ as PaidStarsMessageAttribute:
|
case _ as PaidStarsMessageAttribute:
|
||||||
return true
|
return true
|
||||||
|
case _ as SuggestedPostMessageAttribute:
|
||||||
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -343,6 +343,7 @@ private func sendUploadedMessageContent(
|
|||||||
var sendAsPeerId: PeerId?
|
var sendAsPeerId: PeerId?
|
||||||
var bubbleUpEmojiOrStickersets = false
|
var bubbleUpEmojiOrStickersets = false
|
||||||
var allowPaidStars: Int64?
|
var allowPaidStars: Int64?
|
||||||
|
var suggestedPost: Api.SuggestedPost?
|
||||||
|
|
||||||
var flags: Int32 = 0
|
var flags: Int32 = 0
|
||||||
|
|
||||||
@ -382,6 +383,8 @@ private func sendUploadedMessageContent(
|
|||||||
videoTimestamp = attribute.timestamp
|
videoTimestamp = attribute.timestamp
|
||||||
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
||||||
allowPaidStars = attribute.stars.value
|
allowPaidStars = attribute.stars.value
|
||||||
|
} else if let attribute = attribute as? SuggestedPostMessageAttribute {
|
||||||
|
suggestedPost = attribute.apiSuggestedPost()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,7 +445,11 @@ private func sendUploadedMessageContent(
|
|||||||
replyTo = .inputReplyToMonoForum(monoforumPeerId: monoforumPeerId)
|
replyTo = .inputReplyToMonoForum(monoforumPeerId: monoforumPeerId)
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessageRequest = network.requestWithAdditionalInfo(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars), info: .acknowledgement, tag: dependencyTag)
|
if suggestedPost != nil {
|
||||||
|
flags |= 1 << 22
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessageRequest = network.requestWithAdditionalInfo(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars, suggestedPost: suggestedPost), info: .acknowledgement, tag: dependencyTag)
|
||||||
case let .media(inputMedia, text):
|
case let .media(inputMedia, text):
|
||||||
if bubbleUpEmojiOrStickersets {
|
if bubbleUpEmojiOrStickersets {
|
||||||
flags |= Int32(1 << 15)
|
flags |= Int32(1 << 15)
|
||||||
@ -467,7 +474,11 @@ private func sendUploadedMessageContent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessageRequest = network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars), tag: dependencyTag)
|
if suggestedPost != nil {
|
||||||
|
flags |= 1 << 22
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessageRequest = network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars, suggestedPost: suggestedPost), tag: dependencyTag)
|
||||||
|> map(NetworkRequestResult.result)
|
|> map(NetworkRequestResult.result)
|
||||||
case let .forward(sourceInfo):
|
case let .forward(sourceInfo):
|
||||||
if topMsgId != nil {
|
if topMsgId != nil {
|
||||||
@ -617,6 +628,7 @@ private func sendMessageContent(account: Account, peerId: PeerId, attributes: [M
|
|||||||
var scheduleTime: Int32?
|
var scheduleTime: Int32?
|
||||||
var sendAsPeerId: PeerId?
|
var sendAsPeerId: PeerId?
|
||||||
var allowPaidStars: Int64?
|
var allowPaidStars: Int64?
|
||||||
|
var suggestedPost: Api.SuggestedPost?
|
||||||
|
|
||||||
var flags: Int32 = 0
|
var flags: Int32 = 0
|
||||||
flags |= (1 << 7)
|
flags |= (1 << 7)
|
||||||
@ -643,6 +655,8 @@ private func sendMessageContent(account: Account, peerId: PeerId, attributes: [M
|
|||||||
sendAsPeerId = attribute.peerId
|
sendAsPeerId = attribute.peerId
|
||||||
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
||||||
allowPaidStars = attribute.stars.value
|
allowPaidStars = attribute.stars.value
|
||||||
|
} else if let attribute = attribute as? SuggestedPostMessageAttribute {
|
||||||
|
suggestedPost = attribute.apiSuggestedPost()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,7 +693,7 @@ private func sendMessageContent(account: Account, peerId: PeerId, attributes: [M
|
|||||||
replyTo = .inputReplyToMessage(flags: flags, replyToMsgId: threadId, topMsgId: threadId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil, monoforumPeerId: nil)
|
replyTo = .inputReplyToMessage(flags: flags, replyToMsgId: threadId, topMsgId: threadId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil, monoforumPeerId: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessageRequest = account.network.request(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars))
|
sendMessageRequest = account.network.request(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars, suggestedPost: nil))
|
||||||
|> `catch` { _ -> Signal<Api.Updates, NoError> in
|
|> `catch` { _ -> Signal<Api.Updates, NoError> in
|
||||||
return .complete()
|
return .complete()
|
||||||
}
|
}
|
||||||
@ -700,7 +714,11 @@ private func sendMessageContent(account: Account, peerId: PeerId, attributes: [M
|
|||||||
replyTo = .inputReplyToMessage(flags: flags, replyToMsgId: threadId, topMsgId: threadId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil, monoforumPeerId: nil)
|
replyTo = .inputReplyToMessage(flags: flags, replyToMsgId: threadId, topMsgId: threadId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil, monoforumPeerId: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessageRequest = account.network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars))
|
if suggestedPost != nil {
|
||||||
|
flags |= 1 << 22
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessageRequest = account.network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: nil, effect: nil, allowPaidStars: allowPaidStars, suggestedPost: suggestedPost))
|
||||||
|> `catch` { _ -> Signal<Api.Updates, NoError> in
|
|> `catch` { _ -> Signal<Api.Updates, NoError> in
|
||||||
return .complete()
|
return .complete()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ func applyUpdateMessage(postbox: Postbox, stateManager: AccountStateManager, mes
|
|||||||
var updatedTimestamp: Int32?
|
var updatedTimestamp: Int32?
|
||||||
if let apiMessage = apiMessage {
|
if let apiMessage = apiMessage {
|
||||||
switch apiMessage {
|
switch apiMessage {
|
||||||
case let .message(_, _, _, _, _, _, _, _, _, _, _, date, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, _, _, _, _, _, _, date, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
updatedTimestamp = date
|
updatedTimestamp = date
|
||||||
case .messageEmpty:
|
case .messageEmpty:
|
||||||
break
|
break
|
||||||
@ -400,7 +400,7 @@ func applyUpdateGroupMessages(postbox: Postbox, stateManager: AccountStateManage
|
|||||||
} else if let message = messages.first, let apiMessage = result.messages.first {
|
} else if let message = messages.first, let apiMessage = result.messages.first {
|
||||||
if message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
if message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
||||||
namespace = Namespaces.Message.ScheduledCloud
|
namespace = Namespaces.Message.ScheduledCloud
|
||||||
} else if let apiMessage = result.messages.first, case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage, (flags2 & (1 << 4)) != 0 {
|
} else if let apiMessage = result.messages.first, case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage, (flags2 & (1 << 4)) != 0 {
|
||||||
namespace = Namespaces.Message.ScheduledCloud
|
namespace = Namespaces.Message.ScheduledCloud
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1349,6 +1349,7 @@ public final class PendingMessageManager {
|
|||||||
var quickReply: OutgoingQuickReplyMessageAttribute?
|
var quickReply: OutgoingQuickReplyMessageAttribute?
|
||||||
var messageEffect: EffectMessageAttribute?
|
var messageEffect: EffectMessageAttribute?
|
||||||
var allowPaidStars: Int64?
|
var allowPaidStars: Int64?
|
||||||
|
var suggestedPost: Api.SuggestedPost?
|
||||||
|
|
||||||
var flags: Int32 = 0
|
var flags: Int32 = 0
|
||||||
|
|
||||||
@ -1403,6 +1404,8 @@ public final class PendingMessageManager {
|
|||||||
videoTimestamp = attribute.timestamp
|
videoTimestamp = attribute.timestamp
|
||||||
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
} else if let attribute = attribute as? PaidStarsMessageAttribute {
|
||||||
allowPaidStars = attribute.stars.value
|
allowPaidStars = attribute.stars.value
|
||||||
|
} else if let attribute = attribute as? SuggestedPostMessageAttribute {
|
||||||
|
suggestedPost = attribute.apiSuggestedPost()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1520,8 +1523,11 @@ public final class PendingMessageManager {
|
|||||||
if let _ = allowPaidStars {
|
if let _ = allowPaidStars {
|
||||||
flags |= 1 << 21
|
flags |= 1 << 21
|
||||||
}
|
}
|
||||||
|
if let _ = suggestedPost {
|
||||||
|
flags |= 1 << 22
|
||||||
|
}
|
||||||
|
|
||||||
sendMessageRequest = network.requestWithAdditionalInfo(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: message.text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: quickReplyShortcut, effect: messageEffectId, allowPaidStars: allowPaidStars), info: .acknowledgement, tag: dependencyTag)
|
sendMessageRequest = network.requestWithAdditionalInfo(Api.functions.messages.sendMessage(flags: flags, peer: inputPeer, replyTo: replyTo, message: message.text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: quickReplyShortcut, effect: messageEffectId, allowPaidStars: allowPaidStars, suggestedPost: suggestedPost), info: .acknowledgement, tag: dependencyTag)
|
||||||
case let .media(inputMedia, text):
|
case let .media(inputMedia, text):
|
||||||
if bubbleUpEmojiOrStickersets {
|
if bubbleUpEmojiOrStickersets {
|
||||||
flags |= Int32(1 << 15)
|
flags |= Int32(1 << 15)
|
||||||
@ -1613,8 +1619,11 @@ public final class PendingMessageManager {
|
|||||||
if let _ = allowPaidStars {
|
if let _ = allowPaidStars {
|
||||||
flags |= 1 << 21
|
flags |= 1 << 21
|
||||||
}
|
}
|
||||||
|
if let _ = suggestedPost {
|
||||||
|
flags |= 1 << 22
|
||||||
|
}
|
||||||
|
|
||||||
sendMessageRequest = network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: quickReplyShortcut, effect: messageEffectId, allowPaidStars: allowPaidStars), tag: dependencyTag)
|
sendMessageRequest = network.request(Api.functions.messages.sendMedia(flags: flags, peer: inputPeer, replyTo: replyTo, media: inputMedia, message: text, randomId: uniqueId, replyMarkup: nil, entities: messageEntities, scheduleDate: scheduleTime, sendAs: sendAsInputPeer, quickReplyShortcut: quickReplyShortcut, effect: messageEffectId, allowPaidStars: allowPaidStars, suggestedPost: suggestedPost), tag: dependencyTag)
|
||||||
|> map(NetworkRequestResult.result)
|
|> map(NetworkRequestResult.result)
|
||||||
case let .forward(sourceInfo):
|
case let .forward(sourceInfo):
|
||||||
var topMsgId: Int32?
|
var topMsgId: Int32?
|
||||||
@ -1897,7 +1906,7 @@ public final class PendingMessageManager {
|
|||||||
if message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
if message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
||||||
isScheduled = true
|
isScheduled = true
|
||||||
}
|
}
|
||||||
if case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage {
|
if case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage {
|
||||||
if (flags2 & (1 << 4)) != 0 {
|
if (flags2 & (1 << 4)) != 0 {
|
||||||
isScheduled = true
|
isScheduled = true
|
||||||
}
|
}
|
||||||
@ -1941,7 +1950,7 @@ public final class PendingMessageManager {
|
|||||||
namespace = Namespaces.Message.QuickReplyCloud
|
namespace = Namespaces.Message.QuickReplyCloud
|
||||||
} else if let apiMessage = result.messages.first, message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
} else if let apiMessage = result.messages.first, message.scheduleTime != nil && message.scheduleTime == apiMessage.timestamp {
|
||||||
namespace = Namespaces.Message.ScheduledCloud
|
namespace = Namespaces.Message.ScheduledCloud
|
||||||
} else if let apiMessage = result.messages.first, case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage, (flags2 & (1 << 4)) != 0 {
|
} else if let apiMessage = result.messages.first, case let .message(_, flags2, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) = apiMessage, (flags2 & (1 << 4)) != 0 {
|
||||||
namespace = Namespaces.Message.ScheduledCloud
|
namespace = Namespaces.Message.ScheduledCloud
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -210,7 +210,7 @@ public class BoxedMessage: NSObject {
|
|||||||
|
|
||||||
public class Serialization: NSObject, MTSerialization {
|
public class Serialization: NSObject, MTSerialization {
|
||||||
public func currentLayer() -> UInt {
|
public func currentLayer() -> UInt {
|
||||||
return 205
|
return 206
|
||||||
}
|
}
|
||||||
|
|
||||||
public func parseMessage(_ data: Data!) -> Any! {
|
public func parseMessage(_ data: Data!) -> Any! {
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class UpdateMessageService: NSObject, MTMessageService {
|
|||||||
self.putNext(groups)
|
self.putNext(groups)
|
||||||
}
|
}
|
||||||
case let .updateShortChatMessage(flags, id, fromId, chatId, message, pts, ptsCount, date, fwdFrom, viaBotId, replyHeader, entities, ttlPeriod):
|
case let .updateShortChatMessage(flags, id, fromId, chatId, message, pts, ptsCount, date, fwdFrom, viaBotId, replyHeader, entities, ttlPeriod):
|
||||||
let generatedMessage = Api.Message.message(flags: flags, flags2: 0, id: id, fromId: .peerUser(userId: fromId), fromBoostsApplied: nil, peerId: Api.Peer.peerChat(chatId: chatId), savedPeerId: nil, fwdFrom: fwdFrom, viaBotId: viaBotId, viaBusinessBotId: nil, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil, ttlPeriod: ttlPeriod, quickReplyShortcutId: nil, effect: nil, factcheck: nil, reportDeliveryUntilDate: nil, paidMessageStars: nil)
|
let generatedMessage = Api.Message.message(flags: flags, flags2: 0, id: id, fromId: .peerUser(userId: fromId), fromBoostsApplied: nil, peerId: Api.Peer.peerChat(chatId: chatId), savedPeerId: nil, fwdFrom: fwdFrom, viaBotId: viaBotId, viaBusinessBotId: nil, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil, ttlPeriod: ttlPeriod, quickReplyShortcutId: nil, effect: nil, factcheck: nil, reportDeliveryUntilDate: nil, paidMessageStars: nil, suggestedPost: nil)
|
||||||
let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount)
|
let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount)
|
||||||
let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil)
|
let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil)
|
||||||
if groups.count != 0 {
|
if groups.count != 0 {
|
||||||
@ -74,7 +74,7 @@ class UpdateMessageService: NSObject, MTMessageService {
|
|||||||
|
|
||||||
let generatedPeerId = Api.Peer.peerUser(userId: userId)
|
let generatedPeerId = Api.Peer.peerUser(userId: userId)
|
||||||
|
|
||||||
let generatedMessage = Api.Message.message(flags: flags, flags2: 0, id: id, fromId: generatedFromId, fromBoostsApplied: nil, peerId: generatedPeerId, savedPeerId: nil, fwdFrom: fwdFrom, viaBotId: viaBotId, viaBusinessBotId: nil, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil, ttlPeriod: ttlPeriod, quickReplyShortcutId: nil, effect: nil, factcheck: nil, reportDeliveryUntilDate: nil, paidMessageStars: nil)
|
let generatedMessage = Api.Message.message(flags: flags, flags2: 0, id: id, fromId: generatedFromId, fromBoostsApplied: nil, peerId: generatedPeerId, savedPeerId: nil, fwdFrom: fwdFrom, viaBotId: viaBotId, viaBusinessBotId: nil, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, reactions: nil, restrictionReason: nil, ttlPeriod: ttlPeriod, quickReplyShortcutId: nil, effect: nil, factcheck: nil, reportDeliveryUntilDate: nil, paidMessageStars: nil, suggestedPost: nil)
|
||||||
let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount)
|
let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount)
|
||||||
let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil)
|
let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil)
|
||||||
if groups.count != 0 {
|
if groups.count != 0 {
|
||||||
|
|||||||
@ -104,7 +104,7 @@ extension Api.MessageMedia {
|
|||||||
extension Api.Message {
|
extension Api.Message {
|
||||||
var rawId: Int32 {
|
var rawId: Int32 {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, _, id, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, id, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
return id
|
return id
|
||||||
case let .messageEmpty(_, id, _):
|
case let .messageEmpty(_, id, _):
|
||||||
return id
|
return id
|
||||||
@ -115,7 +115,7 @@ extension Api.Message {
|
|||||||
|
|
||||||
func id(namespace: MessageId.Namespace = Namespaces.Message.Cloud) -> MessageId? {
|
func id(namespace: MessageId.Namespace = Namespaces.Message.Cloud) -> MessageId? {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, flags2, id, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, flags2, id, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
var namespace = namespace
|
var namespace = namespace
|
||||||
if (flags2 & (1 << 4)) != 0 {
|
if (flags2 & (1 << 4)) != 0 {
|
||||||
namespace = Namespaces.Message.ScheduledCloud
|
namespace = Namespaces.Message.ScheduledCloud
|
||||||
@ -136,7 +136,7 @@ extension Api.Message {
|
|||||||
|
|
||||||
var peerId: PeerId? {
|
var peerId: PeerId? {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, _, _, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, messagePeerId, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
let peerId: PeerId = messagePeerId.peerId
|
let peerId: PeerId = messagePeerId.peerId
|
||||||
return peerId
|
return peerId
|
||||||
case let .messageEmpty(_, _, peerId):
|
case let .messageEmpty(_, _, peerId):
|
||||||
@ -149,7 +149,7 @@ extension Api.Message {
|
|||||||
|
|
||||||
var timestamp: Int32? {
|
var timestamp: Int32? {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, _, _, _, _, _, _, _, _, _, _, date, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, _, _, _, _, _, _, date, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
return date
|
return date
|
||||||
case let .messageService(_, _, _, _, _, _, date, _, _, _):
|
case let .messageService(_, _, _, _, _, _, date, _, _, _):
|
||||||
return date
|
return date
|
||||||
@ -160,7 +160,7 @@ extension Api.Message {
|
|||||||
|
|
||||||
var preCachedResources: [(MediaResource, Data)]? {
|
var preCachedResources: [(MediaResource, Data)]? {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, _, _, _, _, _, _, _, _, _, _, _, _, media, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, _, _, _, _, _, _, _, _, media, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
return media?.preCachedResources
|
return media?.preCachedResources
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
@ -169,7 +169,7 @@ extension Api.Message {
|
|||||||
|
|
||||||
var preCachedStories: [StoryId: Api.StoryItem]? {
|
var preCachedStories: [StoryId: Api.StoryItem]? {
|
||||||
switch self {
|
switch self {
|
||||||
case let .message(_, _, _, _, _, _, _, _, _, _, _, _, _, media, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
case let .message(_, _, _, _, _, _, _, _, _, _, _, _, _, media, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _):
|
||||||
return media?.preCachedStories
|
return media?.preCachedStories
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -0,0 +1,84 @@
|
|||||||
|
import Foundation
|
||||||
|
import Postbox
|
||||||
|
import TelegramApi
|
||||||
|
|
||||||
|
public final class SuggestedPostMessageAttribute: Equatable, MessageAttribute {
|
||||||
|
public enum State: Int32 {
|
||||||
|
case accepted = 0
|
||||||
|
case rejected = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
public let amount: Int64
|
||||||
|
public let timestamp: Int32?
|
||||||
|
public let state: State?
|
||||||
|
|
||||||
|
public init(amount: Int64, timestamp: Int32?, state: State?) {
|
||||||
|
self.amount = amount
|
||||||
|
self.timestamp = timestamp
|
||||||
|
self.state = state
|
||||||
|
}
|
||||||
|
|
||||||
|
required public init(decoder: PostboxDecoder) {
|
||||||
|
self.amount = decoder.decodeInt64ForKey("am", orElse: 0)
|
||||||
|
self.timestamp = decoder.decodeOptionalInt32ForKey("ts")
|
||||||
|
self.state = decoder.decodeOptionalInt32ForKey("st").flatMap(State.init(rawValue:))
|
||||||
|
}
|
||||||
|
|
||||||
|
public func encode(_ encoder: PostboxEncoder) {
|
||||||
|
encoder.encodeInt64(self.amount, forKey: "am")
|
||||||
|
if let timestamp = self.timestamp {
|
||||||
|
encoder.encodeInt32(timestamp, forKey: "ts")
|
||||||
|
} else {
|
||||||
|
encoder.encodeNil(forKey: "ts")
|
||||||
|
}
|
||||||
|
if let state = self.state {
|
||||||
|
encoder.encodeInt32(state.rawValue, forKey: "st")
|
||||||
|
} else {
|
||||||
|
encoder.encodeNil(forKey: "st")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func ==(lhs: SuggestedPostMessageAttribute, rhs: SuggestedPostMessageAttribute) -> Bool {
|
||||||
|
if lhs.amount != rhs.amount {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if lhs.timestamp != rhs.timestamp {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if lhs.state != rhs.state {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension SuggestedPostMessageAttribute {
|
||||||
|
convenience init(apiSuggestedPost: Api.SuggestedPost) {
|
||||||
|
switch apiSuggestedPost {
|
||||||
|
case let .suggestedPost(flags, starsAmount, scheduleDate):
|
||||||
|
var state: State?
|
||||||
|
if (flags & (1 << 1)) != 0 {
|
||||||
|
state = .accepted
|
||||||
|
} else if (flags & (1 << 2)) != 0 {
|
||||||
|
state = .rejected
|
||||||
|
}
|
||||||
|
self.init(amount: starsAmount, timestamp: scheduleDate, state: state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func apiSuggestedPost() -> Api.SuggestedPost {
|
||||||
|
var flags: Int32 = 0
|
||||||
|
if let state = self.state {
|
||||||
|
switch state {
|
||||||
|
case .accepted:
|
||||||
|
flags |= 1 << 1
|
||||||
|
case .rejected:
|
||||||
|
flags |= 1 << 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if self.timestamp != nil {
|
||||||
|
flags |= 1 << 0
|
||||||
|
}
|
||||||
|
return .suggestedPost(flags: flags, starsAmount: self.amount, scheduleDate: self.timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -111,6 +111,53 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum SuggestedPostApprovalStatus: PostboxCoding, Equatable {
|
||||||
|
public enum RejectionReason {
|
||||||
|
case generic
|
||||||
|
case lowBalance
|
||||||
|
}
|
||||||
|
|
||||||
|
case approved
|
||||||
|
case rejected(reason: RejectionReason)
|
||||||
|
|
||||||
|
public init(decoder: PostboxDecoder) {
|
||||||
|
switch decoder.decodeInt32ForKey("_t", orElse: 0) {
|
||||||
|
case 0:
|
||||||
|
self = .approved
|
||||||
|
case 1:
|
||||||
|
let reason: RejectionReason
|
||||||
|
switch decoder.decodeInt32ForKey("rs", orElse: 0) {
|
||||||
|
case 0:
|
||||||
|
reason = .generic
|
||||||
|
case 1:
|
||||||
|
reason = .lowBalance
|
||||||
|
default:
|
||||||
|
assertionFailure()
|
||||||
|
reason = .generic
|
||||||
|
}
|
||||||
|
self = .rejected(reason: reason)
|
||||||
|
default:
|
||||||
|
assertionFailure()
|
||||||
|
self = .rejected(reason: .generic)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func encode(_ encoder: PostboxEncoder) {
|
||||||
|
switch self {
|
||||||
|
case .approved:
|
||||||
|
encoder.encodeInt32(0, forKey: "_t")
|
||||||
|
case let .rejected(reason):
|
||||||
|
encoder.encodeInt32(1, forKey: "_t")
|
||||||
|
switch reason {
|
||||||
|
case .generic:
|
||||||
|
encoder.encodeInt32(0, forKey: "rs")
|
||||||
|
case .lowBalance:
|
||||||
|
encoder.encodeInt32(1, forKey: "rs")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case unknown
|
case unknown
|
||||||
case groupCreated(title: String)
|
case groupCreated(title: String)
|
||||||
case addedMembers(peerIds: [PeerId])
|
case addedMembers(peerIds: [PeerId])
|
||||||
@ -162,6 +209,7 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
|
|||||||
case conferenceCall(ConferenceCall)
|
case conferenceCall(ConferenceCall)
|
||||||
case todoCompletions(completed: [Int32], incompleted: [Int32])
|
case todoCompletions(completed: [Int32], incompleted: [Int32])
|
||||||
case todoAppendTasks([TelegramMediaTodo.Item])
|
case todoAppendTasks([TelegramMediaTodo.Item])
|
||||||
|
case suggestedPostApprovalStatus(status: SuggestedPostApprovalStatus)
|
||||||
|
|
||||||
public init(decoder: PostboxDecoder) {
|
public init(decoder: PostboxDecoder) {
|
||||||
let rawValue: Int32 = decoder.decodeInt32ForKey("_rawValue", orElse: 0)
|
let rawValue: Int32 = decoder.decodeInt32ForKey("_rawValue", orElse: 0)
|
||||||
@ -306,6 +354,9 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
|
|||||||
self = .todoAppendTasks(
|
self = .todoAppendTasks(
|
||||||
decoder.decodeObjectArrayWithDecoderForKey("tasks")
|
decoder.decodeObjectArrayWithDecoderForKey("tasks")
|
||||||
)
|
)
|
||||||
|
case 51:
|
||||||
|
let status: SuggestedPostApprovalStatus? = decoder.decodeObjectForKey("st", decoder: { SuggestedPostApprovalStatus(decoder: $0) }) as? SuggestedPostApprovalStatus
|
||||||
|
self = .suggestedPostApprovalStatus(status: status ?? .rejected(reason: .generic))
|
||||||
default:
|
default:
|
||||||
self = .unknown
|
self = .unknown
|
||||||
}
|
}
|
||||||
@ -716,6 +767,9 @@ public enum TelegramMediaActionType: PostboxCoding, Equatable {
|
|||||||
case let .todoAppendTasks(tasks):
|
case let .todoAppendTasks(tasks):
|
||||||
encoder.encodeInt32(50, forKey: "_rawValue")
|
encoder.encodeInt32(50, forKey: "_rawValue")
|
||||||
encoder.encodeObjectArray(tasks, forKey: "tasks")
|
encoder.encodeObjectArray(tasks, forKey: "tasks")
|
||||||
|
case let .suggestedPostApprovalStatus(status):
|
||||||
|
encoder.encodeInt32(51, forKey: "_rawValue")
|
||||||
|
encoder.encodeObject(status, forKey: "st")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1587,5 +1587,43 @@ public extension TelegramEngine {
|
|||||||
public func requestMessageAuthor(id: EngineMessage.Id) -> Signal<EnginePeer?, NoError> {
|
public func requestMessageAuthor(id: EngineMessage.Id) -> Signal<EnginePeer?, NoError> {
|
||||||
return _internal_requestMessageAuthor(account: self.account, id: id)
|
return _internal_requestMessageAuthor(account: self.account, id: id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func monoforumPerformSuggestedPostAction(id: EngineMessage.Id, approve: Bool, timestamp: Int32?) -> Signal<Never, NoError> {
|
||||||
|
return _internal_monoforumPerformSuggestedPostAction(account: self.account, id: id, approve: approve, timestamp: timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func _internal_monoforumPerformSuggestedPostAction(account: Account, id: EngineMessage.Id, approve: Bool, timestamp: Int32?) -> Signal<Never, NoError> {
|
||||||
|
return account.postbox.transaction { transaction -> Api.InputPeer? in
|
||||||
|
return transaction.getPeer(id.peerId).flatMap(apiInputPeer)
|
||||||
|
}
|
||||||
|
|> mapToSignal { inputPeer -> Signal<Never, NoError> in
|
||||||
|
guard let inputPeer else {
|
||||||
|
return .complete()
|
||||||
|
}
|
||||||
|
if id.namespace != Namespaces.Message.Cloud {
|
||||||
|
return .complete()
|
||||||
|
}
|
||||||
|
|
||||||
|
var flags: Int32 = 0
|
||||||
|
if !approve {
|
||||||
|
flags |= 1 << 1
|
||||||
|
}
|
||||||
|
if timestamp != nil {
|
||||||
|
flags |= 1 << 0
|
||||||
|
}
|
||||||
|
return account.network.request(Api.functions.messages.toggleSuggestedPostApproval(flags: flags, peer: inputPeer, msgId: id.id, scheduleDate: timestamp))
|
||||||
|
|> map(Optional.init)
|
||||||
|
|> `catch` { _ -> Signal<Api.Updates?, NoError> in
|
||||||
|
return .single(nil)
|
||||||
|
}
|
||||||
|
|> mapToSignal { updates -> Signal<Never, NoError> in
|
||||||
|
if let updates {
|
||||||
|
account.stateManager.addUpdates(updates)
|
||||||
|
}
|
||||||
|
|
||||||
|
return .complete()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1380,6 +1380,31 @@ public func universalServiceMessageString(presentationData: (PresentationTheme,
|
|||||||
}
|
}
|
||||||
attributedString = addAttributesToStringWithRanges(resultString._tuple, body: bodyAttributes, argumentAttributes: attributes)
|
attributedString = addAttributesToStringWithRanges(resultString._tuple, body: bodyAttributes, argumentAttributes: attributes)
|
||||||
}
|
}
|
||||||
|
case let .suggestedPostApprovalStatus(status):
|
||||||
|
//TODO:localize
|
||||||
|
var messageText = ""
|
||||||
|
for attribute in message.attributes {
|
||||||
|
if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] {
|
||||||
|
messageText = message.text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let string: String
|
||||||
|
switch status {
|
||||||
|
case .approved:
|
||||||
|
if messageText.isEmpty {
|
||||||
|
string = "Your message was approved"
|
||||||
|
} else {
|
||||||
|
string = "Your message \"\(messageText)\" was approved"
|
||||||
|
}
|
||||||
|
case .rejected:
|
||||||
|
if messageText.isEmpty {
|
||||||
|
string = "Your message was rejected"
|
||||||
|
} else {
|
||||||
|
string = "Your message \"\(messageText)\" was rejected"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attributedString = NSAttributedString(string: string, font: titleFont, textColor: primaryTextColor)
|
||||||
case .unknown:
|
case .unknown:
|
||||||
attributedString = nil
|
attributedString = nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -385,11 +385,11 @@ public final class ChatButtonKeyboardInputNode: ChatInputNode {
|
|||||||
self.controllerInteraction.shareAccountContact()
|
self.controllerInteraction.shareAccountContact()
|
||||||
case .openWebApp:
|
case .openWebApp:
|
||||||
if let message = self.message {
|
if let message = self.message {
|
||||||
self.controllerInteraction.requestMessageActionCallback(message.id, nil, true, false)
|
self.controllerInteraction.requestMessageActionCallback(message, nil, true, false)
|
||||||
}
|
}
|
||||||
case let .callback(requiresPassword, data):
|
case let .callback(requiresPassword, data):
|
||||||
if let message = self.message {
|
if let message = self.message {
|
||||||
self.controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
self.controllerInteraction.requestMessageActionCallback(message, data, false, requiresPassword)
|
||||||
}
|
}
|
||||||
case let .switchInline(samePeer, query, _):
|
case let .switchInline(samePeer, query, _):
|
||||||
if let message = message {
|
if let message = message {
|
||||||
|
|||||||
@ -2789,6 +2789,35 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
|
|||||||
maxContentWidth = max(maxContentWidth, minWidth)
|
maxContentWidth = max(maxContentWidth, minWidth)
|
||||||
actionButtonsFinalize = buttonsLayout
|
actionButtonsFinalize = buttonsLayout
|
||||||
|
|
||||||
|
lastNodeTopPosition = .None(.Both)
|
||||||
|
} else if incoming, let channel = item.message.peers[item.message.id.peerId] as? TelegramChannel, channel.isMonoForum, item.chatLocation.threadId != nil, let linkedMonoforumId = channel.linkedMonoforumId, let mainChannel = item.message.peers[linkedMonoforumId] as? TelegramChannel, mainChannel.hasPermission(.sendSomething), let attribute = item.message.attributes.first(where: { $0 is SuggestedPostMessageAttribute }) as? SuggestedPostMessageAttribute, attribute.state == nil {
|
||||||
|
//TODO:localize
|
||||||
|
var buttonDecline: UInt8 = 0
|
||||||
|
var buttonApprove: UInt8 = 1
|
||||||
|
var buttonSuggestChanges: UInt8 = 2
|
||||||
|
|
||||||
|
let (minWidth, buttonsLayout) = actionButtonsLayout(
|
||||||
|
item.context,
|
||||||
|
item.presentationData.theme,
|
||||||
|
item.presentationData.chatBubbleCorners,
|
||||||
|
item.presentationData.strings,
|
||||||
|
item.controllerInteraction.presentationContext.backgroundNode,
|
||||||
|
ReplyMarkupMessageAttribute(
|
||||||
|
rows: [
|
||||||
|
ReplyMarkupRow(buttons: [
|
||||||
|
ReplyMarkupButton(title: "Decline", titleWhenForwarded: nil, action: .callback(requiresPassword: false, data: MemoryBuffer(data: Data(bytes: &buttonDecline, count: 1)))),
|
||||||
|
ReplyMarkupButton(title: "Approve", titleWhenForwarded: nil, action: .callback(requiresPassword: false, data: MemoryBuffer(data: Data(bytes: &buttonApprove, count: 1))))
|
||||||
|
]),
|
||||||
|
ReplyMarkupRow(buttons: [
|
||||||
|
ReplyMarkupButton(title: "Suggest Changes", titleWhenForwarded: nil, action: .callback(requiresPassword: false, data: MemoryBuffer(data: Data(bytes: &buttonSuggestChanges, count: 1))))
|
||||||
|
])
|
||||||
|
],
|
||||||
|
flags: [],
|
||||||
|
placeholder: nil
|
||||||
|
), item.message, maximumNodeWidth)
|
||||||
|
maxContentWidth = max(maxContentWidth, minWidth)
|
||||||
|
actionButtonsFinalize = buttonsLayout
|
||||||
|
|
||||||
lastNodeTopPosition = .None(.Both)
|
lastNodeTopPosition = .None(.Both)
|
||||||
} else if let replyMarkup = replyMarkup, !item.presentationData.isPreview {
|
} else if let replyMarkup = replyMarkup, !item.presentationData.isPreview {
|
||||||
let (minWidth, buttonsLayout) = actionButtonsLayout(item.context, item.presentationData.theme, item.presentationData.chatBubbleCorners, item.presentationData.strings, item.controllerInteraction.presentationContext.backgroundNode, replyMarkup, item.message, maximumNodeWidth)
|
let (minWidth, buttonsLayout) = actionButtonsLayout(item.context, item.presentationData.theme, item.presentationData.chatBubbleCorners, item.presentationData.strings, item.controllerInteraction.presentationContext.backgroundNode, replyMarkup, item.message, maximumNodeWidth)
|
||||||
|
|||||||
@ -28,14 +28,14 @@ public final class ChatMessageGameBubbleContentNode: ChatMessageBubbleContentNod
|
|||||||
self.addSubnode(self.contentNode)
|
self.addSubnode(self.contentNode)
|
||||||
self.contentNode.openMedia = { [weak self] _ in
|
self.contentNode.openMedia = { [weak self] _ in
|
||||||
if let strongSelf = self, let item = strongSelf.item {
|
if let strongSelf = self, let item = strongSelf.item {
|
||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, nil, true, false)
|
item.controllerInteraction.requestMessageActionCallback(item.message, nil, true, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override public func accessibilityActivate() -> Bool {
|
override public func accessibilityActivate() -> Bool {
|
||||||
if let item = self.item {
|
if let item = self.item {
|
||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, nil, true, false)
|
item.controllerInteraction.requestMessageActionCallback(item.message, nil, true, false)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -821,9 +821,9 @@ open class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol {
|
|||||||
case .requestPhone:
|
case .requestPhone:
|
||||||
item.controllerInteraction.shareAccountContact()
|
item.controllerInteraction.shareAccountContact()
|
||||||
case .openWebApp:
|
case .openWebApp:
|
||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, nil, true, false)
|
item.controllerInteraction.requestMessageActionCallback(item.message, nil, true, false)
|
||||||
case let .callback(requiresPassword, data):
|
case let .callback(requiresPassword, data):
|
||||||
item.controllerInteraction.requestMessageActionCallback(item.message.id, data, false, requiresPassword)
|
item.controllerInteraction.requestMessageActionCallback(item.message, data, false, requiresPassword)
|
||||||
case let .switchInline(samePeer, query, peerTypes):
|
case let .switchInline(samePeer, query, peerTypes):
|
||||||
var botPeer: Peer?
|
var botPeer: Peer?
|
||||||
|
|
||||||
|
|||||||
@ -316,14 +316,14 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
let _ = context.sharedContext.navigateToForumThread(context: context, peerId: peerId, threadId: threadId, messageId: nil, navigationController: navigationController, activateInput: nil, scrollToEndIfExists: false, keepStack: .always, animated: true).startStandalone()
|
let _ = context.sharedContext.navigateToForumThread(context: context, peerId: peerId, threadId: threadId, messageId: nil, navigationController: navigationController, activateInput: nil, scrollToEndIfExists: false, keepStack: .always, animated: true).startStandalone()
|
||||||
}
|
}
|
||||||
}, tapMessage: nil, clickThroughMessage: { _, _ in }, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _, _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in return false
|
}, tapMessage: nil, clickThroughMessage: { _, _ in }, toggleMessagesSelection: { _, _ in }, sendCurrentMessage: { _, _ in }, sendMessage: { _ in }, sendSticker: { _, _, _, _, _, _, _, _, _ in return false }, sendEmoji: { _, _, _ in }, sendGif: { _, _, _, _, _ in return false }, sendBotContextResultAsGif: { _, _, _, _, _, _ in return false
|
||||||
}, requestMessageActionCallback: { [weak self] messageId, _, _, _ in
|
}, requestMessageActionCallback: { [weak self] message, _, _, _ in
|
||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if self.expandedDeletedMessages.contains(messageId) {
|
if self.expandedDeletedMessages.contains(message.id) {
|
||||||
self.expandedDeletedMessages.remove(messageId)
|
self.expandedDeletedMessages.remove(message.id)
|
||||||
} else {
|
} else {
|
||||||
self.expandedDeletedMessages.insert(messageId)
|
self.expandedDeletedMessages.insert(message.id)
|
||||||
}
|
}
|
||||||
}, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _, _ in }, openUrl: { [weak self] url in
|
}, requestMessageActionUrlAuth: { _, _ in }, activateSwitchInline: { _, _, _ in }, openUrl: { [weak self] url in
|
||||||
self?.openUrl(url.url, progress: url.progress)
|
self?.openUrl(url.url, progress: url.progress)
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import UIKit
|
|||||||
import Postbox
|
import Postbox
|
||||||
import SwiftSignalKit
|
import SwiftSignalKit
|
||||||
import AsyncDisplayKit
|
import AsyncDisplayKit
|
||||||
|
import Postbox
|
||||||
import TelegramCore
|
import TelegramCore
|
||||||
import Display
|
import Display
|
||||||
import TelegramUIPreferences
|
import TelegramUIPreferences
|
||||||
@ -192,7 +193,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
|||||||
public let sendEmoji: (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void
|
public let sendEmoji: (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void
|
||||||
public let sendGif: (FileMediaReference, UIView, CGRect, Bool, Bool) -> Bool
|
public let sendGif: (FileMediaReference, UIView, CGRect, Bool, Bool) -> Bool
|
||||||
public let sendBotContextResultAsGif: (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool
|
public let sendBotContextResultAsGif: (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool
|
||||||
public let requestMessageActionCallback: (MessageId, MemoryBuffer?, Bool, Bool) -> Void
|
public let requestMessageActionCallback: (Message, MemoryBuffer?, Bool, Bool) -> Void
|
||||||
public let requestMessageActionUrlAuth: (String, MessageActionUrlSubject) -> Void
|
public let requestMessageActionUrlAuth: (String, MessageActionUrlSubject) -> Void
|
||||||
public let activateSwitchInline: (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void
|
public let activateSwitchInline: (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void
|
||||||
public let openUrl: (OpenUrl) -> Void
|
public let openUrl: (OpenUrl) -> Void
|
||||||
@ -356,7 +357,7 @@ public final class ChatControllerInteraction: ChatControllerInteractionProtocol
|
|||||||
sendEmoji: @escaping (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void,
|
sendEmoji: @escaping (String, ChatTextInputTextCustomEmojiAttribute, Bool) -> Void,
|
||||||
sendGif: @escaping (FileMediaReference, UIView, CGRect, Bool, Bool) -> Bool,
|
sendGif: @escaping (FileMediaReference, UIView, CGRect, Bool, Bool) -> Bool,
|
||||||
sendBotContextResultAsGif: @escaping (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool,
|
sendBotContextResultAsGif: @escaping (ChatContextResultCollection, ChatContextResult, UIView, CGRect, Bool, Bool) -> Bool,
|
||||||
requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool, Bool) -> Void,
|
requestMessageActionCallback: @escaping (Message, MemoryBuffer?, Bool, Bool) -> Void,
|
||||||
requestMessageActionUrlAuth: @escaping (String, MessageActionUrlSubject) -> Void,
|
requestMessageActionUrlAuth: @escaping (String, MessageActionUrlSubject) -> Void,
|
||||||
activateSwitchInline: @escaping (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void,
|
activateSwitchInline: @escaping (PeerId?, String, ReplyMarkupButtonAction.PeerTypes?) -> Void,
|
||||||
openUrl: @escaping (OpenUrl) -> Void,
|
openUrl: @escaping (OpenUrl) -> Void,
|
||||||
|
|||||||
@ -164,9 +164,10 @@ private final class SheetContent: CombinedComponent {
|
|||||||
//TODO:localize
|
//TODO:localize
|
||||||
titleString = "Suggest Terms"
|
titleString = "Suggest Terms"
|
||||||
amountTitle = "ENTER A PRICE IN STARS"
|
amountTitle = "ENTER A PRICE IN STARS"
|
||||||
amountPlaceholder = environment.strings.Stars_SendMessage_AdjustmentPlaceholder
|
amountPlaceholder = "Price"
|
||||||
|
|
||||||
minAmount = StarsAmount(value: 1, nanos: 0)
|
minAmount = StarsAmount(value: 1, nanos: 0)
|
||||||
|
//TODO:release
|
||||||
maxAmount = StarsAmount(value: resaleConfiguration.paidMessageMaxAmount, nanos: 0)
|
maxAmount = StarsAmount(value: resaleConfiguration.paidMessageMaxAmount, nanos: 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1592,7 +1592,7 @@ extension ChatControllerImpl {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }) }, completion: { t in
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }) }, completion: { t in
|
||||||
completion(t, {})
|
completion(t, {})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -2338,7 +2338,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -2362,7 +2362,7 @@ extension ChatControllerImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
||||||
})
|
})
|
||||||
|
|
||||||
if !self.presentationInterfaceState.isPremium {
|
if !self.presentationInterfaceState.isPremium {
|
||||||
@ -2378,7 +2378,7 @@ extension ChatControllerImpl {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
||||||
})
|
})
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|
||||||
|
|||||||
@ -227,7 +227,7 @@ extension ChatControllerImpl {
|
|||||||
self.chatDisplayNode.collapseInput()
|
self.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedMediaDraftState(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedMediaDraftState(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, usedCorrelationId ? correlationId : nil)
|
}, usedCorrelationId ? correlationId : nil)
|
||||||
@ -393,7 +393,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, usedCorrelationId ? correlationId : nil)
|
}, usedCorrelationId ? correlationId : nil)
|
||||||
@ -718,7 +718,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedMediaDraftState(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedMediaDraftState(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
|
|
||||||
strongSelf.updateDownButtonVisibility()
|
strongSelf.updateDownButtonVisibility()
|
||||||
|
|||||||
@ -60,7 +60,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -83,7 +83,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -118,7 +118,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -141,7 +141,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|||||||
@ -481,7 +481,7 @@ private func generateChatReplyOptionItems(selfController: ChatControllerImpl, ch
|
|||||||
}
|
}
|
||||||
var replySubject = replySubject
|
var replySubject = replySubject
|
||||||
replySubject.quote = nil
|
replySubject.quote = nil
|
||||||
selfController.updateChatPresentationInterfaceState(animated: false, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withoutSelectionState() }).updatedSearch(nil) })
|
selfController.updateChatPresentationInterfaceState(animated: false, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withoutSelectionState() }).updatedSearch(nil) })
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -675,7 +675,7 @@ func moveReplyToChat(selfController: ChatControllerImpl, peerId: EnginePeer.Id,
|
|||||||
guard let selfController else {
|
guard let selfController else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
selfController.updateChatPresentationInterfaceState(animated: false, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withoutSelectionState() }) })
|
selfController.updateChatPresentationInterfaceState(animated: false, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withoutSelectionState() }) })
|
||||||
|
|
||||||
let navigationController: NavigationController?
|
let navigationController: NavigationController?
|
||||||
if let parentController = selfController.parentController {
|
if let parentController = selfController.parentController {
|
||||||
|
|||||||
@ -267,7 +267,7 @@ func chatMessageDisplaySendMessageOptions(selfController: ChatControllerImpl, no
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
selfController.updateChatPresentationInterfaceState(animated: true, interactive: false, saveInterfaceState: selfController.presentationInterfaceState.subject != .scheduledMessages, {
|
selfController.updateChatPresentationInterfaceState(animated: true, interactive: false, saveInterfaceState: selfController.presentationInterfaceState.subject != .scheduledMessages, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))) }
|
||||||
})
|
})
|
||||||
selfController.openScheduledMessages()
|
selfController.openScheduledMessages()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2056,7 +2056,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -2118,7 +2118,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
var current = current
|
var current = current
|
||||||
current = current.updatedInterfaceState { interfaceState in
|
current = current.updatedInterfaceState { interfaceState in
|
||||||
var interfaceState = interfaceState
|
var interfaceState = interfaceState
|
||||||
interfaceState = interfaceState.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil)
|
interfaceState = interfaceState.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil)
|
||||||
if clearInput {
|
if clearInput {
|
||||||
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString()))
|
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString()))
|
||||||
}
|
}
|
||||||
@ -2255,7 +2255,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }.updatedInputMode { current in
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }.updatedInputMode { current in
|
||||||
if case let .media(mode, maybeExpanded, focused) = current, maybeExpanded != nil {
|
if case let .media(mode, maybeExpanded, focused) = current, maybeExpanded != nil {
|
||||||
return .media(mode: mode, expanded: nil, focused: focused)
|
return .media(mode: mode, expanded: nil, focused: focused)
|
||||||
}
|
}
|
||||||
@ -2305,15 +2305,50 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
strongSelf.enqueueChatContextResult(collection, result, hideVia: true, closeMediaInput: true, silentPosting: silentPosting, resetTextInputState: resetTextInputState)
|
strongSelf.enqueueChatContextResult(collection, result, hideVia: true, closeMediaInput: true, silentPosting: silentPosting, resetTextInputState: resetTextInputState)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}, requestMessageActionCallback: { [weak self] messageId, data, isGame, requiresPassword in
|
}, requestMessageActionCallback: { [weak self] message, data, isGame, requiresPassword in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let messageId = message.id
|
||||||
|
|
||||||
guard strongSelf.presentationInterfaceState.subject != .scheduledMessages else {
|
guard strongSelf.presentationInterfaceState.subject != .scheduledMessages else {
|
||||||
strongSelf.present(textAlertController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, title: nil, text: strongSelf.presentationData.strings.ScheduledMessages_BotActionUnavailable, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {})]), in: .window(.root))
|
strongSelf.present(textAlertController(context: strongSelf.context, updatedPresentationData: strongSelf.updatedPresentationData, title: nil, text: strongSelf.presentationData.strings.ScheduledMessages_BotActionUnavailable, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.presentationData.strings.Common_OK, action: {})]), in: .window(.root))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let attribute = message.attributes.first(where: { $0 is SuggestedPostMessageAttribute }) as? SuggestedPostMessageAttribute {
|
||||||
|
guard let data = data?.makeData() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if data.count != 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let buttonType = data.withUnsafeBytes { buffer -> UInt8 in
|
||||||
|
return buffer.baseAddress!.assumingMemoryBound(to: UInt8.self).pointee
|
||||||
|
}
|
||||||
|
|
||||||
|
if message.effectivelyIncoming(strongSelf.context.account.peerId) {
|
||||||
|
switch buttonType {
|
||||||
|
case 0:
|
||||||
|
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, approve: false, timestamp: nil).startStandalone()
|
||||||
|
case 1:
|
||||||
|
var timestamp: Int32?
|
||||||
|
if attribute.timestamp == nil {
|
||||||
|
timestamp = Int32(Date().timeIntervalSince1970) + 1 * 60 * 60
|
||||||
|
}
|
||||||
|
let _ = strongSelf.context.engine.messages.monoforumPerformSuggestedPostAction(id: message.id, approve: true, timestamp: timestamp).startStandalone()
|
||||||
|
case 2:
|
||||||
|
//suggest changes
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let _ = (strongSelf.context.engine.data.get(TelegramEngine.EngineData.Item.Messages.Message(id: messageId))
|
let _ = (strongSelf.context.engine.data.get(TelegramEngine.EngineData.Item.Messages.Message(id: messageId))
|
||||||
|> deliverOnMainQueue).startStandalone(next: { message in
|
|> deliverOnMainQueue).startStandalone(next: { message in
|
||||||
guard let strongSelf = self, let message = message else {
|
guard let strongSelf = self, let message = message else {
|
||||||
@ -2705,7 +2740,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))).withUpdatedComposeDisableUrlPreviews([]) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -3382,7 +3417,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}) { [weak self] in
|
}) { [weak self] in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, saveInterfaceState: strongSelf.presentationInterfaceState.subject != .scheduledMessages, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, saveInterfaceState: strongSelf.presentationInterfaceState.subject != .scheduledMessages, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: ""))) }
|
||||||
})
|
})
|
||||||
|
|
||||||
if strongSelf.presentationInterfaceState.subject != .scheduledMessages && time != scheduleWhenOnlineTimestamp {
|
if strongSelf.presentationInterfaceState.subject != .scheduledMessages && time != scheduleWhenOnlineTimestamp {
|
||||||
@ -3568,7 +3603,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
completion(nil)
|
completion(nil)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }) }, completion: completion)
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { $0.updatedInterfaceState({ $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }) }, completion: completion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, displayImportedMessageTooltip: { [weak self] _ in
|
}, displayImportedMessageTooltip: { [weak self] _ in
|
||||||
@ -7058,7 +7093,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
}
|
}
|
||||||
interfaceState = interfaceState.withUpdatedInputLanguage(self.chatDisplayNode.currentTextInputLanguage)
|
interfaceState = interfaceState.withUpdatedInputLanguage(self.chatDisplayNode.currentTextInputLanguage)
|
||||||
/*if case .peer = self.chatLocation, let channel = self.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.isForumOrMonoForum {
|
/*if case .peer = self.chatLocation, let channel = self.presentationInterfaceState.renderedPeer?.peer as? TelegramChannel, channel.isForumOrMonoForum {
|
||||||
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState()).withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil)
|
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState()).withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil)
|
||||||
}*/
|
}*/
|
||||||
let _ = ChatInterfaceState.update(engine: self.context.engine, peerId: peerId, threadId: threadId, { _ in
|
let _ = ChatInterfaceState.update(engine: self.context.engine, peerId: peerId, threadId: threadId, { _ in
|
||||||
return interfaceState
|
return interfaceState
|
||||||
@ -7925,6 +7960,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
attributes.append(EffectMessageAttribute(id: sendMessageEffect))
|
attributes.append(EffectMessageAttribute(id: sendMessageEffect))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if let postSuggestionState = self.presentationInterfaceState.interfaceState.postSuggestionState {
|
||||||
|
if attributes.first(where: { $0 is SuggestedPostMessageAttribute }) == nil {
|
||||||
|
attributes.append(SuggestedPostMessageAttribute(
|
||||||
|
amount: postSuggestionState.price,
|
||||||
|
timestamp: postSuggestionState.timestamp,
|
||||||
|
state: nil
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
return attributes
|
return attributes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8153,7 +8197,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
completionImpl?()
|
completionImpl?()
|
||||||
@ -8199,7 +8243,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
|||||||
if resetTextInputState {
|
if resetTextInputState {
|
||||||
state = state.updatedInterfaceState { interfaceState in
|
state = state.updatedInterfaceState { interfaceState in
|
||||||
var interfaceState = interfaceState
|
var interfaceState = interfaceState
|
||||||
interfaceState = interfaceState.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil)
|
interfaceState = interfaceState.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil)
|
||||||
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: "")))
|
interfaceState = interfaceState.withUpdatedComposeInputState(ChatTextInputState(inputText: NSAttributedString(string: "")))
|
||||||
interfaceState = interfaceState.withUpdatedComposeDisableUrlPreviews([])
|
interfaceState = interfaceState.withUpdatedComposeDisableUrlPreviews([])
|
||||||
return interfaceState
|
return interfaceState
|
||||||
|
|||||||
@ -4718,7 +4718,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
|||||||
|
|
||||||
strongSelf.ignoreUpdateHeight = true
|
strongSelf.ignoreUpdateHeight = true
|
||||||
textInputPanelNode.text = ""
|
textInputPanelNode.text = ""
|
||||||
strongSelf.requestUpdateChatInterfaceState(.immediate, true, { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeDisableUrlPreviews([]) })
|
strongSelf.requestUpdateChatInterfaceState(.immediate, true, { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil).withUpdatedForwardMessageIds(nil).withUpdatedForwardOptionsState(nil).withUpdatedComposeDisableUrlPreviews([]) })
|
||||||
strongSelf.ignoreUpdateHeight = false
|
strongSelf.ignoreUpdateHeight = false
|
||||||
}
|
}
|
||||||
}, usedCorrelationId)
|
}, usedCorrelationId)
|
||||||
|
|||||||
@ -418,7 +418,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -483,7 +483,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -560,7 +560,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -596,7 +596,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -684,7 +684,7 @@ extension ChatControllerImpl {
|
|||||||
controller.completion = { [weak self] in
|
controller.completion = { [weak self] in
|
||||||
if let strongSelf = self {
|
if let strongSelf = self {
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
strongSelf.chatDisplayNode.historyNode.scrollToEndOfHistory()
|
strongSelf.chatDisplayNode.historyNode.scrollToEndOfHistory()
|
||||||
}
|
}
|
||||||
@ -1180,7 +1180,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -1633,7 +1633,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -1683,7 +1683,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -1749,7 +1749,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -1774,7 +1774,7 @@ extension ChatControllerImpl {
|
|||||||
strongSelf.chatDisplayNode.collapseInput()
|
strongSelf.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -2015,7 +2015,7 @@ extension ChatControllerImpl {
|
|||||||
self.chatDisplayNode.collapseInput()
|
self.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
@ -2072,7 +2072,7 @@ extension ChatControllerImpl {
|
|||||||
self.chatDisplayNode.collapseInput()
|
self.chatDisplayNode.collapseInput()
|
||||||
|
|
||||||
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
self.updateChatPresentationInterfaceState(animated: true, interactive: false, {
|
||||||
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil) }
|
$0.updatedInterfaceState { $0.withUpdatedReplyMessageSubject(nil).withUpdatedSendMessageEffect(nil).withUpdatedPostSuggestionState(nil) }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|||||||
@ -935,10 +935,10 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode {
|
|||||||
controllerInteraction.shareAccountContact()
|
controllerInteraction.shareAccountContact()
|
||||||
return
|
return
|
||||||
case .openWebApp:
|
case .openWebApp:
|
||||||
controllerInteraction.requestMessageActionCallback(message.id, nil, true, false)
|
controllerInteraction.requestMessageActionCallback(message, nil, true, false)
|
||||||
return
|
return
|
||||||
case let .callback(requiresPassword, data):
|
case let .callback(requiresPassword, data):
|
||||||
controllerInteraction.requestMessageActionCallback(message.id, data, false, requiresPassword)
|
controllerInteraction.requestMessageActionCallback(message, data, false, requiresPassword)
|
||||||
return
|
return
|
||||||
case let .switchInline(samePeer, query, peerTypes):
|
case let .switchInline(samePeer, query, peerTypes):
|
||||||
var botPeer: Peer?
|
var botPeer: Peer?
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user