diff --git a/TelegramCore/AccountStateManagementUtils.swift b/TelegramCore/AccountStateManagementUtils.swift index 80ef3e6ff2..12cd49780e 100644 --- a/TelegramCore/AccountStateManagementUtils.swift +++ b/TelegramCore/AccountStateManagementUtils.swift @@ -1369,6 +1369,8 @@ private func resolveAssociatedMessages(network: Network, state: AccountMutableSt return (messages, chats, users) case let .messagesSlice(_, _, _, messages, chats, users): return (messages, chats, users) + case let .messagesSliceLegacy(_, _, messages, chats, users): + return (messages, chats, users) case let .channelMessages(_, _, _, messages, chats, users): return (messages, chats, users) case .messagesNotModified: diff --git a/TelegramCore/AccountViewTracker.swift b/TelegramCore/AccountViewTracker.swift index 79b3694a4c..9a0373e531 100644 --- a/TelegramCore/AccountViewTracker.swift +++ b/TelegramCore/AccountViewTracker.swift @@ -92,6 +92,10 @@ private func fetchWebpage(account: Account, messageId: MessageId) -> Signal Any?] = { dict[1951620897] = { return Api.messages.Messages.parse_messagesNotModified($0) } dict[-1725551049] = { return Api.messages.Messages.parse_channelMessages($0) } dict[-923939298] = { return Api.messages.Messages.parse_messagesSlice($0) } + dict[-1497072982] = { return Api.messages.Messages.parse_messagesSliceLegacy($0) } dict[-1022713000] = { return Api.Invoice.parse_invoice($0) } dict[-2122045747] = { return Api.PeerSettings.parse_peerSettings($0) } dict[955951967] = { return Api.auth.SentCode.parse_sentCode($0) } @@ -2227,6 +2228,7 @@ struct messages { case messagesNotModified(count: Int32) case channelMessages(flags: Int32, pts: Int32, count: Int32, messages: [Api.Message], chats: [Api.Chat], users: [Api.User]) case messagesSlice(flags: Int32, count: Int32, nextRate: Int32?, messages: [Api.Message], chats: [Api.Chat], users: [Api.User]) + case messagesSliceLegacy(flags: Int32, count: Int32, messages: [Api.Message], chats: [Api.Chat], users: [Api.User]) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -2302,6 +2304,28 @@ struct messages { item.serialize(buffer, true) } break + case .messagesSliceLegacy(let flags, let count, let messages, let chats, let users): + if boxed { + buffer.appendInt32(-1497072982) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeInt32(count, buffer: buffer, boxed: false) + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(messages.count)) + for item in messages { + item.serialize(buffer, true) + } + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(chats.count)) + for item in chats { + item.serialize(buffer, true) + } + buffer.appendInt32(481674261) + buffer.appendInt32(Int32(users.count)) + for item in users { + item.serialize(buffer, true) + } + break } } @@ -2315,6 +2339,8 @@ struct messages { return ("channelMessages", [("flags", flags), ("pts", pts), ("count", count), ("messages", messages), ("chats", chats), ("users", users)]) case .messagesSlice(let flags, let count, let nextRate, let messages, let chats, let users): return ("messagesSlice", [("flags", flags), ("count", count), ("nextRate", nextRate), ("messages", messages), ("chats", chats), ("users", users)]) + case .messagesSliceLegacy(let flags, let count, let messages, let chats, let users): + return ("messagesSliceLegacy", [("flags", flags), ("count", count), ("messages", messages), ("chats", chats), ("users", users)]) } } @@ -2416,6 +2442,35 @@ struct messages { return nil } } + static func parse_messagesSliceLegacy(_ reader: BufferReader) -> Messages? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Int32? + _2 = reader.readInt32() + var _3: [Api.Message]? + if let _ = reader.readInt32() { + _3 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Message.self) + } + var _4: [Api.Chat]? + if let _ = reader.readInt32() { + _4 = Api.parseVector(reader, elementSignature: 0, elementType: Api.Chat.self) + } + var _5: [Api.User]? + if let _ = reader.readInt32() { + _5 = Api.parseVector(reader, elementSignature: 0, elementType: Api.User.self) + } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = _5 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 { + return Api.messages.Messages.messagesSliceLegacy(flags: _1!, count: _2!, messages: _3!, chats: _4!, users: _5!) + } + else { + return nil + } + } } enum PeerDialogs: TypeConstructorDescription { diff --git a/TelegramCore/HistoryViewChannelStateValidation.swift b/TelegramCore/HistoryViewChannelStateValidation.swift index ecb65e639b..ac1075bfe7 100644 --- a/TelegramCore/HistoryViewChannelStateValidation.swift +++ b/TelegramCore/HistoryViewChannelStateValidation.swift @@ -346,6 +346,10 @@ private func validateBatch(postbox: Postbox, network: Network, accountPeerId: Pe messages = apiMessages chats = apiChats users = apiUsers + case let .messagesSliceLegacy(_, _, messages: apiMessages, chats: apiChats, users: apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers case let .channelMessages(_, pts, _, apiMessages, apiChats, apiUsers): messages = apiMessages chats = apiChats @@ -418,6 +422,8 @@ private func validateBatch(postbox: Postbox, network: Network, accountPeerId: Pe apiMessages = messages case let .messagesSlice(_, _, _, messages, _, _): apiMessages = messages + case let .messagesSliceLegacy(_, _, messages, _, _): + apiMessages = messages case .messagesNotModified: return Set() } diff --git a/TelegramCore/Holes.swift b/TelegramCore/Holes.swift index 14e7e97c8e..956545dd90 100644 --- a/TelegramCore/Holes.swift +++ b/TelegramCore/Holes.swift @@ -78,6 +78,8 @@ func withResolvedAssociatedMessages(postbox: Postbox, source: FetchMessageHistor return (messages, chats, users) case let .messagesSlice(_, _, _, messages, chats, users): return (messages, chats, users) + case let .messagesSliceLegacy(_, _, messages, chats, users): + return (messages, chats, users) case let .channelMessages(_, _, _, messages, chats, users): return (messages, chats, users) case .messagesNotModified: @@ -257,6 +259,10 @@ func fetchMessageHistoryHole(accountPeerId: PeerId, source: FetchMessageHistoryH messages = apiMessages chats = apiChats users = apiUsers + case let .messagesSliceLegacy(_, _, messages: apiMessages, chats: apiChats, users: apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers case let .channelMessages(_, pts, _, apiMessages, apiChats, apiUsers): messages = apiMessages chats = apiChats @@ -445,6 +451,10 @@ func fetchCallListHole(network: Network, postbox: Postbox, accountPeerId: PeerId messages = apiMessages chats = apiChats users = apiUsers + case let .messagesSliceLegacy(_, _, messages: apiMessages, chats: apiChats, users: apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers case let .channelMessages(_, _, _, apiMessages, apiChats, apiUsers): messages = apiMessages chats = apiChats diff --git a/TelegramCore/LoadMessagesIfNecessary.swift b/TelegramCore/LoadMessagesIfNecessary.swift index 2ab9c6bd4f..ceeab3b92a 100644 --- a/TelegramCore/LoadMessagesIfNecessary.swift +++ b/TelegramCore/LoadMessagesIfNecessary.swift @@ -63,6 +63,8 @@ public func getMessagesLoadIfNecessary(_ messageIds: [MessageId], postbox: Postb return (messages, chats, users) case let .messagesSlice(_, _, _, messages, chats, users): return (messages, chats, users) + case let .messagesSliceLegacy(_, _, messages, chats, users): + return (messages, chats, users) case let .channelMessages(_, _, _, messages, chats, users): return (messages, chats, users) case .messagesNotModified: diff --git a/TelegramCore/LoadedPeerFromMessage.swift b/TelegramCore/LoadedPeerFromMessage.swift index 169f4f702c..77b0608042 100644 --- a/TelegramCore/LoadedPeerFromMessage.swift +++ b/TelegramCore/LoadedPeerFromMessage.swift @@ -41,6 +41,8 @@ public func loadedPeerFromMessage(account: Account, peerId: PeerId, messageId: M apiUsers = users case let .messagesSlice(_, _, _, _, _, users): apiUsers = users + case let .messagesSliceLegacy(_, _, _, _, users): + apiUsers = users case let .channelMessages(_, _, _, _, _, users): apiUsers = users case .messagesNotModified: diff --git a/TelegramCore/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift b/TelegramCore/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift index dc1ebe52ad..ae5b87b4d1 100644 --- a/TelegramCore/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift +++ b/TelegramCore/ManagedSynchronizeMarkAllUnseenPersonalMessagesOperations.swift @@ -138,6 +138,8 @@ private func synchronizeMarkAllUnseen(transaction: Transaction, postbox: Postbox return .single([]) case let .messagesSlice(messagesSlice): return .single(messagesSlice.messages.compactMap({ $0.id })) + case let .messagesSliceLegacy(messagesSlice): + return .single(messagesSlice.messages.compactMap({ $0.id })) } } |> mapToSignal { ids -> Signal in diff --git a/TelegramCore/RequestUserPhotos.swift b/TelegramCore/RequestUserPhotos.swift index e0a977805f..3fc786c9e4 100644 --- a/TelegramCore/RequestUserPhotos.swift +++ b/TelegramCore/RequestUserPhotos.swift @@ -83,7 +83,11 @@ public func requestPeerPhotos(account:Account, peerId: PeerId) -> Signal<[Telegr messages = apiMessages chats = apiChats users = apiUsers - case let.messagesSlice(_, _, _, apiMessages, apiChats, apiUsers): + case let .messagesSlice(_, _, _, apiMessages, apiChats, apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers + case let .messagesSliceLegacy(_, _, apiMessages, apiChats, apiUsers): messages = apiMessages chats = apiChats users = apiUsers diff --git a/TelegramCore/SearchMessages.swift b/TelegramCore/SearchMessages.swift index a7ec40c8c5..86c69b337b 100644 --- a/TelegramCore/SearchMessages.swift +++ b/TelegramCore/SearchMessages.swift @@ -84,6 +84,12 @@ private func mergedState(transaction: Transaction, state: SearchMessagesPeerStat users = apiUsers totalCount = count nextRate = apiNextRate + case let .messagesSliceLegacy(_, count, apiMessages, apiChats, apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers + totalCount = count + nextRate = nil case .messagesNotModified: messages = [] chats = [] @@ -359,7 +365,11 @@ public func downloadMessage(postbox: Postbox, network: Network, messageId: Messa messages = apiMessages chats = apiChats users = apiUsers - case let.messagesSlice(_, _, _, apiMessages, apiChats, apiUsers): + case let .messagesSlice(_, _, _, apiMessages, apiChats, apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers + case let .messagesSliceLegacy(_, _, apiMessages, apiChats, apiUsers): messages = apiMessages chats = apiChats users = apiUsers @@ -446,6 +456,10 @@ func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource, messages = apiMessages chats = apiChats users = apiUsers + case let .messagesSliceLegacy(_, _, apiMessages, apiChats, apiUsers): + messages = apiMessages + chats = apiChats + users = apiUsers case .messagesNotModified: messages = [] chats = [] @@ -514,7 +528,9 @@ public func searchMessageIdByTimestamp(account: Account, peerId: PeerId, timesta messages = apiMessages case let .channelMessages(_, _, _, apiMessages, _, _): messages = apiMessages - case let.messagesSlice(_, _, _, apiMessages, _, _): + case let .messagesSlice(_, _, _, apiMessages, _, _): + messages = apiMessages + case let .messagesSliceLegacy(_, _, apiMessages, _, _): messages = apiMessages case .messagesNotModified: messages = [] @@ -538,7 +554,9 @@ public func searchMessageIdByTimestamp(account: Account, peerId: PeerId, timesta messages = apiMessages case let .channelMessages(_, _, _, apiMessages, _, _): messages = apiMessages - case let.messagesSlice(_, _, _, apiMessages, _, _): + case let .messagesSlice(_, _, _, apiMessages, _, _): + messages = apiMessages + case let .messagesSliceLegacy(_, _, apiMessages, _, _): messages = apiMessages case .messagesNotModified: messages = [] diff --git a/TelegramCore/SingleMessageView.swift b/TelegramCore/SingleMessageView.swift index c50ab5e800..ee1118b23b 100644 --- a/TelegramCore/SingleMessageView.swift +++ b/TelegramCore/SingleMessageView.swift @@ -60,6 +60,10 @@ private func fetchMessage(transaction: Transaction, account: Account, messageId: apiMessages = messages apiChats = chats apiUsers = users + case let .messagesSliceLegacy(_, _, messages, chats, users): + apiMessages = messages + apiChats = chats + apiUsers = users case let .channelMessages(_, _, _, messages, chats, users): apiMessages = messages apiChats = chats diff --git a/TelegramCore/SynchronizePeerReadState.swift b/TelegramCore/SynchronizePeerReadState.swift index 0484613a59..88242a3052 100644 --- a/TelegramCore/SynchronizePeerReadState.swift +++ b/TelegramCore/SynchronizePeerReadState.swift @@ -53,6 +53,8 @@ private func dialogTopMessage(network: Network, postbox: Postbox, peerId: PeerId apiMessages = messages case let .messagesSlice(_, _, _, messages, _, _): apiMessages = messages + case let .messagesSliceLegacy(_, _, messages, _, _): + apiMessages = messages case .messagesNotModified: apiMessages = [] } diff --git a/TelegramCore/UpdatedAccountPrivacySettings.swift b/TelegramCore/UpdatedAccountPrivacySettings.swift index c7454fd32b..e489e3a9f0 100644 --- a/TelegramCore/UpdatedAccountPrivacySettings.swift +++ b/TelegramCore/UpdatedAccountPrivacySettings.swift @@ -17,7 +17,9 @@ public func requestAccountPrivacySettings(account: Account) -> Signal retryRequest + |> `catch` { _ in + return .complete() + } |> mapToSignal { lastSeenPrivacy, groupPrivacy, voiceCallPrivacy, voiceCallP2P, profilePhotoPrivacy, forwardPrivacy, phoneNumberPrivacy, autoremoveTimeout -> Signal in let accountTimeoutSeconds: Int32 switch autoremoveTimeout {