diff --git a/TelegramCore/Account.swift b/TelegramCore/Account.swift index 5b1f288836..3c53387454 100644 --- a/TelegramCore/Account.swift +++ b/TelegramCore/Account.swift @@ -437,6 +437,7 @@ public enum AccountServiceTaskMasterMode { public struct AccountNetworkProxyState: Equatable { public let address: String + public let hasConnectionIssues: Bool } public enum AccountNetworkState: Equatable { @@ -639,15 +640,28 @@ public class Account { switch connectionStatus { case .waitingForNetwork: return .waitingForNetwork - case let .connecting(proxyAddress): - return .connecting(proxy: proxyAddress.flatMap(AccountNetworkProxyState.init(address:))) + case let .connecting(proxyAddress, proxyHasConnectionIssues): + var proxyState: AccountNetworkProxyState? + if let proxyAddress = proxyAddress { + proxyState = AccountNetworkProxyState(address: proxyAddress, hasConnectionIssues: proxyHasConnectionIssues) + } + return .connecting(proxy: proxyState) case let .updating(proxyAddress): - return .updating(proxy: proxyAddress.flatMap(AccountNetworkProxyState.init(address:))) + var proxyState: AccountNetworkProxyState? + if let proxyAddress = proxyAddress { + proxyState = AccountNetworkProxyState(address: proxyAddress, hasConnectionIssues: false) + } + return .updating(proxy: proxyState) case let .online(proxyAddress): + var proxyState: AccountNetworkProxyState? + if let proxyAddress = proxyAddress { + proxyState = AccountNetworkProxyState(address: proxyAddress, hasConnectionIssues: false) + } + if isUpdating { - return .updating(proxy: proxyAddress.flatMap(AccountNetworkProxyState.init(address:))) + return .updating(proxy: proxyState) } else { - return .online(proxy: proxyAddress.flatMap(AccountNetworkProxyState.init(address:))) + return .online(proxy: proxyState) } } } diff --git a/TelegramCore/Api0.swift b/TelegramCore/Api0.swift index be8c2692b0..d5ef45fc36 100644 --- a/TelegramCore/Api0.swift +++ b/TelegramCore/Api0.swift @@ -245,10 +245,10 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-2054908813] = { return Api.WebPage.parse_webPageNotModified($0) } dict[1036876423] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageText($0) } dict[-190472735] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageMediaGeo($0) } - dict[766443943] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageMediaContact($0) } dict[1262639204] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageGame($0) } dict[864077702] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageMediaAuto($0) } dict[1098628881] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageMediaVenue($0) } + dict[-1494368259] = { return Api.InputBotInlineMessage.parse_inputBotInlineMessageMediaContact($0) } dict[2002815875] = { return Api.KeyboardButtonRow.parse_keyboardButtonRow($0) } dict[1434820921] = { return Api.StickerSet.parse_stickerSet($0) } dict[539045032] = { return Api.photos.Photo.parse_photo($0) } @@ -271,7 +271,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1964327229] = { return Api.SecureData.parse_secureData($0) } dict[-1771768449] = { return Api.InputMedia.parse_inputMediaEmpty($0) } dict[-104578748] = { return Api.InputMedia.parse_inputMediaGeoPoint($0) } - dict[-1494984313] = { return Api.InputMedia.parse_inputMediaContact($0) } dict[1212395773] = { return Api.InputMedia.parse_inputMediaGifExternal($0) } dict[-750828557] = { return Api.InputMedia.parse_inputMediaGame($0) } dict[2065305999] = { return Api.InputMedia.parse_inputMediaGeoLive($0) } @@ -283,6 +282,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[598418386] = { return Api.InputMedia.parse_inputMediaDocument($0) } dict[-440664550] = { return Api.InputMedia.parse_inputMediaPhotoExternal($0) } dict[-78455655] = { return Api.InputMedia.parse_inputMediaDocumentExternal($0) } + dict[-122978821] = { return Api.InputMedia.parse_inputMediaContact($0) } dict[2134579434] = { return Api.InputPeer.parse_inputPeerEmpty($0) } dict[2107670217] = { return Api.InputPeer.parse_inputPeerSelf($0) } dict[396093539] = { return Api.InputPeer.parse_inputPeerChat($0) } @@ -385,7 +385,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[182649427] = { return Api.MessageRange.parse_messageRange($0) } dict[946083368] = { return Api.messages.StickerSetInstallResult.parse_stickerSetInstallResultSuccess($0) } dict[904138920] = { return Api.messages.StickerSetInstallResult.parse_stickerSetInstallResultArchive($0) } - dict[-344215200] = { return Api.Config.parse_config($0) } + dict[474704476] = { return Api.Config.parse_config($0) } dict[-75283823] = { return Api.TopPeerCategoryPeers.parse_topPeerCategoryPeers($0) } dict[-1107729093] = { return Api.Game.parse_game($0) } dict[-1032140601] = { return Api.BotCommand.parse_botCommand($0) } @@ -421,7 +421,6 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[301019932] = { return Api.Updates.parse_updateShortSentMessage($0) } dict[1038967584] = { return Api.MessageMedia.parse_messageMediaEmpty($0) } dict[1457575028] = { return Api.MessageMedia.parse_messageMediaGeo($0) } - dict[1585262393] = { return Api.MessageMedia.parse_messageMediaContact($0) } dict[-1618676578] = { return Api.MessageMedia.parse_messageMediaUnsupported($0) } dict[-1557277184] = { return Api.MessageMedia.parse_messageMediaWebPage($0) } dict[-38694904] = { return Api.MessageMedia.parse_messageMediaGame($0) } @@ -430,6 +429,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[784356159] = { return Api.MessageMedia.parse_messageMediaVenue($0) } dict[1766936791] = { return Api.MessageMedia.parse_messageMediaPhoto($0) } dict[-1666158377] = { return Api.MessageMedia.parse_messageMediaDocument($0) } + dict[-873313984] = { return Api.MessageMedia.parse_messageMediaContact($0) } dict[-842892769] = { return Api.PaymentSavedCredentials.parse_paymentSavedCredentialsCard($0) } dict[1450380236] = { return Api.Null.parse_null($0) } dict[1923290508] = { return Api.auth.CodeType.parse_codeTypeSms($0) } @@ -531,9 +531,9 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[415997816] = { return Api.help.InviteText.parse_inviteText($0) } dict[-1937807902] = { return Api.BotInlineMessage.parse_botInlineMessageText($0) } dict[982505656] = { return Api.BotInlineMessage.parse_botInlineMessageMediaGeo($0) } - dict[904770772] = { return Api.BotInlineMessage.parse_botInlineMessageMediaContact($0) } dict[1984755728] = { return Api.BotInlineMessage.parse_botInlineMessageMediaAuto($0) } dict[-1970903652] = { return Api.BotInlineMessage.parse_botInlineMessageMediaVenue($0) } + dict[416402882] = { return Api.BotInlineMessage.parse_botInlineMessageMediaContact($0) } dict[-1673717362] = { return Api.InputPeerNotifySettings.parse_inputPeerNotifySettings($0) } dict[-1634752813] = { return Api.messages.FavedStickers.parse_favedStickersNotModified($0) } dict[-209768682] = { return Api.messages.FavedStickers.parse_favedStickers($0) } diff --git a/TelegramCore/Api1.swift b/TelegramCore/Api1.swift index dd68ba4031..2c8f38ab3f 100644 --- a/TelegramCore/Api1.swift +++ b/TelegramCore/Api1.swift @@ -5924,10 +5924,10 @@ extension Api { enum InputBotInlineMessage: TypeConstructorDescription { case inputBotInlineMessageText(flags: Int32, message: String, entities: [Api.MessageEntity]?, replyMarkup: Api.ReplyMarkup?) case inputBotInlineMessageMediaGeo(flags: Int32, geoPoint: Api.InputGeoPoint, replyMarkup: Api.ReplyMarkup?) - case inputBotInlineMessageMediaContact(flags: Int32, phoneNumber: String, firstName: String, lastName: String, replyMarkup: Api.ReplyMarkup?) case inputBotInlineMessageGame(flags: Int32, replyMarkup: Api.ReplyMarkup?) case inputBotInlineMessageMediaAuto(flags: Int32, message: String, entities: [Api.MessageEntity]?, replyMarkup: Api.ReplyMarkup?) case inputBotInlineMessageMediaVenue(flags: Int32, geoPoint: Api.InputGeoPoint, title: String, address: String, provider: String, venueId: String, venueType: String, replyMarkup: Api.ReplyMarkup?) + case inputBotInlineMessageMediaContact(flags: Int32, phoneNumber: String, firstName: String, lastName: String, vcard: String, replyMarkup: Api.ReplyMarkup?) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -5952,16 +5952,6 @@ extension Api { geoPoint.serialize(buffer, true) if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} break - case .inputBotInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let replyMarkup): - if boxed { - buffer.appendInt32(766443943) - } - serializeInt32(flags, buffer: buffer, boxed: false) - serializeString(phoneNumber, buffer: buffer, boxed: false) - serializeString(firstName, buffer: buffer, boxed: false) - serializeString(lastName, buffer: buffer, boxed: false) - if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} - break case .inputBotInlineMessageGame(let flags, let replyMarkup): if boxed { buffer.appendInt32(1262639204) @@ -5995,6 +5985,17 @@ extension Api { serializeString(venueType, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} break + case .inputBotInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let vcard, let replyMarkup): + if boxed { + buffer.appendInt32(-1494368259) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeString(phoneNumber, buffer: buffer, boxed: false) + serializeString(firstName, buffer: buffer, boxed: false) + serializeString(lastName, buffer: buffer, boxed: false) + serializeString(vcard, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} + break } } @@ -6004,14 +6005,14 @@ extension Api { return ("inputBotInlineMessageText", [("flags", flags), ("message", message), ("entities", entities), ("replyMarkup", replyMarkup)]) case .inputBotInlineMessageMediaGeo(let flags, let geoPoint, let replyMarkup): return ("inputBotInlineMessageMediaGeo", [("flags", flags), ("geoPoint", geoPoint), ("replyMarkup", replyMarkup)]) - case .inputBotInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let replyMarkup): - return ("inputBotInlineMessageMediaContact", [("flags", flags), ("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("replyMarkup", replyMarkup)]) case .inputBotInlineMessageGame(let flags, let replyMarkup): return ("inputBotInlineMessageGame", [("flags", flags), ("replyMarkup", replyMarkup)]) case .inputBotInlineMessageMediaAuto(let flags, let message, let entities, let replyMarkup): return ("inputBotInlineMessageMediaAuto", [("flags", flags), ("message", message), ("entities", entities), ("replyMarkup", replyMarkup)]) case .inputBotInlineMessageMediaVenue(let flags, let geoPoint, let title, let address, let provider, let venueId, let venueType, let replyMarkup): return ("inputBotInlineMessageMediaVenue", [("flags", flags), ("geoPoint", geoPoint), ("title", title), ("address", address), ("provider", provider), ("venueId", venueId), ("venueType", venueType), ("replyMarkup", replyMarkup)]) + case .inputBotInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let vcard, let replyMarkup): + return ("inputBotInlineMessageMediaContact", [("flags", flags), ("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("vcard", vcard), ("replyMarkup", replyMarkup)]) } } @@ -6060,31 +6061,6 @@ extension Api { return nil } } - static func parse_inputBotInlineMessageMediaContact(_ reader: BufferReader) -> InputBotInlineMessage? { - var _1: Int32? - _1 = reader.readInt32() - var _2: String? - _2 = parseString(reader) - var _3: String? - _3 = parseString(reader) - var _4: String? - _4 = parseString(reader) - var _5: Api.ReplyMarkup? - if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { - _5 = Api.parse(reader, signature: signature) as? Api.ReplyMarkup - } } - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - let _c5 = (Int(_1!) & Int(1 << 2) == 0) || _5 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 { - return Api.InputBotInlineMessage.inputBotInlineMessageMediaContact(flags: _1!, phoneNumber: _2!, firstName: _3!, lastName: _4!, replyMarkup: _5) - } - else { - return nil - } - } static func parse_inputBotInlineMessageGame(_ reader: BufferReader) -> InputBotInlineMessage? { var _1: Int32? _1 = reader.readInt32() @@ -6161,6 +6137,34 @@ extension Api { return nil } } + static func parse_inputBotInlineMessageMediaContact(_ reader: BufferReader) -> InputBotInlineMessage? { + var _1: Int32? + _1 = reader.readInt32() + var _2: String? + _2 = parseString(reader) + var _3: String? + _3 = parseString(reader) + var _4: String? + _4 = parseString(reader) + var _5: String? + _5 = parseString(reader) + var _6: Api.ReplyMarkup? + if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { + _6 = Api.parse(reader, signature: signature) as? Api.ReplyMarkup + } } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = _5 != nil + let _c6 = (Int(_1!) & Int(1 << 2) == 0) || _6 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 { + return Api.InputBotInlineMessage.inputBotInlineMessageMediaContact(flags: _1!, phoneNumber: _2!, firstName: _3!, lastName: _4!, vcard: _5!, replyMarkup: _6) + } + else { + return nil + } + } } enum KeyboardButtonRow: TypeConstructorDescription { @@ -6548,7 +6552,6 @@ extension Api { enum InputMedia: TypeConstructorDescription { case inputMediaEmpty case inputMediaGeoPoint(geoPoint: Api.InputGeoPoint) - case inputMediaContact(phoneNumber: String, firstName: String, lastName: String) case inputMediaGifExternal(url: String, q: String) case inputMediaGame(id: Api.InputGame) case inputMediaGeoLive(geoPoint: Api.InputGeoPoint, period: Int32) @@ -6560,6 +6563,7 @@ extension Api { case inputMediaDocument(flags: Int32, id: Api.InputDocument, ttlSeconds: Int32?) case inputMediaPhotoExternal(flags: Int32, url: String, ttlSeconds: Int32?) case inputMediaDocumentExternal(flags: Int32, url: String, ttlSeconds: Int32?) + case inputMediaContact(phoneNumber: String, firstName: String, lastName: String, vcard: String) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -6575,14 +6579,6 @@ extension Api { } geoPoint.serialize(buffer, true) break - case .inputMediaContact(let phoneNumber, let firstName, let lastName): - if boxed { - buffer.appendInt32(-1494984313) - } - serializeString(phoneNumber, buffer: buffer, boxed: false) - serializeString(firstName, buffer: buffer, boxed: false) - serializeString(lastName, buffer: buffer, boxed: false) - break case .inputMediaGifExternal(let url, let q): if boxed { buffer.appendInt32(1212395773) @@ -6693,6 +6689,15 @@ extension Api { serializeString(url, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 0) != 0 {serializeInt32(ttlSeconds!, buffer: buffer, boxed: false)} break + case .inputMediaContact(let phoneNumber, let firstName, let lastName, let vcard): + if boxed { + buffer.appendInt32(-122978821) + } + serializeString(phoneNumber, buffer: buffer, boxed: false) + serializeString(firstName, buffer: buffer, boxed: false) + serializeString(lastName, buffer: buffer, boxed: false) + serializeString(vcard, buffer: buffer, boxed: false) + break } } @@ -6702,8 +6707,6 @@ extension Api { return ("inputMediaEmpty", []) case .inputMediaGeoPoint(let geoPoint): return ("inputMediaGeoPoint", [("geoPoint", geoPoint)]) - case .inputMediaContact(let phoneNumber, let firstName, let lastName): - return ("inputMediaContact", [("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName)]) case .inputMediaGifExternal(let url, let q): return ("inputMediaGifExternal", [("url", url), ("q", q)]) case .inputMediaGame(let id): @@ -6726,6 +6729,8 @@ extension Api { return ("inputMediaPhotoExternal", [("flags", flags), ("url", url), ("ttlSeconds", ttlSeconds)]) case .inputMediaDocumentExternal(let flags, let url, let ttlSeconds): return ("inputMediaDocumentExternal", [("flags", flags), ("url", url), ("ttlSeconds", ttlSeconds)]) + case .inputMediaContact(let phoneNumber, let firstName, let lastName, let vcard): + return ("inputMediaContact", [("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("vcard", vcard)]) } } @@ -6745,23 +6750,6 @@ extension Api { return nil } } - static func parse_inputMediaContact(_ reader: BufferReader) -> InputMedia? { - var _1: String? - _1 = parseString(reader) - var _2: String? - _2 = parseString(reader) - var _3: String? - _3 = parseString(reader) - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - if _c1 && _c2 && _c3 { - return Api.InputMedia.inputMediaContact(phoneNumber: _1!, firstName: _2!, lastName: _3!) - } - else { - return nil - } - } static func parse_inputMediaGifExternal(_ reader: BufferReader) -> InputMedia? { var _1: String? _1 = parseString(reader) @@ -7007,6 +6995,26 @@ extension Api { return nil } } + static func parse_inputMediaContact(_ reader: BufferReader) -> InputMedia? { + var _1: String? + _1 = parseString(reader) + var _2: String? + _2 = parseString(reader) + var _3: String? + _3 = parseString(reader) + var _4: String? + _4 = parseString(reader) + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + if _c1 && _c2 && _c3 && _c4 { + return Api.InputMedia.inputMediaContact(phoneNumber: _1!, firstName: _2!, lastName: _3!, vcard: _4!) + } + else { + return nil + } + } } enum InputPeer: TypeConstructorDescription { @@ -9276,13 +9284,13 @@ extension Api { } enum Config: TypeConstructorDescription { - case config(flags: Int32, date: Int32, expires: Int32, testMode: Api.Bool, thisDc: Int32, dcOptions: [Api.DcOption], chatSizeMax: Int32, megagroupSizeMax: Int32, forwardedCountMax: Int32, onlineUpdatePeriodMs: Int32, offlineBlurTimeoutMs: Int32, offlineIdleTimeoutMs: Int32, onlineCloudTimeoutMs: Int32, notifyCloudDelayMs: Int32, notifyDefaultDelayMs: Int32, pushChatPeriodMs: Int32, pushChatLimit: Int32, savedGifsLimit: Int32, editTimeLimit: Int32, revokeTimeLimit: Int32, revokePmTimeLimit: Int32, ratingEDecay: Int32, stickersRecentLimit: Int32, stickersFavedLimit: Int32, channelsReadMediaPeriod: Int32, tmpSessions: Int32?, pinnedDialogsCountMax: Int32, callReceiveTimeoutMs: Int32, callRingTimeoutMs: Int32, callConnectTimeoutMs: Int32, callPacketTimeoutMs: Int32, meUrlPrefix: String, autoupdateUrlPrefix: String?, suggestedLangCode: String?, langPackVersion: Int32?) + case config(flags: Int32, date: Int32, expires: Int32, testMode: Api.Bool, thisDc: Int32, dcOptions: [Api.DcOption], dcTxtDomainName: String, chatSizeMax: Int32, megagroupSizeMax: Int32, forwardedCountMax: Int32, onlineUpdatePeriodMs: Int32, offlineBlurTimeoutMs: Int32, offlineIdleTimeoutMs: Int32, onlineCloudTimeoutMs: Int32, notifyCloudDelayMs: Int32, notifyDefaultDelayMs: Int32, pushChatPeriodMs: Int32, pushChatLimit: Int32, savedGifsLimit: Int32, editTimeLimit: Int32, revokeTimeLimit: Int32, revokePmTimeLimit: Int32, ratingEDecay: Int32, stickersRecentLimit: Int32, stickersFavedLimit: Int32, channelsReadMediaPeriod: Int32, tmpSessions: Int32?, pinnedDialogsCountMax: Int32, callReceiveTimeoutMs: Int32, callRingTimeoutMs: Int32, callConnectTimeoutMs: Int32, callPacketTimeoutMs: Int32, meUrlPrefix: String, autoupdateUrlPrefix: String?, gifSearchUsername: String?, venueSearchUsername: String?, imgSearchUsername: String?, suggestedLangCode: String?, langPackVersion: Int32?) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .config(let flags, let date, let expires, let testMode, let thisDc, let dcOptions, let chatSizeMax, let megagroupSizeMax, let forwardedCountMax, let onlineUpdatePeriodMs, let offlineBlurTimeoutMs, let offlineIdleTimeoutMs, let onlineCloudTimeoutMs, let notifyCloudDelayMs, let notifyDefaultDelayMs, let pushChatPeriodMs, let pushChatLimit, let savedGifsLimit, let editTimeLimit, let revokeTimeLimit, let revokePmTimeLimit, let ratingEDecay, let stickersRecentLimit, let stickersFavedLimit, let channelsReadMediaPeriod, let tmpSessions, let pinnedDialogsCountMax, let callReceiveTimeoutMs, let callRingTimeoutMs, let callConnectTimeoutMs, let callPacketTimeoutMs, let meUrlPrefix, let autoupdateUrlPrefix, let suggestedLangCode, let langPackVersion): + case .config(let flags, let date, let expires, let testMode, let thisDc, let dcOptions, let dcTxtDomainName, let chatSizeMax, let megagroupSizeMax, let forwardedCountMax, let onlineUpdatePeriodMs, let offlineBlurTimeoutMs, let offlineIdleTimeoutMs, let onlineCloudTimeoutMs, let notifyCloudDelayMs, let notifyDefaultDelayMs, let pushChatPeriodMs, let pushChatLimit, let savedGifsLimit, let editTimeLimit, let revokeTimeLimit, let revokePmTimeLimit, let ratingEDecay, let stickersRecentLimit, let stickersFavedLimit, let channelsReadMediaPeriod, let tmpSessions, let pinnedDialogsCountMax, let callReceiveTimeoutMs, let callRingTimeoutMs, let callConnectTimeoutMs, let callPacketTimeoutMs, let meUrlPrefix, let autoupdateUrlPrefix, let gifSearchUsername, let venueSearchUsername, let imgSearchUsername, let suggestedLangCode, let langPackVersion): if boxed { - buffer.appendInt32(-344215200) + buffer.appendInt32(474704476) } serializeInt32(flags, buffer: buffer, boxed: false) serializeInt32(date, buffer: buffer, boxed: false) @@ -9294,6 +9302,7 @@ extension Api { for item in dcOptions { item.serialize(buffer, true) } + serializeString(dcTxtDomainName, buffer: buffer, boxed: false) serializeInt32(chatSizeMax, buffer: buffer, boxed: false) serializeInt32(megagroupSizeMax, buffer: buffer, boxed: false) serializeInt32(forwardedCountMax, buffer: buffer, boxed: false) @@ -9321,6 +9330,9 @@ extension Api { serializeInt32(callPacketTimeoutMs, buffer: buffer, boxed: false) serializeString(meUrlPrefix, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 7) != 0 {serializeString(autoupdateUrlPrefix!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 9) != 0 {serializeString(gifSearchUsername!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 10) != 0 {serializeString(venueSearchUsername!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 11) != 0 {serializeString(imgSearchUsername!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 2) != 0 {serializeString(suggestedLangCode!, buffer: buffer, boxed: false)} if Int(flags) & Int(1 << 2) != 0 {serializeInt32(langPackVersion!, buffer: buffer, boxed: false)} break @@ -9329,8 +9341,8 @@ extension Api { func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .config(let flags, let date, let expires, let testMode, let thisDc, let dcOptions, let chatSizeMax, let megagroupSizeMax, let forwardedCountMax, let onlineUpdatePeriodMs, let offlineBlurTimeoutMs, let offlineIdleTimeoutMs, let onlineCloudTimeoutMs, let notifyCloudDelayMs, let notifyDefaultDelayMs, let pushChatPeriodMs, let pushChatLimit, let savedGifsLimit, let editTimeLimit, let revokeTimeLimit, let revokePmTimeLimit, let ratingEDecay, let stickersRecentLimit, let stickersFavedLimit, let channelsReadMediaPeriod, let tmpSessions, let pinnedDialogsCountMax, let callReceiveTimeoutMs, let callRingTimeoutMs, let callConnectTimeoutMs, let callPacketTimeoutMs, let meUrlPrefix, let autoupdateUrlPrefix, let suggestedLangCode, let langPackVersion): - return ("config", [("flags", flags), ("date", date), ("expires", expires), ("testMode", testMode), ("thisDc", thisDc), ("dcOptions", dcOptions), ("chatSizeMax", chatSizeMax), ("megagroupSizeMax", megagroupSizeMax), ("forwardedCountMax", forwardedCountMax), ("onlineUpdatePeriodMs", onlineUpdatePeriodMs), ("offlineBlurTimeoutMs", offlineBlurTimeoutMs), ("offlineIdleTimeoutMs", offlineIdleTimeoutMs), ("onlineCloudTimeoutMs", onlineCloudTimeoutMs), ("notifyCloudDelayMs", notifyCloudDelayMs), ("notifyDefaultDelayMs", notifyDefaultDelayMs), ("pushChatPeriodMs", pushChatPeriodMs), ("pushChatLimit", pushChatLimit), ("savedGifsLimit", savedGifsLimit), ("editTimeLimit", editTimeLimit), ("revokeTimeLimit", revokeTimeLimit), ("revokePmTimeLimit", revokePmTimeLimit), ("ratingEDecay", ratingEDecay), ("stickersRecentLimit", stickersRecentLimit), ("stickersFavedLimit", stickersFavedLimit), ("channelsReadMediaPeriod", channelsReadMediaPeriod), ("tmpSessions", tmpSessions), ("pinnedDialogsCountMax", pinnedDialogsCountMax), ("callReceiveTimeoutMs", callReceiveTimeoutMs), ("callRingTimeoutMs", callRingTimeoutMs), ("callConnectTimeoutMs", callConnectTimeoutMs), ("callPacketTimeoutMs", callPacketTimeoutMs), ("meUrlPrefix", meUrlPrefix), ("autoupdateUrlPrefix", autoupdateUrlPrefix), ("suggestedLangCode", suggestedLangCode), ("langPackVersion", langPackVersion)]) + case .config(let flags, let date, let expires, let testMode, let thisDc, let dcOptions, let dcTxtDomainName, let chatSizeMax, let megagroupSizeMax, let forwardedCountMax, let onlineUpdatePeriodMs, let offlineBlurTimeoutMs, let offlineIdleTimeoutMs, let onlineCloudTimeoutMs, let notifyCloudDelayMs, let notifyDefaultDelayMs, let pushChatPeriodMs, let pushChatLimit, let savedGifsLimit, let editTimeLimit, let revokeTimeLimit, let revokePmTimeLimit, let ratingEDecay, let stickersRecentLimit, let stickersFavedLimit, let channelsReadMediaPeriod, let tmpSessions, let pinnedDialogsCountMax, let callReceiveTimeoutMs, let callRingTimeoutMs, let callConnectTimeoutMs, let callPacketTimeoutMs, let meUrlPrefix, let autoupdateUrlPrefix, let gifSearchUsername, let venueSearchUsername, let imgSearchUsername, let suggestedLangCode, let langPackVersion): + return ("config", [("flags", flags), ("date", date), ("expires", expires), ("testMode", testMode), ("thisDc", thisDc), ("dcOptions", dcOptions), ("dcTxtDomainName", dcTxtDomainName), ("chatSizeMax", chatSizeMax), ("megagroupSizeMax", megagroupSizeMax), ("forwardedCountMax", forwardedCountMax), ("onlineUpdatePeriodMs", onlineUpdatePeriodMs), ("offlineBlurTimeoutMs", offlineBlurTimeoutMs), ("offlineIdleTimeoutMs", offlineIdleTimeoutMs), ("onlineCloudTimeoutMs", onlineCloudTimeoutMs), ("notifyCloudDelayMs", notifyCloudDelayMs), ("notifyDefaultDelayMs", notifyDefaultDelayMs), ("pushChatPeriodMs", pushChatPeriodMs), ("pushChatLimit", pushChatLimit), ("savedGifsLimit", savedGifsLimit), ("editTimeLimit", editTimeLimit), ("revokeTimeLimit", revokeTimeLimit), ("revokePmTimeLimit", revokePmTimeLimit), ("ratingEDecay", ratingEDecay), ("stickersRecentLimit", stickersRecentLimit), ("stickersFavedLimit", stickersFavedLimit), ("channelsReadMediaPeriod", channelsReadMediaPeriod), ("tmpSessions", tmpSessions), ("pinnedDialogsCountMax", pinnedDialogsCountMax), ("callReceiveTimeoutMs", callReceiveTimeoutMs), ("callRingTimeoutMs", callRingTimeoutMs), ("callConnectTimeoutMs", callConnectTimeoutMs), ("callPacketTimeoutMs", callPacketTimeoutMs), ("meUrlPrefix", meUrlPrefix), ("autoupdateUrlPrefix", autoupdateUrlPrefix), ("gifSearchUsername", gifSearchUsername), ("venueSearchUsername", venueSearchUsername), ("imgSearchUsername", imgSearchUsername), ("suggestedLangCode", suggestedLangCode), ("langPackVersion", langPackVersion)]) } } @@ -9351,8 +9363,8 @@ extension Api { if let _ = reader.readInt32() { _6 = Api.parseVector(reader, elementSignature: 0, elementType: Api.DcOption.self) } - var _7: Int32? - _7 = reader.readInt32() + var _7: String? + _7 = parseString(reader) var _8: Int32? _8 = reader.readInt32() var _9: Int32? @@ -9390,9 +9402,9 @@ extension Api { var _25: Int32? _25 = reader.readInt32() var _26: Int32? - if Int(_1!) & Int(1 << 0) != 0 {_26 = reader.readInt32() } + _26 = reader.readInt32() var _27: Int32? - _27 = reader.readInt32() + if Int(_1!) & Int(1 << 0) != 0 {_27 = reader.readInt32() } var _28: Int32? _28 = reader.readInt32() var _29: Int32? @@ -9401,14 +9413,22 @@ extension Api { _30 = reader.readInt32() var _31: Int32? _31 = reader.readInt32() - var _32: String? - _32 = parseString(reader) + var _32: Int32? + _32 = reader.readInt32() var _33: String? - if Int(_1!) & Int(1 << 7) != 0 {_33 = parseString(reader) } + _33 = parseString(reader) var _34: String? - if Int(_1!) & Int(1 << 2) != 0 {_34 = parseString(reader) } - var _35: Int32? - if Int(_1!) & Int(1 << 2) != 0 {_35 = reader.readInt32() } + if Int(_1!) & Int(1 << 7) != 0 {_34 = parseString(reader) } + var _35: String? + if Int(_1!) & Int(1 << 9) != 0 {_35 = parseString(reader) } + var _36: String? + if Int(_1!) & Int(1 << 10) != 0 {_36 = parseString(reader) } + var _37: String? + if Int(_1!) & Int(1 << 11) != 0 {_37 = parseString(reader) } + var _38: String? + if Int(_1!) & Int(1 << 2) != 0 {_38 = parseString(reader) } + var _39: Int32? + if Int(_1!) & Int(1 << 2) != 0 {_39 = reader.readInt32() } let _c1 = _1 != nil let _c2 = _2 != nil let _c3 = _3 != nil @@ -9434,18 +9454,22 @@ extension Api { let _c23 = _23 != nil let _c24 = _24 != nil let _c25 = _25 != nil - let _c26 = (Int(_1!) & Int(1 << 0) == 0) || _26 != nil - let _c27 = _27 != nil + let _c26 = _26 != nil + let _c27 = (Int(_1!) & Int(1 << 0) == 0) || _27 != nil let _c28 = _28 != nil let _c29 = _29 != nil let _c30 = _30 != nil let _c31 = _31 != nil let _c32 = _32 != nil - let _c33 = (Int(_1!) & Int(1 << 7) == 0) || _33 != nil - let _c34 = (Int(_1!) & Int(1 << 2) == 0) || _34 != nil - let _c35 = (Int(_1!) & Int(1 << 2) == 0) || _35 != 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 && _c31 && _c32 && _c33 && _c34 && _c35 { - return Api.Config.config(flags: _1!, date: _2!, expires: _3!, testMode: _4!, thisDc: _5!, dcOptions: _6!, chatSizeMax: _7!, megagroupSizeMax: _8!, forwardedCountMax: _9!, onlineUpdatePeriodMs: _10!, offlineBlurTimeoutMs: _11!, offlineIdleTimeoutMs: _12!, onlineCloudTimeoutMs: _13!, notifyCloudDelayMs: _14!, notifyDefaultDelayMs: _15!, pushChatPeriodMs: _16!, pushChatLimit: _17!, savedGifsLimit: _18!, editTimeLimit: _19!, revokeTimeLimit: _20!, revokePmTimeLimit: _21!, ratingEDecay: _22!, stickersRecentLimit: _23!, stickersFavedLimit: _24!, channelsReadMediaPeriod: _25!, tmpSessions: _26, pinnedDialogsCountMax: _27!, callReceiveTimeoutMs: _28!, callRingTimeoutMs: _29!, callConnectTimeoutMs: _30!, callPacketTimeoutMs: _31!, meUrlPrefix: _32!, autoupdateUrlPrefix: _33, suggestedLangCode: _34, langPackVersion: _35) + let _c33 = _33 != nil + let _c34 = (Int(_1!) & Int(1 << 7) == 0) || _34 != nil + let _c35 = (Int(_1!) & Int(1 << 9) == 0) || _35 != nil + let _c36 = (Int(_1!) & Int(1 << 10) == 0) || _36 != nil + let _c37 = (Int(_1!) & Int(1 << 11) == 0) || _37 != nil + let _c38 = (Int(_1!) & Int(1 << 2) == 0) || _38 != nil + let _c39 = (Int(_1!) & Int(1 << 2) == 0) || _39 != 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 && _c31 && _c32 && _c33 && _c34 && _c35 && _c36 && _c37 && _c38 && _c39 { + return Api.Config.config(flags: _1!, date: _2!, expires: _3!, testMode: _4!, thisDc: _5!, dcOptions: _6!, dcTxtDomainName: _7!, chatSizeMax: _8!, megagroupSizeMax: _9!, forwardedCountMax: _10!, onlineUpdatePeriodMs: _11!, offlineBlurTimeoutMs: _12!, offlineIdleTimeoutMs: _13!, onlineCloudTimeoutMs: _14!, notifyCloudDelayMs: _15!, notifyDefaultDelayMs: _16!, pushChatPeriodMs: _17!, pushChatLimit: _18!, savedGifsLimit: _19!, editTimeLimit: _20!, revokeTimeLimit: _21!, revokePmTimeLimit: _22!, ratingEDecay: _23!, stickersRecentLimit: _24!, stickersFavedLimit: _25!, channelsReadMediaPeriod: _26!, tmpSessions: _27, pinnedDialogsCountMax: _28!, callReceiveTimeoutMs: _29!, callRingTimeoutMs: _30!, callConnectTimeoutMs: _31!, callPacketTimeoutMs: _32!, meUrlPrefix: _33!, autoupdateUrlPrefix: _34, gifSearchUsername: _35, venueSearchUsername: _36, imgSearchUsername: _37, suggestedLangCode: _38, langPackVersion: _39) } else { return nil @@ -10450,7 +10474,6 @@ extension Api { enum MessageMedia: TypeConstructorDescription { case messageMediaEmpty case messageMediaGeo(geo: Api.GeoPoint) - case messageMediaContact(phoneNumber: String, firstName: String, lastName: String, userId: Int32) case messageMediaUnsupported case messageMediaWebPage(webpage: Api.WebPage) case messageMediaGame(game: Api.Game) @@ -10459,6 +10482,7 @@ extension Api { case messageMediaVenue(geo: Api.GeoPoint, title: String, address: String, provider: String, venueId: String, venueType: String) case messageMediaPhoto(flags: Int32, photo: Api.Photo?, ttlSeconds: Int32?) case messageMediaDocument(flags: Int32, document: Api.Document?, ttlSeconds: Int32?) + case messageMediaContact(phoneNumber: String, firstName: String, lastName: String, vcard: String, userId: Int32) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -10474,15 +10498,6 @@ extension Api { } geo.serialize(buffer, true) break - case .messageMediaContact(let phoneNumber, let firstName, let lastName, let userId): - if boxed { - buffer.appendInt32(1585262393) - } - serializeString(phoneNumber, buffer: buffer, boxed: false) - serializeString(firstName, buffer: buffer, boxed: false) - serializeString(lastName, buffer: buffer, boxed: false) - serializeInt32(userId, buffer: buffer, boxed: false) - break case .messageMediaUnsupported: if boxed { buffer.appendInt32(-1618676578) @@ -10548,6 +10563,16 @@ extension Api { if Int(flags) & Int(1 << 0) != 0 {document!.serialize(buffer, true)} if Int(flags) & Int(1 << 2) != 0 {serializeInt32(ttlSeconds!, buffer: buffer, boxed: false)} break + case .messageMediaContact(let phoneNumber, let firstName, let lastName, let vcard, let userId): + if boxed { + buffer.appendInt32(-873313984) + } + serializeString(phoneNumber, buffer: buffer, boxed: false) + serializeString(firstName, buffer: buffer, boxed: false) + serializeString(lastName, buffer: buffer, boxed: false) + serializeString(vcard, buffer: buffer, boxed: false) + serializeInt32(userId, buffer: buffer, boxed: false) + break } } @@ -10557,8 +10582,6 @@ extension Api { return ("messageMediaEmpty", []) case .messageMediaGeo(let geo): return ("messageMediaGeo", [("geo", geo)]) - case .messageMediaContact(let phoneNumber, let firstName, let lastName, let userId): - return ("messageMediaContact", [("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("userId", userId)]) case .messageMediaUnsupported: return ("messageMediaUnsupported", []) case .messageMediaWebPage(let webpage): @@ -10575,6 +10598,8 @@ extension Api { return ("messageMediaPhoto", [("flags", flags), ("photo", photo), ("ttlSeconds", ttlSeconds)]) case .messageMediaDocument(let flags, let document, let ttlSeconds): return ("messageMediaDocument", [("flags", flags), ("document", document), ("ttlSeconds", ttlSeconds)]) + case .messageMediaContact(let phoneNumber, let firstName, let lastName, let vcard, let userId): + return ("messageMediaContact", [("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("vcard", vcard), ("userId", userId)]) } } @@ -10594,26 +10619,6 @@ extension Api { return nil } } - static func parse_messageMediaContact(_ reader: BufferReader) -> MessageMedia? { - var _1: String? - _1 = parseString(reader) - var _2: String? - _2 = parseString(reader) - var _3: String? - _3 = parseString(reader) - var _4: Int32? - _4 = reader.readInt32() - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - if _c1 && _c2 && _c3 && _c4 { - return Api.MessageMedia.messageMediaContact(phoneNumber: _1!, firstName: _2!, lastName: _3!, userId: _4!) - } - else { - return nil - } - } static func parse_messageMediaUnsupported(_ reader: BufferReader) -> MessageMedia? { return Api.MessageMedia.messageMediaUnsupported } @@ -10759,6 +10764,29 @@ extension Api { return nil } } + static func parse_messageMediaContact(_ reader: BufferReader) -> MessageMedia? { + var _1: String? + _1 = parseString(reader) + var _2: String? + _2 = parseString(reader) + var _3: String? + _3 = parseString(reader) + var _4: String? + _4 = parseString(reader) + var _5: Int32? + _5 = reader.readInt32() + 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.MessageMedia.messageMediaContact(phoneNumber: _1!, firstName: _2!, lastName: _3!, vcard: _4!, userId: _5!) + } + else { + return nil + } + } } enum PaymentSavedCredentials: TypeConstructorDescription { @@ -13024,9 +13052,9 @@ extension Api { enum BotInlineMessage: TypeConstructorDescription { case botInlineMessageText(flags: Int32, message: String, entities: [Api.MessageEntity]?, replyMarkup: Api.ReplyMarkup?) case botInlineMessageMediaGeo(flags: Int32, geo: Api.GeoPoint, replyMarkup: Api.ReplyMarkup?) - case botInlineMessageMediaContact(flags: Int32, phoneNumber: String, firstName: String, lastName: String, replyMarkup: Api.ReplyMarkup?) case botInlineMessageMediaAuto(flags: Int32, message: String, entities: [Api.MessageEntity]?, replyMarkup: Api.ReplyMarkup?) case botInlineMessageMediaVenue(flags: Int32, geo: Api.GeoPoint, title: String, address: String, provider: String, venueId: String, venueType: String, replyMarkup: Api.ReplyMarkup?) + case botInlineMessageMediaContact(flags: Int32, phoneNumber: String, firstName: String, lastName: String, vcard: String, replyMarkup: Api.ReplyMarkup?) func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -13051,16 +13079,6 @@ extension Api { geo.serialize(buffer, true) if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} break - case .botInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let replyMarkup): - if boxed { - buffer.appendInt32(904770772) - } - serializeInt32(flags, buffer: buffer, boxed: false) - serializeString(phoneNumber, buffer: buffer, boxed: false) - serializeString(firstName, buffer: buffer, boxed: false) - serializeString(lastName, buffer: buffer, boxed: false) - if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} - break case .botInlineMessageMediaAuto(let flags, let message, let entities, let replyMarkup): if boxed { buffer.appendInt32(1984755728) @@ -13087,6 +13105,17 @@ extension Api { serializeString(venueType, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} break + case .botInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let vcard, let replyMarkup): + if boxed { + buffer.appendInt32(416402882) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeString(phoneNumber, buffer: buffer, boxed: false) + serializeString(firstName, buffer: buffer, boxed: false) + serializeString(lastName, buffer: buffer, boxed: false) + serializeString(vcard, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 2) != 0 {replyMarkup!.serialize(buffer, true)} + break } } @@ -13096,12 +13125,12 @@ extension Api { return ("botInlineMessageText", [("flags", flags), ("message", message), ("entities", entities), ("replyMarkup", replyMarkup)]) case .botInlineMessageMediaGeo(let flags, let geo, let replyMarkup): return ("botInlineMessageMediaGeo", [("flags", flags), ("geo", geo), ("replyMarkup", replyMarkup)]) - case .botInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let replyMarkup): - return ("botInlineMessageMediaContact", [("flags", flags), ("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("replyMarkup", replyMarkup)]) case .botInlineMessageMediaAuto(let flags, let message, let entities, let replyMarkup): return ("botInlineMessageMediaAuto", [("flags", flags), ("message", message), ("entities", entities), ("replyMarkup", replyMarkup)]) case .botInlineMessageMediaVenue(let flags, let geo, let title, let address, let provider, let venueId, let venueType, let replyMarkup): return ("botInlineMessageMediaVenue", [("flags", flags), ("geo", geo), ("title", title), ("address", address), ("provider", provider), ("venueId", venueId), ("venueType", venueType), ("replyMarkup", replyMarkup)]) + case .botInlineMessageMediaContact(let flags, let phoneNumber, let firstName, let lastName, let vcard, let replyMarkup): + return ("botInlineMessageMediaContact", [("flags", flags), ("phoneNumber", phoneNumber), ("firstName", firstName), ("lastName", lastName), ("vcard", vcard), ("replyMarkup", replyMarkup)]) } } @@ -13150,31 +13179,6 @@ extension Api { return nil } } - static func parse_botInlineMessageMediaContact(_ reader: BufferReader) -> BotInlineMessage? { - var _1: Int32? - _1 = reader.readInt32() - var _2: String? - _2 = parseString(reader) - var _3: String? - _3 = parseString(reader) - var _4: String? - _4 = parseString(reader) - var _5: Api.ReplyMarkup? - if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { - _5 = Api.parse(reader, signature: signature) as? Api.ReplyMarkup - } } - let _c1 = _1 != nil - let _c2 = _2 != nil - let _c3 = _3 != nil - let _c4 = _4 != nil - let _c5 = (Int(_1!) & Int(1 << 2) == 0) || _5 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 { - return Api.BotInlineMessage.botInlineMessageMediaContact(flags: _1!, phoneNumber: _2!, firstName: _3!, lastName: _4!, replyMarkup: _5) - } - else { - return nil - } - } static func parse_botInlineMessageMediaAuto(_ reader: BufferReader) -> BotInlineMessage? { var _1: Int32? _1 = reader.readInt32() @@ -13235,6 +13239,34 @@ extension Api { return nil } } + static func parse_botInlineMessageMediaContact(_ reader: BufferReader) -> BotInlineMessage? { + var _1: Int32? + _1 = reader.readInt32() + var _2: String? + _2 = parseString(reader) + var _3: String? + _3 = parseString(reader) + var _4: String? + _4 = parseString(reader) + var _5: String? + _5 = parseString(reader) + var _6: Api.ReplyMarkup? + if Int(_1!) & Int(1 << 2) != 0 {if let signature = reader.readInt32() { + _6 = Api.parse(reader, signature: signature) as? Api.ReplyMarkup + } } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = _3 != nil + let _c4 = _4 != nil + let _c5 = _5 != nil + let _c6 = (Int(_1!) & Int(1 << 2) == 0) || _6 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 { + return Api.BotInlineMessage.botInlineMessageMediaContact(flags: _1!, phoneNumber: _2!, firstName: _3!, lastName: _4!, vcard: _5!, replyMarkup: _6) + } + else { + return nil + } + } } enum InputPeerNotifySettings: TypeConstructorDescription { diff --git a/TelegramCore/ApplyMaxReadIndexInteractively.swift b/TelegramCore/ApplyMaxReadIndexInteractively.swift index 4b952d65a2..e4fb71f481 100644 --- a/TelegramCore/ApplyMaxReadIndexInteractively.swift +++ b/TelegramCore/ApplyMaxReadIndexInteractively.swift @@ -126,7 +126,9 @@ public func togglePeerUnreadMarkInteractively(postbox: Postbox, peerId: PeerId) for i in 0 ..< states.count { if states[i].0 == namespace { if states[i].1.isUnread { - let _ = modifier.applyInteractiveReadMaxIndex(MessageIndex(id: MessageId(peerId: peerId, namespace: namespace, id: 1), timestamp: 1)) + if let index = modifier.getTopPeerMessageIndex(peerId: peerId, namespace: namespace) { + let _ = modifier.applyInteractiveReadMaxIndex(index) + } } else { modifier.applyMarkUnread(peerId: peerId, namespace: namespace, value: true, interactive: true) } diff --git a/TelegramCore/ChatContextResult.swift b/TelegramCore/ChatContextResult.swift index d450d9c2b2..271fb989ad 100644 --- a/TelegramCore/ChatContextResult.swift +++ b/TelegramCore/ChatContextResult.swift @@ -366,8 +366,8 @@ extension ChatContextResultMessage { parsedReplyMarkup = ReplyMarkupMessageAttribute(apiMarkup: replyMarkup) } self = .mapLocation(media: media, replyMarkup: parsedReplyMarkup) - case let .botInlineMessageMediaContact(_, phoneNumber, firstName, lastName, replyMarkup): - let media = TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: nil) + case let .botInlineMessageMediaContact(_, phoneNumber, firstName, lastName, vcard, replyMarkup): + let media = TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: nil, vCardData: vcard.isEmpty ? nil : vcard) var parsedReplyMarkup: ReplyMarkupMessageAttribute? if let replyMarkup = replyMarkup { parsedReplyMarkup = ReplyMarkupMessageAttribute(apiMarkup: replyMarkup) diff --git a/TelegramCore/ManagedConfigurationUpdates.swift b/TelegramCore/ManagedConfigurationUpdates.swift index 55991bae20..70817f718c 100644 --- a/TelegramCore/ManagedConfigurationUpdates.swift +++ b/TelegramCore/ManagedConfigurationUpdates.swift @@ -14,7 +14,7 @@ func managedConfigurationUpdates(postbox: Postbox, network: Network) -> Signal retryRequest |> mapToSignal { result -> Signal in return postbox.modify { modifier -> Void in switch result { - case let .config(flags, _, _, _, _, dcOptions, chatSizeMax, megagroupSizeMax, forwardedCountMax, _, _, _, onlineCloudTimeoutMs, notifyCloudDelayMs, notifyDefaultDelayMs, pushChatPeriodMs, pushChatLimit, savedGifsLimit, editTimeLimit, revokeTimeLimit, revokePmTimeLimit, ratingEDecay, stickersRecentLimit, stickersFavedLimit, channelsReadMediaPeriod, tmpSessions, pinnedDialogsCountMax, callReceiveTimeoutMs, callRingTimeoutMs, callConnectTimeoutMs, callPacketTimeoutMs, meUrlPrefix, autoupdateUrlPrefix, suggestedLangCode, langPackVersion): + case let .config(flags, _, _, _, _, dcOptions, dcTxtDomainName, chatSizeMax, megagroupSizeMax, forwardedCountMax, _, _, _, onlineCloudTimeoutMs, notifyCloudDelayMs, notifyDefaultDelayMs, pushChatPeriodMs, pushChatLimit, savedGifsLimit, editTimeLimit, revokeTimeLimit, revokePmTimeLimit, ratingEDecay, stickersRecentLimit, stickersFavedLimit, channelsReadMediaPeriod, tmpSessions, pinnedDialogsCountMax, callReceiveTimeoutMs, callRingTimeoutMs, callConnectTimeoutMs, callPacketTimeoutMs, meUrlPrefix, autoupdateUrlPrefix, gifSearchUsername, venueSearchUsername, imgSearchUsername, suggestedLangCode, langPackVersion): var addressList: [Int: [MTDatacenterAddress]] = [:] for option in dcOptions { switch option { diff --git a/TelegramCore/Network.swift b/TelegramCore/Network.swift index 331484012d..7f1e1de112 100644 --- a/TelegramCore/Network.swift +++ b/TelegramCore/Network.swift @@ -12,7 +12,7 @@ import TelegramCorePrivateModule public enum ConnectionStatus: Equatable { case waitingForNetwork - case connecting(proxyAddress: String?) + case connecting(proxyAddress: String?, proxyHasConnectionIssues: Bool) case updating(proxyAddress: String?) case online(proxyAddress: String?) } @@ -24,6 +24,7 @@ private struct MTProtoConnectionFlags: OptionSet { static let Connected = MTProtoConnectionFlags(rawValue: 2) static let UpdatingConnectionContext = MTProtoConnectionFlags(rawValue: 4) static let PerformingServiceTasks = MTProtoConnectionFlags(rawValue: 8) + static let ProxyHasConnectionIssues = MTProtoConnectionFlags(rawValue: 16) } private struct MTProtoConnectionInfo: Equatable { @@ -83,11 +84,18 @@ private class MTProtoConnectionStatusDelegate: NSObject, MTProtoDelegate { if let state = state { if state.isConnected { info.flags.insert(.Connected) + info.flags.remove(.ProxyHasConnectionIssues) } else { info.flags.remove(.Connected) + if state.proxyHasConnectionIssues { + info.flags.insert(.ProxyHasConnectionIssues) + } else { + info.flags.remove(.ProxyHasConnectionIssues) + } } } else { info.flags.remove(.Connected) + info.flags.remove(.ProxyHasConnectionIssues) } info.proxyAddress = state?.proxyAddress return info @@ -386,6 +394,7 @@ func initializedNetwork(arguments: NetworkInitializationArguments, supplementary let mtProto = MTProto(context: context, datacenterId: datacenterId, usageCalculationInfo: usageCalculationInfo(basePath: basePath, category: nil))! mtProto.useTempAuthKeys = context.useTempAuthKeys + mtProto.checkForProxyConnectionIssues = true let connectionStatus = Promise(.waitingForNetwork) @@ -402,7 +411,7 @@ func initializedNetwork(arguments: NetworkInitializationArguments, supplementary if !info.flags.contains(.NetworkAvailable) { connectionStatus?.set(.single(ConnectionStatus.waitingForNetwork)) } else if !info.flags.contains(.Connected) { - connectionStatus?.set(.single(.connecting(proxyAddress: info.proxyAddress))) + connectionStatus?.set(.single(.connecting(proxyAddress: info.proxyAddress, proxyHasConnectionIssues: info.flags.contains(.ProxyHasConnectionIssues)))) } else if !info.flags.intersection([.UpdatingConnectionContext, .PerformingServiceTasks]).isEmpty { connectionStatus?.set(.single(.updating(proxyAddress: info.proxyAddress))) } else { diff --git a/TelegramCore/PendingMessageUploadedContent.swift b/TelegramCore/PendingMessageUploadedContent.swift index a6fcbff2f4..c7e78e0e33 100644 --- a/TelegramCore/PendingMessageUploadedContent.swift +++ b/TelegramCore/PendingMessageUploadedContent.swift @@ -90,7 +90,7 @@ func mediaContentToUpload(network: Network, postbox: Postbox, auxiliaryMethods: return .upload(uploadedMediaFileContent(network: network, postbox: postbox, auxiliaryMethods: auxiliaryMethods, transformOutgoingMessageMedia: transformOutgoingMessageMedia, messageMediaPreuploadManager: messageMediaPreuploadManager, peerId: peerId, messageId: messageId, text: text, attributes: attributes, file: file)) } } else if let contact = media as? TelegramMediaContact { - let input = Api.InputMedia.inputMediaContact(phoneNumber: contact.phoneNumber, firstName: contact.firstName, lastName: contact.lastName) + let input = Api.InputMedia.inputMediaContact(phoneNumber: contact.phoneNumber, firstName: contact.firstName, lastName: contact.lastName, vcard: contact.vCardData ?? "") return .ready(.media(input, text)) } else if let map = media as? TelegramMediaMap { let input: Api.InputMedia diff --git a/TelegramCore/ProcessSecretChatIncomingDecryptedOperations.swift b/TelegramCore/ProcessSecretChatIncomingDecryptedOperations.swift index 83333a818d..8270380d25 100644 --- a/TelegramCore/ProcessSecretChatIncomingDecryptedOperations.swift +++ b/TelegramCore/ProcessSecretChatIncomingDecryptedOperations.swift @@ -674,7 +674,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .decryptedMessageMediaGeoPoint(lat, long): parsedMedia.append(TelegramMediaMap(latitude: lat, longitude: long, geoPlace: nil, venue: nil, liveBroadcastingTimeout: nil)) case let .decryptedMessageMediaContact(phoneNumber, firstName, lastName, userId): - parsedMedia.append(TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: userId == 0 ? nil : PeerId(namespace: Namespaces.Peer.CloudUser, id: userId))) + parsedMedia.append(TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: userId == 0 ? nil : PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), vCardData: nil)) case let .decryptedMessageMediaVenue(lat, long, title, address, provider, venueId): parsedMedia.append(TelegramMediaMap(latitude: lat, longitude: long, geoPlace: nil, venue: MapVenue(title: title, address: address, provider: provider, id: venueId, type: nil), liveBroadcastingTimeout: nil)) case .decryptedMessageMediaEmpty: @@ -871,7 +871,7 @@ private func parseMessage(peerId: PeerId, authorId: PeerId, tagLocalIndex: Int32 case let .decryptedMessageMediaGeoPoint(lat, long): parsedMedia.append(TelegramMediaMap(latitude: lat, longitude: long, geoPlace: nil, venue: nil, liveBroadcastingTimeout: nil)) case let .decryptedMessageMediaContact(phoneNumber, firstName, lastName, userId): - parsedMedia.append(TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: userId == 0 ? nil : PeerId(namespace: Namespaces.Peer.CloudUser, id: userId))) + parsedMedia.append(TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: userId == 0 ? nil : PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), vCardData: nil)) case let .decryptedMessageMediaVenue(lat, long, title, address, provider, venueId): parsedMedia.append(TelegramMediaMap(latitude: lat, longitude: long, geoPlace: nil, venue: MapVenue(title: title, address: address, provider: provider, id: venueId, type: nil), liveBroadcastingTimeout: nil)) case .decryptedMessageMediaEmpty: diff --git a/TelegramCore/SaveSecureIdValue.swift b/TelegramCore/SaveSecureIdValue.swift index dab871582f..6ca1671a8c 100644 --- a/TelegramCore/SaveSecureIdValue.swift +++ b/TelegramCore/SaveSecureIdValue.swift @@ -294,3 +294,23 @@ public func dropSecureId(network: Network, currentPassword: String) -> Signal Signal<[SecureIdValueWithContext], GetAllSecureIdValuesError> { + return network.request(Api.functions.account.getAllSecureValues()) + |> mapError { _ -> GetAllSecureIdValuesError in + return .generic + } + |> map { result -> [SecureIdValueWithContext] in + var values: [SecureIdValueWithContext] = [] + for value in result { + if let parsedValue = parseSecureValue(context: context, value: value, errors: []) { + values.append(parsedValue.valueWithContext) + } + } + return values + } +} diff --git a/TelegramCore/Serialization.swift b/TelegramCore/Serialization.swift index 84e19f4854..eec8699ca8 100644 --- a/TelegramCore/Serialization.swift +++ b/TelegramCore/Serialization.swift @@ -208,7 +208,7 @@ public class BoxedMessage: NSObject { public class Serialization: NSObject, MTSerialization { public func currentLayer() -> UInt { - return 81 + return 82 } public func parseMessage(_ data: Data!) -> Any! { diff --git a/TelegramCore/StoreMessage_Telegram.swift b/TelegramCore/StoreMessage_Telegram.swift index c159be2e08..0686aba1a5 100644 --- a/TelegramCore/StoreMessage_Telegram.swift +++ b/TelegramCore/StoreMessage_Telegram.swift @@ -164,7 +164,7 @@ func apiMessagePeerIds(_ message: Api.Message) -> [PeerId] { if let media = media { switch media { - case let .messageMediaContact(_, _, _, userId): + case let .messageMediaContact(_, _, _, _, userId): if userId != 0 { result.append(PeerId(namespace: Namespaces.Peer.CloudUser, id: userId)) } @@ -275,9 +275,9 @@ func textMediaAndExpirationTimerFromApiMedia(_ media: Api.MessageMedia?, _ peerI } else { return (TelegramMediaExpiredContent(data: .image), nil) } - case let .messageMediaContact(phoneNumber, firstName, lastName, userId): + case let .messageMediaContact(phoneNumber, firstName, lastName, vcard, userId): let contactPeerId: PeerId? = userId == 0 ? nil : PeerId(namespace: Namespaces.Peer.CloudUser, id: userId) - let mediaContact = TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: contactPeerId) + let mediaContact = TelegramMediaContact(firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, peerId: contactPeerId, vCardData: vcard.isEmpty ? nil : vcard) return (mediaContact, nil) case let .messageMediaGeo(geo): let mediaMap = telegramMediaMapFromApiGeoPoint(geo, title: nil, address: nil, provider: nil, venueId: nil, venueType: nil, liveBroadcastingTimeout: nil) diff --git a/TelegramCore/TelegramMediaContact.swift b/TelegramCore/TelegramMediaContact.swift index 2d14d5138d..fccb12edad 100644 --- a/TelegramCore/TelegramMediaContact.swift +++ b/TelegramCore/TelegramMediaContact.swift @@ -11,13 +11,16 @@ public final class TelegramMediaContact: Media { public let lastName: String public let phoneNumber: String public let peerId: PeerId? + public let vCardData: String? + public let peerIds: [PeerId] - public init(firstName: String, lastName: String, phoneNumber: String, peerId: PeerId?) { + public init(firstName: String, lastName: String, phoneNumber: String, peerId: PeerId?, vCardData: String?) { self.firstName = firstName self.lastName = lastName self.phoneNumber = phoneNumber self.peerId = peerId + self.vCardData = vCardData if let peerId = peerId { self.peerIds = [peerId] } else { @@ -36,6 +39,7 @@ public final class TelegramMediaContact: Media { self.peerId = nil self.peerIds = [] } + self.vCardData = decoder.decodeOptionalStringForKey("vc") } public func encode(_ encoder: PostboxEncoder) { @@ -45,11 +49,16 @@ public final class TelegramMediaContact: Media { if let peerId = self.peerId { encoder.encodeInt64(peerId.toInt64(), forKey: "p") } + if let vCardData = self.vCardData { + encoder.encodeString(vCardData, forKey: "vc") + } else { + encoder.encodeNil(forKey: "vc") + } } public func isEqual(_ other: Media) -> Bool { if let other = other as? TelegramMediaContact { - if self.id == other.id && self.firstName == other.firstName && self.lastName == other.lastName && self.phoneNumber == other.phoneNumber && self.peerId == other.peerId && self.peerIds == other.peerIds { + if self.id == other.id && self.firstName == other.firstName && self.lastName == other.lastName && self.phoneNumber == other.phoneNumber && self.peerId == other.peerId && self.vCardData == other.vCardData && self.peerIds == other.peerIds { return true } }