diff --git a/submodules/DebugSettingsUI/Sources/DebugController.swift b/submodules/DebugSettingsUI/Sources/DebugController.swift index 6cf74b405b..6af1749af9 100644 --- a/submodules/DebugSettingsUI/Sources/DebugController.swift +++ b/submodules/DebugSettingsUI/Sources/DebugController.swift @@ -101,6 +101,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { case compressedEmojiCache(Bool) case storiesJpegExperiment(Bool) case conferenceDebug(Bool) + case checkSerializedData(Bool) case enableQuickReactionSwitch(Bool) case disableReloginTokens(Bool) case liveStreamV2(Bool) @@ -133,7 +134,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return DebugControllerSection.web.rawValue case .keepChatNavigationStack, .skipReadHistory, .dustEffect, .crashOnSlowQueries, .crashOnMemoryPressure: return DebugControllerSection.experiments.rawValue - case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .conferenceDebug, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .rippleEffect, .browserExperiment, .localTranscription, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .fakeAds, .enableLocalTranslation: + case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .conferenceDebug, .checkSerializedData, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .rippleEffect, .browserExperiment, .localTranscription, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .fakeAds, .enableLocalTranslation: return DebugControllerSection.experiments.rawValue case .logTranslationRecognition, .resetTranslationStates: return DebugControllerSection.translation.rawValue @@ -244,12 +245,14 @@ private enum DebugControllerEntry: ItemListNodeEntry { return 48 case .conferenceDebug: return 49 - case .enableQuickReactionSwitch: + case .checkSerializedData: return 50 - case .liveStreamV2: + case .enableQuickReactionSwitch: return 51 - case .experimentalCallMute: + case .liveStreamV2: return 52 + case .experimentalCallMute: + return 53 case .playerV2: return 54 case .devRequests: @@ -1318,6 +1321,16 @@ private enum DebugControllerEntry: ItemListNodeEntry { }) }).start() }) + case let .checkSerializedData(value): + return ItemListSwitchItem(presentationData: presentationData, title: "Check Serialized Data", value: value, sectionId: self.section, style: .blocks, updated: { value in + let _ = arguments.sharedContext.accountManager.transaction ({ transaction in + transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in + var settings = settings?.get(ExperimentalUISettings.self) ?? ExperimentalUISettings.defaultSettings + settings.checkSerializedData = value + return PreferencesEntry(settings) + }) + }).start() + }) case let .enableQuickReactionSwitch(value): return ItemListSwitchItem(presentationData: presentationData, title: "Enable Quick Reaction", value: value, sectionId: self.section, style: .blocks, updated: { value in let _ = arguments.sharedContext.accountManager.transaction ({ transaction in @@ -1540,6 +1553,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present entries.append(.disableReloginTokens(experimentalSettings.disableReloginTokens)) entries.append(.conferenceDebug(experimentalSettings.conferenceDebug)) + entries.append(.checkSerializedData(experimentalSettings.checkSerializedData)) entries.append(.enableQuickReactionSwitch(!experimentalSettings.disableQuickReaction)) entries.append(.liveStreamV2(experimentalSettings.liveStreamV2)) entries.append(.experimentalCallMute(experimentalSettings.experimentalCallMute)) diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_CachedUserData.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_CachedUserData.swift index 4c9aea792a..b81e40f648 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_CachedUserData.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_CachedUserData.swift @@ -337,13 +337,13 @@ public struct PeerEmojiStatus: Equatable, Codable { switch flatBuffersObject.valueType { case .peeremojistatuscontentemoji: guard let emoji = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentEmoji.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .emoji(fileId: emoji.fileId) case .peeremojistatuscontentstargift: guard let starGift = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentStarGift.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .starGift( id: starGift.id, @@ -358,7 +358,7 @@ public struct PeerEmojiStatus: Equatable, Codable { ) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_CloudFileMediaResource.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_CloudFileMediaResource.swift index 8119febf8f..b3568d693e 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_CloudFileMediaResource.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_CloudFileMediaResource.swift @@ -970,7 +970,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram switch flatBuffersObject.valueType { case .telegrammediaresourceCloudfilemediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudFileMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return CloudFileMediaResource( datacenterId: Int(value.datacenterId), @@ -982,7 +982,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceClouddocumentsizemediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentSizeMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return CloudDocumentSizeMediaResource( datacenterId: value.datacenterId, @@ -993,7 +993,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceCloudphotosizemediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPhotoSizeMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return CloudPhotoSizeMediaResource( datacenterId: value.datacenterId, @@ -1005,7 +1005,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceCloudpeerphotosizemediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPeerPhotoSizeMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } let sizeSpec: CloudPeerPhotoSizeSpec switch value.sizeSpec { @@ -1023,7 +1023,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceCloudstickerpackthumbnailmediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudStickerPackThumbnailMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return CloudStickerPackThumbnailMediaResource( datacenterId: value.datacenterId, @@ -1033,7 +1033,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceClouddocumentmediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return CloudDocumentMediaResource( datacenterId: Int(value.datacenterId), @@ -1045,7 +1045,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram ) case .telegrammediaresourceLocalfilemediaresource: guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_LocalFileMediaResource.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return LocalFileMediaResource( fileId: value.fileId, @@ -1053,7 +1053,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram isSecretRelated: value.isSecretRelated ) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_InstantPage.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_InstantPage.swift index b00622915e..a721277bd6 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_InstantPage.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_InstantPage.swift @@ -522,139 +522,139 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable { self = .unsupported case .instantpageblockTitle: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Title.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .title(try RichText(flatBuffersObject: value.text)) case .instantpageblockSubtitle: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subtitle.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .subtitle(try RichText(flatBuffersObject: value.text)) case .instantpageblockAuthordate: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_AuthorDate.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .authorDate(author: try RichText(flatBuffersObject: value.author), date: value.date) case .instantpageblockHeader: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Header.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .header(try RichText(flatBuffersObject: value.text)) case .instantpageblockSubheader: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subheader.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .subheader(try RichText(flatBuffersObject: value.text)) case .instantpageblockParagraph: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Paragraph.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .paragraph(try RichText(flatBuffersObject: value.text)) case .instantpageblockPreformatted: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Preformatted.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .preformatted(try RichText(flatBuffersObject: value.text)) case .instantpageblockFooter: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Footer.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .footer(try RichText(flatBuffersObject: value.text)) case .instantpageblockDivider: self = .divider case .instantpageblockAnchor: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Anchor.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .anchor(value.name) case .instantpageblockList: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_List.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .list(items: try (0 ..< value.itemsCount).map { try InstantPageListItem(flatBuffersObject: value.items(at: $0)!) }, ordered: value.ordered) case .instantpageblockBlockquote: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_BlockQuote.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .blockQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption)) case .instantpageblockPullquote: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PullQuote.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .pullQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption)) case .instantpageblockImage: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Image.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .image(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), url: value.url, webpageId: value.webpageId.flatMap(MediaId.init)) case .instantpageblockVideo: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Video.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .video(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), autoplay: value.autoplay, loop: value.loop) case .instantpageblockAudio: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Audio.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .audio(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption)) case .instantpageblockCover: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Cover.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .cover(try InstantPageBlock(flatBuffersObject: value.block)) case .instantpageblockWebembed: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_WebEmbed.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .webEmbed(url: value.url, html: value.html, dimensions: value.dimensions.flatMap(PixelDimensions.init), caption: try InstantPageCaption(flatBuffersObject: value.caption), stretchToWidth: value.stretchToWidth, allowScrolling: value.allowScrolling, coverId: value.coverId.flatMap(MediaId.init)) case .instantpageblockPostembed: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PostEmbed.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .postEmbed(url: value.url, webpageId: value.webpageId.flatMap(MediaId.init), avatarId: value.avatarId.flatMap(MediaId.init), author: value.author, date: value.date, blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) case .instantpageblockCollage: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Collage.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .collage(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) case .instantpageblockSlideshow: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Slideshow.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .slideshow(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) case .instantpageblockChannelbanner: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_ChannelBanner.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } let channel = try value.channel.flatMap { try TelegramChannel(flatBuffersObject: $0) } self = .channelBanner(channel) case .instantpageblockKicker: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Kicker.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .kicker(try RichText(flatBuffersObject: value.text)) case .instantpageblockTable: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Table.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .table(title: try RichText(flatBuffersObject: value.title), rows: try (0 ..< value.rowsCount).map { try InstantPageTableRow(flatBuffersObject: value.rows(at: $0)!) }, bordered: value.bordered, striped: value.striped) case .instantpageblockDetails: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Details.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .details(title: try RichText(flatBuffersObject: value.title), blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, expanded: value.expanded) case .instantpageblockRelatedarticles: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_RelatedArticles.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .relatedArticles(title: try RichText(flatBuffersObject: value.title), articles: try (0 ..< value.articlesCount).map { try InstantPageRelatedArticle(flatBuffersObject: value.articles(at: $0)!) }) case .instantpageblockMap: guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Map.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .map(latitude: value.latitude, longitude: value.longitude, zoom: value.zoom, dimensions: PixelDimensions(value.dimensions), caption: try InstantPageCaption(flatBuffersObject: value.caption)) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } @@ -1023,13 +1023,13 @@ public indirect enum InstantPageListItem: PostboxCoding, Equatable { switch flatBuffersObject.valueType { case .instantpagelistitemText: guard let textValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Text.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .text(try RichText(flatBuffersObject: textValue.text), textValue.number) case .instantpagelistitemBlocks: guard let blocksValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Blocks.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } let blocks = try (0 ..< blocksValue.blocksCount).map { i in return try InstantPageBlock(flatBuffersObject: blocksValue.blocks(at: i)!) @@ -1038,7 +1038,7 @@ public indirect enum InstantPageListItem: PostboxCoding, Equatable { case .instantpagelistitemUnknown: self = .unknown case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReferenceFlatBuffers.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReferenceFlatBuffers.swift index 776cfd00f0..1fd6e987de 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReferenceFlatBuffers.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReferenceFlatBuffers.swift @@ -79,7 +79,7 @@ public extension PartialMediaReference { switch flatBuffersObject.valueType { case .partialmediareferenceMessage: guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_Message.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } if let message = value.message { self = .message(message: try MessageReference(flatBuffersObject: message)) @@ -88,7 +88,7 @@ public extension PartialMediaReference { } case .partialmediareferenceWebpage: guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_WebPage.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } if let webPage = value.webPage { self = .webPage(webPage: try WebpageReference(flatBuffersObject: webPage)) @@ -97,7 +97,7 @@ public extension PartialMediaReference { } case .partialmediareferenceStickerpack: guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_StickerPack.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .stickerPack(stickerPack: try StickerPackReference(flatBuffersObject: value.stickerPack)) case .partialmediareferenceSavedgif: @@ -107,7 +107,7 @@ public extension PartialMediaReference { case .partialmediareferenceRecentsticker: self = .recentSticker case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerAccessHash.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerAccessHash.swift index b7e3d540ea..d0554d4198 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerAccessHash.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerAccessHash.swift @@ -19,16 +19,16 @@ public enum TelegramPeerAccessHash: Hashable { switch flatBuffersObject.valueType { case .telegrampeeraccesshashPersonal: guard let personal = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_Personal.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .personal(personal.accessHash) case .telegrampeeraccesshashGenericpublic: guard let genericPublic = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_GenericPublic.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .genericPublic(genericPublic.accessHash) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerReference.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerReference.swift index a012c16601..d2b949878f 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerReference.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_PeerReference.swift @@ -80,21 +80,21 @@ public enum PeerReference: PostboxCoding, Hashable, Equatable { switch flatBuffersObject.valueType { case .peerreferenceUser: guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_User.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .user(id: value.id, accessHash: value.accessHash) case .peerreferenceGroup: guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Group.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .group(id: value.id) case .peerreferenceChannel: guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Channel.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .channel(id: value.id, accessHash: value.accessHash) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_RichText.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_RichText.swift index 406e91a74a..69311fda00 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_RichText.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_RichText.swift @@ -302,79 +302,79 @@ extension RichText { self = .empty case .richtextPlain: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Plain.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .plain(value.text) case .richtextBold: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Bold.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .bold(try RichText(flatBuffersObject: value.text)) case .richtextItalic: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Italic.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .italic(try RichText(flatBuffersObject: value.text)) case .richtextUnderline: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Underline.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .underline(try RichText(flatBuffersObject: value.text)) case .richtextStrikethrough: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Strikethrough.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .strikethrough(try RichText(flatBuffersObject: value.text)) case .richtextFixed: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Fixed.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .fixed(try RichText(flatBuffersObject: value.text)) case .richtextUrl: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Url.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .url(text: try RichText(flatBuffersObject: value.text), url: value.url, webpageId: value.webpageId.flatMap { MediaId($0) }) case .richtextEmail: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Email.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .email(text: try RichText(flatBuffersObject: value.text), email: value.email) case .richtextConcat: guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Concat.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } self = .concat(try (0..( byteBuffer: inout ByteBuffer, fileId: String? = nil, options: VerifierOptions = .init() ) -> T { - return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options) + if flatBuffers_checkedGet { + return getRoot(byteBuffer: &byteBuffer) + } else { + return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options) + } } -#else -@inline(__always) -public func FlatBuffers_getRoot(byteBuffer: inout ByteBuffer) -> T { - return getRoot(byteBuffer: &byteBuffer) -} -#endif public enum FlatBuffersError: Error { - case missingRequiredField(file: String, line: Int) + case value_missingRequiredField(file: String, line: Int) case invalidUnionType + + public static func missingRequiredField(file: String = #file, line: Int = #line) -> FlatBuffersError { + if flatBuffers_checkedGet { + preconditionFailure() + } + + return .value_missingRequiredField(file: file, line: line) + } } public extension PeerId { diff --git a/submodules/TelegramCore/Sources/Utils/TelegramMedia_FlatBuffers.swift b/submodules/TelegramCore/Sources/Utils/TelegramMedia_FlatBuffers.swift index f87d067282..e33ec795c9 100644 --- a/submodules/TelegramCore/Sources/Utils/TelegramMedia_FlatBuffers.swift +++ b/submodules/TelegramCore/Sources/Utils/TelegramMedia_FlatBuffers.swift @@ -8,16 +8,16 @@ public func TelegramMedia_parse(flatBuffersObject: TelegramCore_Media) throws -> switch flatBuffersObject.valueType { case .mediaTelegrammediafile: guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaFile.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return try TelegramMediaFile(flatBuffersObject: value.file) case .mediaTelegrammediaimage: guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaImage.self) else { - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } return try TelegramMediaImage(flatBuffersObject: value.image) case .none_: - throw FlatBuffersError.missingRequiredField(file: #file, line: #line) + throw FlatBuffersError.missingRequiredField() } } diff --git a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift index 18beed096d..f98202cd0b 100644 --- a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift +++ b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift @@ -65,6 +65,7 @@ public struct ExperimentalUISettings: Codable, Equatable { public var devRequests: Bool public var fakeAds: Bool public var conferenceDebug: Bool + public var checkSerializedData: Bool public static var defaultSettings: ExperimentalUISettings { return ExperimentalUISettings( @@ -107,7 +108,8 @@ public struct ExperimentalUISettings: Codable, Equatable { playerV2: false, devRequests: false, fakeAds: false, - conferenceDebug: false + conferenceDebug: false, + checkSerializedData: false ) } @@ -151,7 +153,8 @@ public struct ExperimentalUISettings: Codable, Equatable { playerV2: Bool, devRequests: Bool, fakeAds: Bool, - conferenceDebug: Bool + conferenceDebug: Bool, + checkSerializedData: Bool ) { self.keepChatNavigationStack = keepChatNavigationStack self.skipReadHistory = skipReadHistory @@ -193,6 +196,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.devRequests = devRequests self.fakeAds = fakeAds self.conferenceDebug = conferenceDebug + self.checkSerializedData = checkSerializedData } public init(from decoder: Decoder) throws { @@ -238,6 +242,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.devRequests = try container.decodeIfPresent(Bool.self, forKey: "devRequests") ?? false self.fakeAds = try container.decodeIfPresent(Bool.self, forKey: "fakeAds") ?? false self.conferenceDebug = try container.decodeIfPresent(Bool.self, forKey: "conferenceDebug") ?? false + self.checkSerializedData = try container.decodeIfPresent(Bool.self, forKey: "checkSerializedData") ?? false } public func encode(to encoder: Encoder) throws { @@ -283,6 +288,7 @@ public struct ExperimentalUISettings: Codable, Equatable { try container.encodeIfPresent(self.devRequests, forKey: "devRequests") try container.encodeIfPresent(self.fakeAds, forKey: "fakeAds") try container.encodeIfPresent(self.conferenceDebug, forKey: "conferenceDebug") + try container.encodeIfPresent(self.checkSerializedData, forKey: "checkSerializedData") } }