From a49f04203ee3e4b2cbda2d68a4f64fffbaeec629 Mon Sep 17 00:00:00 2001 From: Peter <> Date: Mon, 12 Aug 2019 19:18:43 +0300 Subject: [PATCH] Refactor PasswordSetupUI, PassportUI, GalleryUI and related modules --- .../contents.xcworkspacedata | 109 ++- .../project.pbxproj | 8 + .../Sources/AccountContext.swift | 41 + .../Sources}/FetchMediaUtils.swift | 17 +- .../Sources}/IsMediaStreamable.swift | 4 +- .../project.pbxproj | 579 +++++++++++++ submodules/CountrySelectionUI/Info.plist | 22 + ...onSequenceCountrySelectionController.swift | 22 +- ...quenceCountrySelectionControllerNode.swift | 0 .../Sources}/CountryList.swift | 11 +- .../Sources/CountrySelectionUI.h | 19 + .../Sources/FrameworkBundle.swift | 13 + .../project.pbxproj | 571 +++++++++++++ submodules/DateSelectionUI/Info.plist | 22 + .../DateSelectionActionSheetController.swift | 13 +- .../DateSelectionUI/Sources/DateSelectionUI.h | 19 + .../GalleryUI_Xcode.xcodeproj/project.pbxproj | 703 ++++++++++++++++ submodules/GalleryUI/Info.plist | 22 + .../ChatItemGalleryFooterContentNode.swift | 11 +- .../ChatVideoGalleryItemScrubberView.swift | 0 .../GalleryUI/Sources/FrameworkBundle.swift | 14 + .../Sources}/GalleryController.swift | 55 +- .../Sources}/GalleryControllerNode.swift | 60 +- .../GalleryControllerPresentationState.swift | 17 + .../Sources/GalleryFooterContentNode.swift | 33 + .../Sources}/GalleryFooterNode.swift | 8 +- .../GalleryUI/Sources/GalleryItem.swift | 27 + .../Sources}/GalleryItemNode.swift | 14 +- .../Sources/GalleryItemTransitionNode.swift | 7 + .../Sources}/GalleryNavigationCheckNode.swift | 16 +- .../GalleryNavigationRecipientNode.swift | 10 +- .../Sources}/GalleryPagerNode.swift | 69 +- .../GalleryThumbnailContainerNode.swift | 30 +- submodules/GalleryUI/Sources/GalleryUI.h | 19 + .../Sources}/GalleryVideoDecoration.swift | 24 +- .../Items}/ChatAnimationGalleryItem.swift | 0 .../Items}/ChatDocumentGalleryItem.swift | 0 .../Items}/ChatExternalFileGalleryItem.swift | 0 .../Sources/Items}/ChatImageGalleryItem.swift | 0 .../Items}/UniversalVideoGalleryItem.swift | 19 +- .../SecretMediaPreviewController.swift | 1 + .../SecretMediaPreviewFooterContentNode.swift | 0 .../ZoomableContentGalleryItemNode.swift | 18 +- .../GameUI_Xcode.xcodeproj/project.pbxproj | 591 +++++++++++++ submodules/GameUI/Info.plist | 22 + .../Sources}/GameController.swift | 19 +- .../Sources}/GameControllerNode.swift | 0 .../Sources}/GameControllerTitleView.swift | 1 - submodules/GameUI/Sources/GameUI.h | 19 + .../project.pbxproj | 551 +++++++++++++ submodules/ImageCompression/Info.plist | 22 + .../Sources/ImageCompression.h | 19 + .../Sources}/ImageCompression.swift | 9 +- submodules/LegacyUI/Info.plist | 22 + .../LegacyUI_Xcode.xcodeproj/project.pbxproj | 627 ++++++++++++++ .../Sources}/LegacyComponentsStickers.swift | 0 .../Sources}/LegacyController.swift | 46 +- .../Sources}/LegacyControllerNode.swift | 0 .../Sources}/LegacyEmptyController.swift | 10 +- .../Sources}/LegacyHTTPOperationImpl.swift | 0 .../Sources}/LegacyImageDownloadActor.swift | 0 .../LegacyLocationVenueIconDataSource.swift | 0 .../Sources}/LegacyMediaLocations.swift | 0 .../Sources}/LegacyNavigationController.swift | 2 +- ...egacyPeerAvatarPlaceholderDataSource.swift | 0 submodules/LegacyUI/Sources/LegacyUI.h | 19 + .../TelegramInitializeLegacyComponents.swift | 2 +- .../FFMpegMediaFrameSourceContext.swift | 23 +- submodules/OpenInExternalAppUI/Info.plist | 22 + .../project.pbxproj | 603 ++++++++++++++ .../Sources/FrameworkBundle.swift | 13 + .../OpenInActionSheetController.swift | 17 +- .../Sources}/OpenInAppIconResources.swift | 2 +- .../Sources/OpenInExternalAppUI.h | 19 + .../Sources}/OpenInOptions.swift | 18 +- submodules/PassportUI/Info.plist | 22 + .../project.pbxproj | 775 ++++++++++++++++++ .../Sources}/FindSecureIdValue.swift | 0 .../Sources/Form}/FormBlockItemNode.swift | 0 .../Sources/Form}/FormController.swift | 12 +- .../Form}/FormControllerActionItem.swift | 0 .../FormControllerDetailActionItem.swift | 0 .../Form}/FormControllerHeaderItem.swift | 0 .../Sources/Form}/FormControllerItem.swift | 12 +- .../Sources/Form}/FormControllerNode.swift | 10 +- .../Form}/FormControllerScrollerNode.swift | 0 .../Form}/FormControllerTextInputItem.swift | 0 .../Form}/FormControllerTextItem.swift | 0 .../Form}/FormEditableBlockItemNode.swift | 0 .../PassportUI/Sources/FrameworkBundle.swift | 13 + .../LegacySecureIdAttachmentMenu.swift | 2 + .../LegacySecureIdScanController.swift | 1 + submodules/PassportUI/Sources/PassportUI.h | 19 + .../Sources}/SecureIdAuthAcceptNode.swift | 0 .../Sources}/SecureIdAuthContentNode.swift | 0 .../Sources}/SecureIdAuthController.swift | 25 +- .../Sources}/SecureIdAuthControllerNode.swift | 0 .../SecureIdAuthControllerState.swift | 0 .../SecureIdAuthFormContentNode.swift | 0 .../Sources}/SecureIdAuthFormFieldNode.swift | 1 + .../Sources}/SecureIdAuthHeaderNode.swift | 0 .../SecureIdAuthListContentNode.swift | 0 .../Sources}/SecureIdAuthListFieldNode.swift | 0 ...ecureIdAuthPasswordOptionContentNode.swift | 0 ...SecureIdAuthPasswordSetupContentNode.swift | 0 .../SecureIdDocumentFormController.swift | 0 .../SecureIdDocumentFormControllerNode.swift | 3 + .../SecureIdDocumentGalleryController.swift | 1 + ...reIdDocumentGalleryFooterContentNode.swift | 1 + .../SecureIdDocumentImageGalleryItem.swift | 1 + ...ureIdDocumentTypeSelectionController.swift | 0 .../Sources}/SecureIdLocalResource.swift | 2 +- .../SecureIdPlaintextFormController.swift | 12 +- .../SecureIdPlaintextFormControllerNode.swift | 27 +- .../Sources}/SecureIdValueFormFileItem.swift | 0 .../Sources}/SecureIdValueFormPhoneItem.swift | 1 + .../Sources}/SecureIdValues.swift | 0 .../SecureIdVerificationDocument.swift | 0 ...SecureIdVerificationDocumentsContext.swift | 0 submodules/PasswordSetupUI/Info.plist | 22 + .../project.pbxproj | 599 ++++++++++++++ .../PasswordSetupUI/Sources/PasswordSetupUI.h | 19 + .../Sources}/ResetPasswordController.swift | 4 +- .../SetupTwoStepVerificationContentNode.swift | 0 .../SetupTwoStepVerificationController.swift | 8 +- ...tupTwoStepVerificationControllerNode.swift | 4 +- submodules/PhoneInputNode/Info.plist | 22 + .../project.pbxproj | 559 +++++++++++++ .../PhoneInputNode/Sources/PhoneInputNode.h | 19 + .../Sources}/PhoneInputNode.swift | 38 +- submodules/ScreenCaptureDetection/Info.plist | 22 + .../project.pbxproj | 551 +++++++++++++ .../Sources/ScreenCaptureDetection.h | 19 + .../Sources}/ScreenCaptureDetection.swift | 7 +- submodules/SearchBarNode/Info.plist | 22 + .../project.pbxproj | 487 +++++++++++ .../Sources/FrameworkBundle.swift | 13 + .../SearchBarNode/Sources/SearchBarNode.h | 19 + .../Sources}/SearchBarNode.swift | 72 +- .../Sources}/SearchBarPlaceholderNode.swift | 20 +- .../TelegramCore/MessageUtils.swift | 28 +- .../Sources}/CurrencyFormat.swift | 0 .../Sources/FrameworkBundle.swift | 6 + .../Sources/MessageContentKind.swift | 207 +++++ .../Sources/ServiceMessageStrings.swift | 436 ++++++++++ .../Sources}/StringForDuration.swift | 2 +- .../project.pbxproj | 32 + .../TelegramUI/TelegramUI/AppDelegate.swift | 4 +- .../TelegramUI/ApplicationContext.swift | 3 +- .../AuthorizationSequenceController.swift | 1 + ...rizationSequencePhoneEntryController.swift | 1 + ...tionSequencePhoneEntryControllerNode.swift | 2 + ...uthorizationSequenceSignUpController.swift | 1 + .../TelegramUI/AvatarGalleryController.swift | 1 + .../AvatarGalleryItemFooterContentNode.swift | 1 + .../TelegramUI/BlockedPeersController.swift | 2 +- .../BotCheckoutControllerNode.swift | 2 + .../BotCheckoutInfoController.swift | 1 + .../BotCheckoutInfoControllerNode.swift | 1 + ...BotCheckoutNativeCardEntryController.swift | 1 + ...heckoutNativeCardEntryControllerNode.swift | 1 + ...PaymentShippingOptionSheetController.swift | 1 + .../TelegramUI/BotReceiptControllerNode.swift | 1 + .../ChangePhoneNumberController.swift | 1 + .../ChangePhoneNumberControllerNode.swift | 2 + .../ChannelBlacklistController.swift | 2 +- ...hannelDiscussionGroupSetupSearchItem.swift | 1 + .../TelegramUI/ChannelInfoController.swift | 2 + .../TelegramUI/ChannelMembersController.swift | 4 +- .../ChannelMembersSearchControllerNode.swift | 1 + .../ChannelOwnershipTransferController.swift | 1 + .../ChannelPermissionsController.swift | 2 +- .../TelegramUI/ChatController.swift | 17 +- .../ChatInterfaceStateContextMenus.swift | 33 +- .../TelegramUI/ChatListControllerNode.swift | 1 + .../TelegramUI/ChatListItemStrings.swift | 1 + .../TelegramUI/ChatListSearchItem.swift | 1 + .../ChatMediaInputStickerGridItem.swift | 1 + .../ChatMessageActionItemNode.swift | 431 +--------- .../ChatMessageBubbleItemNode.swift | 1 + .../ChatMessageInteractiveFileNode.swift | 1 + ...atMessageInteractiveInstantVideoNode.swift | 1 + .../ChatMessageInteractiveMediaNode.swift | 23 +- .../ChatMessageInvoiceBubbleContentNode.swift | 1 + .../ChatMessageNotificationItem.swift | 1 + .../TelegramUI/ChatMessageReplyInfoNode.swift | 1 + .../ChatMessageSelectionInputPanelNode.swift | 3 +- .../ChatMessageTextBubbleContentNode.swift | 1 + .../ChatMessageWebpageBubbleContentNode.swift | 28 +- .../ChatPinnedMessageTitlePanelNode.swift | 1 + .../ChatRecentActionsControllerNode.swift | 7 +- ...ntActionsSearchNavigationContentNode.swift | 1 + .../ChatSearchNavigationContentNode.swift | 1 + .../ChatSlowmodeHintController.swift | 1 + ...ChatTextInputSlowmodePlaceholderNode.swift | 1 + .../TelegramUI/ComposeControllerNode.swift | 1 + .../ContactSelectionControllerNode.swift | 1 + .../TelegramUI/ContactsController.swift | 4 +- .../TelegramUI/ContactsControllerNode.swift | 1 + .../TelegramUI/CreateChannelController.swift | 1 + .../TelegramUI/CreateGroupController.swift | 1 + .../TelegramUI/CustomWallpaperPicker.swift | 1 + .../DeviceContactInfoController.swift | 2 +- .../TelegramUI/EditAccessoryPanelNode.swift | 1 + .../TelegramUI/EditSettingsController.swift | 2 + .../FetchPhotoLibraryImageResource.swift | 1 + .../GalleryControllerPresentationState.swift | 17 - .../TelegramUI/GalleryFooterContentNode.swift | 33 - .../TelegramUI/TelegramUI/GalleryItem.swift | 25 - .../TelegramUI/GroupInfoController.swift | 6 +- ...GroupInfoSearchNavigationContentNode.swift | 1 + .../HorizontalStickerGridItem.swift | 1 + .../TelegramUI/InstantImageGalleryItem.swift | 1 + .../InstantPageControllerNode.swift | 8 +- .../InstantPageGalleryController.swift | 3 + .../InstantPageGalleryFooterContentNode.swift | 1 + .../InstantPagePlayableVideoNode.swift | 12 +- .../InstantPageReferenceControllerNode.swift | 1 + .../InviteContactsControllerNode.swift | 1 + .../LanguageLinkPreviewController.swift | 2 +- .../TelegramUI/LegacyAttachmentMenu.swift | 1 + .../TelegramUI/LegacyAvatarPicker.swift | 1 + .../TelegramUI/TelegramUI/LegacyCamera.swift | 1 + .../LegacyICloudFileController.swift | 1 + .../TelegramUI/LegacyImagePicker.swift | 1 + .../LegacyInstantVideoController.swift | 2 + .../TelegramUI/LegacyLocationController.swift | 2 + .../TelegramUI/LegacyLocationPicker.swift | 1 + .../TelegramUI/LegacyMediaPickers.swift | 1 + .../TelegramUI/LegacySuggestionContext.swift | 1 + .../TelegramUI/LegacyWebSearchEditor.swift | 1 + .../TelegramUI/LegacyWebSearchGallery.swift | 1 + .../ListMessageSnippetItemNode.swift | 3 +- .../LocalizationListControllerNode.swift | 1 + .../MediaInputPaneTrendingItem.swift | 1 + .../TelegramUI/TelegramUI/MediaManager.swift | 1 + .../TelegramUI/MessageContentKind.swift | 207 ----- .../TelegramUI/TelegramUI/MessageUtils.swift | 21 - .../TelegramUI/NavigateToChatController.swift | 1 + .../NavigationBarSearchContentNode.swift | 1 + .../NotificationExceptionControllerNode.swift | 1 + .../TelegramUI/NotificationSearchItem.swift | 1 + .../TelegramUI/OpenAddContact.swift | 2 +- .../TelegramUI/OpenChatMessage.swift | 1 + .../TelegramUI/OpenResolvedUrl.swift | 3 +- .../TelegramUI/TelegramUI/OpenUrl.swift | 12 +- .../PeerAvatarImageGalleryItem.swift | 1 + .../TelegramUI/PeerInfoController.swift | 2 +- .../PeerMediaCollectionController.swift | 7 +- .../PeerMediaCollectionControllerNode.swift | 1 + .../PeerSelectionControllerNode.swift | 1 + .../TelegramUI/PermissionController.swift | 2 +- .../TelegramUI/ReplyAccessoryPanelNode.swift | 1 + .../TelegramUI/SearchDisplayController.swift | 1 + .../SecretChatKeyControllerNode.swift | 2 +- ...ectivePrivacySettingsPeersController.swift | 2 +- .../TelegramUI/SettingsController.swift | 3 + .../TelegramUI/SettingsSearchItem.swift | 1 + .../TelegramUI/SettingsSearchableItems.swift | 1 + .../TelegramUI/ShareExtensionContext.swift | 1 + .../TelegramUI/SharedAccountContext.swift | 15 +- .../TelegramUI/SharedMediaPlayer.swift | 1 + .../StickerPackPreviewGridItem.swift | 1 + .../StickerPaneSearchStickerItem.swift | 1 + .../StickersChatInputContextPanelItem.swift | 1 + .../TelegramAccountAuxiliaryMethods.swift | 2 + .../TelegramUI/TextLinkHandling.swift | 3 +- .../TelegramUI/ThemeGridControllerNode.swift | 1 + .../TransformOutgoingMessageMedia.swift | 1 + .../TwoStepVerificationUnlockController.swift | 1 + .../TelegramUI/UserInfoController.swift | 1 + .../WallpaperGalleryController.swift | 1 + .../TelegramUI/WallpaperGalleryItem.swift | 1 + .../TelegramUI/TelegramUI/WatchBridge.swift | 1 + .../TelegramUI/WatchRequestHandlers.swift | 1 + .../TelegramUI/WebSearchControllerNode.swift | 5 +- .../WebSearchGalleryController.swift | 2 + .../WebSearchGalleryFooterContentNode.swift | 1 + .../WebSearchNavigationContentNode.swift | 1 + .../WebSearchVideoGalleryItem.swift | 3 + .../WebpagePreviewAccessoryPanelNode.swift | 1 + .../project.pbxproj | 592 ++----------- .../TelegramUniversalVideoContent/Info.plist | 22 + .../ChatBubbleInstantVideoDecoration.swift | 22 +- .../Sources}/ChatBubbleVideoDecoration.swift | 31 +- .../Sources/FrameworkBundle.swift | 13 + .../Sources}/GenericEmbedImplementation.swift | 0 .../Sources}/NativeVideoContent.swift | 28 +- .../Sources}/OverlayUniversalVideoNode.swift | 20 +- .../Sources}/OverlayVideoDecoration.swift | 0 .../PictureInPictureVideoControlsNode.swift | 0 .../Sources}/PlatformVideoContent.swift | 54 +- .../Sources}/SystemVideoContent.swift | 12 +- .../Sources/TelegramUniversalVideoContent.h | 19 + .../UniversalVideoContentManager.swift | 19 +- .../Sources}/VimeoEmbedImplementation.swift | 0 .../Sources}/WebEmbedPlayerNode.swift | 14 +- .../Sources}/WebEmbedVideoContent.swift | 14 +- .../Sources}/YoutubeEmbedImplementation.swift | 0 .../project.pbxproj | 645 +++++++++++++++ .../AddFormatToStringWithRanges.swift | 3 +- .../project.pbxproj | 4 + submodules/WebUI/Info.plist | 22 + .../Sources}/WebController.swift | 10 +- .../Sources}/WebControllerNode.swift | 0 submodules/WebUI/Sources/WebUI.h | 19 + .../WebUI_Xcode.xcodeproj/project.pbxproj | 563 +++++++++++++ submodules/WebsiteType/Info.plist | 22 + submodules/WebsiteType/Sources/WebsiteType.h | 19 + .../WebsiteType/Sources/WebsiteType.swift | 18 + .../project.pbxproj | 531 ++++++++++++ 311 files changed, 11406 insertions(+), 1899 deletions(-) rename submodules/{TelegramUI/TelegramUI => AccountContext/Sources}/FetchMediaUtils.swift (72%) rename submodules/{TelegramUI/TelegramUI => AccountContext/Sources}/IsMediaStreamable.swift (87%) create mode 100644 submodules/CountrySelectionUI/CountrySelectionUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/CountrySelectionUI/Info.plist rename submodules/{TelegramUI/TelegramUI => CountrySelectionUI/Sources}/AuthorizationSequenceCountrySelectionController.swift (89%) rename submodules/{TelegramUI/TelegramUI => CountrySelectionUI/Sources}/AuthorizationSequenceCountrySelectionControllerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => CountrySelectionUI/Sources}/CountryList.swift (90%) create mode 100644 submodules/CountrySelectionUI/Sources/CountrySelectionUI.h create mode 100644 submodules/CountrySelectionUI/Sources/FrameworkBundle.swift create mode 100644 submodules/DateSelectionUI/DateSelectionUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/DateSelectionUI/Info.plist rename submodules/{TelegramUI/TelegramUI => DateSelectionUI/Sources}/DateSelectionActionSheetController.swift (92%) create mode 100644 submodules/DateSelectionUI/Sources/DateSelectionUI.h create mode 100644 submodules/GalleryUI/GalleryUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/GalleryUI/Info.plist rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/ChatItemGalleryFooterContentNode.swift (97%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/ChatVideoGalleryItemScrubberView.swift (100%) create mode 100644 submodules/GalleryUI/Sources/FrameworkBundle.swift rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryController.swift (93%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryControllerNode.swift (90%) create mode 100644 submodules/GalleryUI/Sources/GalleryControllerPresentationState.swift create mode 100644 submodules/GalleryUI/Sources/GalleryFooterContentNode.swift rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryFooterNode.swift (91%) create mode 100644 submodules/GalleryUI/Sources/GalleryItem.swift rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryItemNode.swift (85%) create mode 100644 submodules/GalleryUI/Sources/GalleryItemTransitionNode.swift rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryNavigationCheckNode.swift (69%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryNavigationRecipientNode.swift (81%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryPagerNode.swift (89%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryThumbnailContainerNode.swift (91%) create mode 100644 submodules/GalleryUI/Sources/GalleryUI.h rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/GalleryVideoDecoration.swift (88%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources/Items}/ChatAnimationGalleryItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources/Items}/ChatDocumentGalleryItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources/Items}/ChatExternalFileGalleryItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources/Items}/ChatImageGalleryItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources/Items}/UniversalVideoGalleryItem.swift (97%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/SecretMediaPreviewController.swift (99%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/SecretMediaPreviewFooterContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => GalleryUI/Sources}/ZoomableContentGalleryItemNode.swift (93%) create mode 100644 submodules/GameUI/GameUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/GameUI/Info.plist rename submodules/{TelegramUI/TelegramUI => GameUI/Sources}/GameController.swift (83%) rename submodules/{TelegramUI/TelegramUI => GameUI/Sources}/GameControllerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => GameUI/Sources}/GameControllerTitleView.swift (99%) create mode 100644 submodules/GameUI/Sources/GameUI.h create mode 100644 submodules/ImageCompression/ImageCompression_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/ImageCompression/Info.plist create mode 100644 submodules/ImageCompression/Sources/ImageCompression.h rename submodules/{TelegramUI/TelegramUI => ImageCompression/Sources}/ImageCompression.swift (86%) create mode 100644 submodules/LegacyUI/Info.plist create mode 100644 submodules/LegacyUI/LegacyUI_Xcode.xcodeproj/project.pbxproj rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyComponentsStickers.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyController.swift (91%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyControllerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyEmptyController.swift (85%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyHTTPOperationImpl.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyImageDownloadActor.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyLocationVenueIconDataSource.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyMediaLocations.swift (100%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyNavigationController.swift (56%) rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/LegacyPeerAvatarPlaceholderDataSource.swift (100%) create mode 100644 submodules/LegacyUI/Sources/LegacyUI.h rename submodules/{TelegramUI/TelegramUI => LegacyUI/Sources}/TelegramInitializeLegacyComponents.swift (99%) create mode 100644 submodules/OpenInExternalAppUI/Info.plist create mode 100644 submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/OpenInExternalAppUI/Sources/FrameworkBundle.swift rename submodules/{TelegramUI/TelegramUI => OpenInExternalAppUI/Sources}/OpenInActionSheetController.swift (95%) rename submodules/{TelegramUI/TelegramUI => OpenInExternalAppUI/Sources}/OpenInAppIconResources.swift (96%) create mode 100644 submodules/OpenInExternalAppUI/Sources/OpenInExternalAppUI.h rename submodules/{TelegramUI/TelegramUI => OpenInExternalAppUI/Sources}/OpenInOptions.swift (96%) create mode 100644 submodules/PassportUI/Info.plist create mode 100644 submodules/PassportUI/PassportUI_Xcode.xcodeproj/project.pbxproj rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/FindSecureIdValue.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormBlockItemNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormController.swift (80%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerActionItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerDetailActionItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerHeaderItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerItem.swift (78%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerNode.swift (97%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerScrollerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerTextInputItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormControllerTextItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources/Form}/FormEditableBlockItemNode.swift (100%) create mode 100644 submodules/PassportUI/Sources/FrameworkBundle.swift rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/LegacySecureIdAttachmentMenu.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/LegacySecureIdScanController.swift (99%) create mode 100644 submodules/PassportUI/Sources/PassportUI.h rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthAcceptNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthController.swift (95%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthControllerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthControllerState.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthFormContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthFormFieldNode.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthHeaderNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthListContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthListFieldNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthPasswordOptionContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdAuthPasswordSetupContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentFormController.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentFormControllerNode.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentGalleryController.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentGalleryFooterContentNode.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentImageGalleryItem.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdDocumentTypeSelectionController.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdLocalResource.swift (97%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdPlaintextFormController.swift (88%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdPlaintextFormControllerNode.swift (97%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdValueFormFileItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdValueFormPhoneItem.swift (99%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdValues.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdVerificationDocument.swift (100%) rename submodules/{TelegramUI/TelegramUI => PassportUI/Sources}/SecureIdVerificationDocumentsContext.swift (100%) create mode 100644 submodules/PasswordSetupUI/Info.plist create mode 100644 submodules/PasswordSetupUI/PasswordSetupUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/PasswordSetupUI/Sources/PasswordSetupUI.h rename submodules/{TelegramUI/TelegramUI => PasswordSetupUI/Sources}/ResetPasswordController.swift (98%) rename submodules/{TelegramUI/TelegramUI => PasswordSetupUI/Sources}/SetupTwoStepVerificationContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => PasswordSetupUI/Sources}/SetupTwoStepVerificationController.swift (94%) rename submodules/{TelegramUI/TelegramUI => PasswordSetupUI/Sources}/SetupTwoStepVerificationControllerNode.swift (99%) create mode 100644 submodules/PhoneInputNode/Info.plist create mode 100644 submodules/PhoneInputNode/PhoneInputNode_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/PhoneInputNode/Sources/PhoneInputNode.h rename submodules/{TelegramUI/TelegramUI => PhoneInputNode/Sources}/PhoneInputNode.swift (90%) create mode 100644 submodules/ScreenCaptureDetection/Info.plist create mode 100644 submodules/ScreenCaptureDetection/ScreenCaptureDetection_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.h rename submodules/{TelegramUI/TelegramUI => ScreenCaptureDetection/Sources}/ScreenCaptureDetection.swift (93%) create mode 100644 submodules/SearchBarNode/Info.plist create mode 100644 submodules/SearchBarNode/SearchBarNode_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/SearchBarNode/Sources/FrameworkBundle.swift create mode 100644 submodules/SearchBarNode/Sources/SearchBarNode.h rename submodules/{TelegramUI/TelegramUI => SearchBarNode/Sources}/SearchBarNode.swift (92%) rename submodules/{TelegramUI/TelegramUI => SearchBarNode/Sources}/SearchBarPlaceholderNode.swift (92%) rename submodules/{TelegramUI/TelegramUI => TelegramStringFormatting/Sources}/CurrencyFormat.swift (100%) create mode 100644 submodules/TelegramStringFormatting/Sources/FrameworkBundle.swift create mode 100644 submodules/TelegramStringFormatting/Sources/MessageContentKind.swift create mode 100644 submodules/TelegramStringFormatting/Sources/ServiceMessageStrings.swift rename submodules/{TelegramUI/TelegramUI => TelegramStringFormatting/Sources}/StringForDuration.swift (85%) delete mode 100644 submodules/TelegramUI/TelegramUI/GalleryControllerPresentationState.swift delete mode 100644 submodules/TelegramUI/TelegramUI/GalleryFooterContentNode.swift delete mode 100644 submodules/TelegramUI/TelegramUI/GalleryItem.swift delete mode 100644 submodules/TelegramUI/TelegramUI/MessageContentKind.swift delete mode 100644 submodules/TelegramUI/TelegramUI/MessageUtils.swift create mode 100644 submodules/TelegramUniversalVideoContent/Info.plist rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/ChatBubbleInstantVideoDecoration.swift (80%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/ChatBubbleVideoDecoration.swift (86%) create mode 100644 submodules/TelegramUniversalVideoContent/Sources/FrameworkBundle.swift rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/GenericEmbedImplementation.swift (100%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/NativeVideoContent.swift (92%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/OverlayUniversalVideoNode.swift (82%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/OverlayVideoDecoration.swift (100%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/PictureInPictureVideoControlsNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/PlatformVideoContent.swift (89%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/SystemVideoContent.swift (96%) create mode 100644 submodules/TelegramUniversalVideoContent/Sources/TelegramUniversalVideoContent.h rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/UniversalVideoContentManager.swift (92%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/VimeoEmbedImplementation.swift (100%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/WebEmbedPlayerNode.swift (95%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/WebEmbedVideoContent.swift (92%) rename submodules/{TelegramUI/TelegramUI => TelegramUniversalVideoContent/Sources}/YoutubeEmbedImplementation.swift (100%) create mode 100644 submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent_Xcode.xcodeproj/project.pbxproj rename submodules/{TelegramUI/TelegramUI => TextFormat/Sources}/AddFormatToStringWithRanges.swift (84%) create mode 100644 submodules/WebUI/Info.plist rename submodules/{TelegramUI/TelegramUI => WebUI/Sources}/WebController.swift (70%) rename submodules/{TelegramUI/TelegramUI => WebUI/Sources}/WebControllerNode.swift (100%) create mode 100644 submodules/WebUI/Sources/WebUI.h create mode 100644 submodules/WebUI/WebUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/WebsiteType/Info.plist create mode 100644 submodules/WebsiteType/Sources/WebsiteType.h create mode 100644 submodules/WebsiteType/Sources/WebsiteType.swift create mode 100644 submodules/WebsiteType/WebsiteType_Xcode.xcodeproj/project.pbxproj diff --git a/Telegram-iOS.xcworkspace/contents.xcworkspacedata b/Telegram-iOS.xcworkspace/contents.xcworkspacedata index e38ba953a7..5e3d9ae7bd 100644 --- a/Telegram-iOS.xcworkspace/contents.xcworkspacedata +++ b/Telegram-iOS.xcworkspace/contents.xcworkspacedata @@ -38,10 +38,19 @@ location = "group:submodules/SaveToCameraRoll/SaveToCameraRoll_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TelegramNotices/TelegramNotices_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TelegramPermissions/TelegramPermissions_Xcode.xcodeproj"> + + + + + + + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TinyThumbnail/TinyThumbnail_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ImageTransparency/ImageTransparency_Xcode.xcodeproj"> + + @@ -96,7 +108,7 @@ location = "group:submodules/MediaResources/MediaResources_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/PhotoResources/PhotoResources_Xcode.xcodeproj"> @@ -119,17 +131,52 @@ + + + + + + + + + + + + + + + + + + + + + + + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/TouchDownGesture/TouchDownGesture_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/SwipeToDismissGesture/SwipeToDismissGesture_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/DirectionalPanGesture/DirectionalPanGesture_Xcode.xcodeproj"> + + @@ -176,16 +226,13 @@ + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/LegacyUI/LegacyUI_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj"> - - + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/AlertUI/AlertUI_Xcode.xcodeproj"> @@ -208,21 +255,9 @@ - - - - - - - - @@ -239,10 +274,28 @@ location = "group:submodules/ContextUI/ContextUI_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/ComposePollUI/ComposePollUI_Xcode.xcodeproj"> + location = "group:/Users/peter/build/telegram-temp/telegram-ios/submodules/UndoUI/UndoUI_Xcode.xcodeproj"> + + + + + + + + + + + + Bool func messageFromPreloadedChatHistoryViewForLocation(id: MessageId, location: ChatHistoryLocationInput, account: Account, chatLocation: ChatLocation, tagMask: MessageTags?) -> Signal<(MessageIndex?, Bool), NoError> func makeOverlayAudioPlayerController(context: AccountContext, peerId: PeerId, type: MediaManagerPlayerType, initialMessageId: MessageId, initialOrder: MusicPlaybackSettingsOrder, parentNavigationController: NavigationController?) -> ViewController & OverlayAudioPlayerController + func makePeerInfoController(context: AccountContext, peer: Peer) -> ViewController? + func openExternalUrl(context: AccountContext, urlContext: OpenURLContext, url: String, forceExternal: Bool, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void) + func chatAvailableMessageActions(postbox: Postbox, accountPeerId: PeerId, messageIds: Set) -> Signal func navigateToCurrentCall() var hasOngoingCall: ValuePromise { get } diff --git a/submodules/TelegramUI/TelegramUI/FetchMediaUtils.swift b/submodules/AccountContext/Sources/FetchMediaUtils.swift similarity index 72% rename from submodules/TelegramUI/TelegramUI/FetchMediaUtils.swift rename to submodules/AccountContext/Sources/FetchMediaUtils.swift index cef5730ee3..0afadbfd4b 100644 --- a/submodules/TelegramUI/TelegramUI/FetchMediaUtils.swift +++ b/submodules/AccountContext/Sources/FetchMediaUtils.swift @@ -4,23 +4,22 @@ import TelegramCore import Postbox import SwiftSignalKit import TelegramUIPreferences -import AccountContext public func freeMediaFileInteractiveFetched(account: Account, fileReference: FileMediaReference) -> Signal { return fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: fileReference.resourceReference(fileReference.media.resource)) } -func freeMediaFileInteractiveFetched(fetchManager: FetchManager, fileReference: FileMediaReference, priority: FetchManagerPriority) -> Signal { +public func freeMediaFileInteractiveFetched(fetchManager: FetchManager, fileReference: FileMediaReference, priority: FetchManagerPriority) -> Signal { let file = fileReference.media let mediaReference = AnyMediaReference.standalone(media: fileReference.media) return fetchManager.interactivelyFetched(category: fetchCategoryForFile(file), location: .chat(PeerId(namespace: 0, id: 0)), locationKey: .free, mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(file.resource), ranges: IndexSet(integersIn: 0 ..< Int(Int32.max) as Range), statsCategory: statsCategoryForFileWithAttributes(file.attributes), elevatedPriority: false, userInitiated: false, priority: priority, storeToDownloadsPeerType: nil) } -func freeMediaFileResourceInteractiveFetched(account: Account, fileReference: FileMediaReference, resource: MediaResource) -> Signal { +public func freeMediaFileResourceInteractiveFetched(account: Account, fileReference: FileMediaReference, resource: MediaResource) -> Signal { return fetchedMediaResource(mediaBox: account.postbox.mediaBox, reference: fileReference.resourceReference(resource)) } -func cancelFreeMediaFileInteractiveFetch(account: Account, file: TelegramMediaFile) { +public func cancelFreeMediaFileInteractiveFetch(account: Account, file: TelegramMediaFile) { account.postbox.mediaBox.cancelInteractiveResourceFetch(file.resource) } @@ -38,12 +37,12 @@ public func messageMediaFileInteractiveFetched(context: AccountContext, message: return messageMediaFileInteractiveFetched(fetchManager: context.fetchManager, messageId: message.id, messageReference: MessageReference(message), file: file, userInitiated: userInitiated, priority: .userInitiated) } -func messageMediaFileInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, file: TelegramMediaFile, ranges: IndexSet = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range), userInitiated: Bool, priority: FetchManagerPriority) -> Signal { +public func messageMediaFileInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, file: TelegramMediaFile, ranges: IndexSet = IndexSet(integersIn: 0 ..< Int(Int32.max) as Range), userInitiated: Bool, priority: FetchManagerPriority) -> Signal { let mediaReference = AnyMediaReference.message(message: messageReference, media: file) return fetchManager.interactivelyFetched(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(file.resource), ranges: ranges, statsCategory: statsCategoryForFileWithAttributes(file.attributes), elevatedPriority: false, userInitiated: userInitiated, priority: priority, storeToDownloadsPeerType: nil) } -func messageMediaFileCancelInteractiveFetch(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) { +public func messageMediaFileCancelInteractiveFetch(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) { context.fetchManager.cancelInteractiveFetches(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource) } @@ -51,15 +50,15 @@ public func messageMediaImageInteractiveFetched(context: AccountContext, message return messageMediaImageInteractiveFetched(fetchManager: context.fetchManager, messageId: message.id, messageReference: MessageReference(message), image: image, resource: resource, userInitiated: true, priority: .userInitiated, storeToDownloadsPeerType: storeToDownloadsPeerType) } -func messageMediaImageInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, image: TelegramMediaImage, resource: MediaResource, userInitiated: Bool, priority: FetchManagerPriority, storeToDownloadsPeerType: MediaAutoDownloadPeerType?) -> Signal { +public func messageMediaImageInteractiveFetched(fetchManager: FetchManager, messageId: MessageId, messageReference: MessageReference, image: TelegramMediaImage, resource: MediaResource, userInitiated: Bool, priority: FetchManagerPriority, storeToDownloadsPeerType: MediaAutoDownloadPeerType?) -> Signal { let mediaReference = AnyMediaReference.message(message: messageReference, media: image) return fetchManager.interactivelyFetched(category: .image, location: .chat(messageId.peerId), locationKey: .messageId(messageId), mediaReference: mediaReference, resourceReference: mediaReference.resourceReference(resource), ranges: FetchCompleteRange, statsCategory: .image, elevatedPriority: false, userInitiated: userInitiated, priority: priority, storeToDownloadsPeerType: storeToDownloadsPeerType) } -func messageMediaImageCancelInteractiveFetch(context: AccountContext, messageId: MessageId, image: TelegramMediaImage, resource: MediaResource) { +public func messageMediaImageCancelInteractiveFetch(context: AccountContext, messageId: MessageId, image: TelegramMediaImage, resource: MediaResource) { context.fetchManager.cancelInteractiveFetches(category: .image, location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: resource) } -func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) -> Signal { +public func messageMediaFileStatus(context: AccountContext, messageId: MessageId, file: TelegramMediaFile) -> Signal { return context.fetchManager.fetchStatus(category: fetchCategoryForFile(file), location: .chat(messageId.peerId), locationKey: .messageId(messageId), resource: file.resource) } diff --git a/submodules/TelegramUI/TelegramUI/IsMediaStreamable.swift b/submodules/AccountContext/Sources/IsMediaStreamable.swift similarity index 87% rename from submodules/TelegramUI/TelegramUI/IsMediaStreamable.swift rename to submodules/AccountContext/Sources/IsMediaStreamable.swift index a2528758e8..320dd7f351 100644 --- a/submodules/TelegramUI/TelegramUI/IsMediaStreamable.swift +++ b/submodules/AccountContext/Sources/IsMediaStreamable.swift @@ -2,7 +2,7 @@ import Foundation import Postbox import TelegramCore -func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool { +public func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool { if message.containsSecretMedia { return false } @@ -31,7 +31,7 @@ func isMediaStreamable(message: Message, media: TelegramMediaFile) -> Bool { return false } -func isMediaStreamable(media: TelegramMediaFile) -> Bool { +public func isMediaStreamable(media: TelegramMediaFile) -> Bool { guard let size = media.size else { return false } diff --git a/submodules/CountrySelectionUI/CountrySelectionUI_Xcode.xcodeproj/project.pbxproj b/submodules/CountrySelectionUI/CountrySelectionUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..93a5689204 --- /dev/null +++ b/submodules/CountrySelectionUI/CountrySelectionUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,579 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C2952300A11000FAB518 /* CountrySelectionUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C2A12300A18C00FAB518 /* AuthorizationSequenceCountrySelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */; }; + D0C9C2A22300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */; }; + D0C9C2A52300A19900FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A42300A19900FAB518 /* Foundation.framework */; }; + D0C9C2A72300A19C00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A62300A19C00FAB518 /* UIKit.framework */; }; + D0C9C2A92300A19F00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2A82300A19F00FAB518 /* Display.framework */; }; + D0C9C2AB2300A1A500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C2AD2300A1AC00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */; }; + D0C9C2AF2300A1B100FAB518 /* TelegramStringFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */; }; + D0C9C2B52300A1F300FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */; }; + D0C9C2D02300A2D400FAB518 /* SearchBarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */; }; + D0C9C4472300DE5100FAB518 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4462300DE5100FAB518 /* CountryList.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CountrySelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CountrySelectionUI.h; sourceTree = ""; }; + D0C9C2942300A11000FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionController.swift; sourceTree = ""; }; + D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionControllerNode.swift; sourceTree = ""; }; + D0C9C2A42300A19900FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C2A62300A19C00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C2A82300A19F00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramStringFormatting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; + D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SearchBarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4462300DE5100FAB518 /* CountryList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CountryList.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C28D2300A11000FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2D02300A2D400FAB518 /* SearchBarNode.framework in Frameworks */, + D0C9C2AF2300A1B100FAB518 /* TelegramStringFormatting.framework in Frameworks */, + D0C9C2AD2300A1AC00FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C2AB2300A1A500FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C2A92300A19F00FAB518 /* Display.framework in Frameworks */, + D0C9C2A72300A19C00FAB518 /* UIKit.framework in Frameworks */, + D0C9C2A52300A19900FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C2862300A11000FAB518 = { + isa = PBXGroup; + children = ( + D0C9C2942300A11000FAB518 /* Info.plist */, + D0C9C2922300A11000FAB518 /* Sources */, + D0C9C2912300A11000FAB518 /* Products */, + D0C9C2A32300A19900FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C2912300A11000FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C2922300A11000FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C4462300DE5100FAB518 /* CountryList.swift */, + D0C9C29F2300A18B00FAB518 /* AuthorizationSequenceCountrySelectionController.swift */, + D0C9C2A02300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift */, + D0C9C2B42300A1F300FAB518 /* FrameworkBundle.swift */, + D0C9C2932300A11000FAB518 /* CountrySelectionUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C2A32300A19900FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C2CF2300A2D400FAB518 /* SearchBarNode.framework */, + D0C9C2AE2300A1B100FAB518 /* TelegramStringFormatting.framework */, + D0C9C2AC2300A1AC00FAB518 /* TelegramPresentationData.framework */, + D0C9C2AA2300A1A500FAB518 /* AsyncDisplayKit.framework */, + D0C9C2A82300A19F00FAB518 /* Display.framework */, + D0C9C2A62300A19C00FAB518 /* UIKit.framework */, + D0C9C2A42300A19900FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C28B2300A11000FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2952300A11000FAB518 /* CountrySelectionUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C28F2300A11000FAB518 /* CountrySelectionUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C2982300A11000FAB518 /* Build configuration list for PBXNativeTarget "CountrySelectionUI" */; + buildPhases = ( + D0C9C28B2300A11000FAB518 /* Headers */, + D0C9C28C2300A11000FAB518 /* Sources */, + D0C9C28D2300A11000FAB518 /* Frameworks */, + D0C9C28E2300A11000FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CountrySelectionUI; + productName = CountrySelectionUI; + productReference = D0C9C2902300A11000FAB518 /* CountrySelectionUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C2872300A11000FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C28F2300A11000FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C28A2300A11000FAB518 /* Build configuration list for PBXProject "CountrySelectionUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C2862300A11000FAB518; + productRefGroup = D0C9C2912300A11000FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C28F2300A11000FAB518 /* CountrySelectionUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C28E2300A11000FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C28C2300A11000FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4472300DE5100FAB518 /* CountryList.swift in Sources */, + D0C9C2A22300A18C00FAB518 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */, + D0C9C2A12300A18C00FAB518 /* AuthorizationSequenceCountrySelectionController.swift in Sources */, + D0C9C2B52300A1F300FAB518 /* FrameworkBundle.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C2962300A11000FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C2972300A11000FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C2992300A11000FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C29A2300A11000FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C29B2300A14F00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C29C2300A14F00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C29D2300A15A00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C29E2300A15A00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.CountrySelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C28A2300A11000FAB518 /* Build configuration list for PBXProject "CountrySelectionUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2962300A11000FAB518 /* DebugAppStoreLLC */, + D0C9C29B2300A14F00FAB518 /* DebugHockeyapp */, + D0C9C2972300A11000FAB518 /* ReleaseAppStoreLLC */, + D0C9C29D2300A15A00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C2982300A11000FAB518 /* Build configuration list for PBXNativeTarget "CountrySelectionUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2992300A11000FAB518 /* DebugAppStoreLLC */, + D0C9C29C2300A14F00FAB518 /* DebugHockeyapp */, + D0C9C29A2300A11000FAB518 /* ReleaseAppStoreLLC */, + D0C9C29E2300A15A00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C2872300A11000FAB518 /* Project object */; +} diff --git a/submodules/CountrySelectionUI/Info.plist b/submodules/CountrySelectionUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/CountrySelectionUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCountrySelectionController.swift b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift similarity index 89% rename from submodules/TelegramUI/TelegramUI/AuthorizationSequenceCountrySelectionController.swift rename to submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift index f431dbb9eb..977e8b9507 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCountrySelectionController.swift +++ b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionController.swift @@ -4,6 +4,7 @@ import Display import AsyncDisplayKit import TelegramPresentationData import TelegramStringFormatting +import SearchBarNode private func loadCountryCodes() -> [(String, Int)] { guard let filePath = frameworkBundle.path(forResource: "PhoneCountries", ofType: "txt") else { @@ -113,8 +114,8 @@ private final class AuthorizationSequenceCountrySelectionNavigationContentNode: } } -final class AuthorizationSequenceCountrySelectionController: ViewController { - static func lookupCountryNameById(_ id: String, strings: PresentationStrings) -> String? { +public final class AuthorizationSequenceCountrySelectionController: ViewController { + public static func lookupCountryNameById(_ id: String, strings: PresentationStrings) -> String? { for (itemId, _) in countryCodes { if id == itemId { let locale = localeWithStrings(strings) @@ -127,7 +128,8 @@ final class AuthorizationSequenceCountrySelectionController: ViewController { } return nil } - static func lookupCountryIdByCode(_ code: Int) -> String? { + + public static func lookupCountryIdByCode(_ code: Int) -> String? { for (itemId, itemCode) in countryCodes { if itemCode == code { return itemId @@ -146,10 +148,10 @@ final class AuthorizationSequenceCountrySelectionController: ViewController { return self.displayNode as! AuthorizationSequenceCountrySelectionControllerNode } - var completeWithCountryCode: ((Int, String) -> Void)? - var dismissed: (() -> Void)? + public var completeWithCountryCode: ((Int, String) -> Void)? + public var dismissed: (() -> Void)? - init(strings: PresentationStrings, theme: PresentationTheme, displayCodes: Bool = true) { + public init(strings: PresentationStrings, theme: PresentationTheme, displayCodes: Bool = true) { self.theme = theme self.strings = strings self.displayCodes = displayCodes @@ -172,7 +174,7 @@ final class AuthorizationSequenceCountrySelectionController: ViewController { self.navigationBar?.setContentNode(navigationContentNode, animated: false) } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -185,14 +187,14 @@ final class AuthorizationSequenceCountrySelectionController: ViewController { self.displayNodeDidLoad() } - override func viewDidAppear(_ animated: Bool) { + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.controllerNode.animateIn() self.navigationContentNode?.activate() } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition) @@ -203,7 +205,7 @@ final class AuthorizationSequenceCountrySelectionController: ViewController { self.dismiss(completion: nil) } - override func dismiss(completion: (() -> Void)? = nil) { + override public func dismiss(completion: (() -> Void)? = nil) { self.navigationContentNode?.deactivate() self.controllerNode.animateOut(completion: { [weak self] in self?.presentingViewController?.dismiss(animated: true, completion: nil) diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceCountrySelectionControllerNode.swift b/submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/AuthorizationSequenceCountrySelectionControllerNode.swift rename to submodules/CountrySelectionUI/Sources/AuthorizationSequenceCountrySelectionControllerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/CountryList.swift b/submodules/CountrySelectionUI/Sources/CountryList.swift similarity index 90% rename from submodules/TelegramUI/TelegramUI/CountryList.swift rename to submodules/CountrySelectionUI/Sources/CountryList.swift index 6a792cee1e..c1e8a8f76f 100644 --- a/submodules/TelegramUI/TelegramUI/CountryList.swift +++ b/submodules/CountrySelectionUI/Sources/CountryList.swift @@ -64,7 +64,7 @@ private func loadCountriesInfo() -> [(Int, String, String)] { let phoneCountriesInfo = loadCountriesInfo() -let countryCodeToIdAndName: [Int: (String, String)] = { +public let countryCodeToIdAndName: [Int: (String, String)] = { var dict: [Int: (String, String)] = [:] for (code, id, name) in phoneCountriesInfo { if dict[code] == nil { @@ -74,12 +74,17 @@ let countryCodeToIdAndName: [Int: (String, String)] = { return dict }() -struct CountryCodeAndId: Hashable { +public struct CountryCodeAndId: Hashable { let code: Int let id: String + + public init(code: Int, id: String) { + self.code = code + self.id = id + } } -let countryCodeAndIdToName: [CountryCodeAndId: String] = { +public let countryCodeAndIdToName: [CountryCodeAndId: String] = { var dict: [CountryCodeAndId: String] = [:] for (code, id, name) in phoneCountriesInfo { dict[CountryCodeAndId(code: code, id: id)] = name diff --git a/submodules/CountrySelectionUI/Sources/CountrySelectionUI.h b/submodules/CountrySelectionUI/Sources/CountrySelectionUI.h new file mode 100644 index 0000000000..3505c8a4d6 --- /dev/null +++ b/submodules/CountrySelectionUI/Sources/CountrySelectionUI.h @@ -0,0 +1,19 @@ +// +// CountrySelectionUI.h +// CountrySelectionUI +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for CountrySelectionUI. +FOUNDATION_EXPORT double CountrySelectionUIVersionNumber; + +//! Project version string for CountrySelectionUI. +FOUNDATION_EXPORT const unsigned char CountrySelectionUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/CountrySelectionUI/Sources/FrameworkBundle.swift b/submodules/CountrySelectionUI/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/CountrySelectionUI/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/DateSelectionUI/DateSelectionUI_Xcode.xcodeproj/project.pbxproj b/submodules/DateSelectionUI/DateSelectionUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..7e1c6e12dc --- /dev/null +++ b/submodules/DateSelectionUI/DateSelectionUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,571 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C4D12300E60C00FAB518 /* DateSelectionUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C4D82300E64900FAB518 /* DateSelectionActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */; }; + D0C9C4E32300EDB800FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E22300EDB800FAB518 /* Foundation.framework */; }; + D0C9C4E52300EDC000FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E42300EDC000FAB518 /* UIKit.framework */; }; + D0C9C4E72300EDC400FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E62300EDC400FAB518 /* Display.framework */; }; + D0C9C4E92300EDC900FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C4EB2300EDCE00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */; }; + D0C9C4ED2300EDD400FAB518 /* TelegramStringFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */; }; + D0C9C4EF2300EE0E00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */; }; + D0C9C4F12300EE2C00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DateSelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DateSelectionUI.h; sourceTree = ""; }; + D0C9C4D02300E60C00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateSelectionActionSheetController.swift; sourceTree = ""; }; + D0C9C4E22300EDB800FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C4E42300EDC000FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C4E62300EDC400FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramStringFormatting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C4C92300E60C00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4F12300EE2C00FAB518 /* AccountContext.framework in Frameworks */, + D0C9C4EF2300EE0E00FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C4ED2300EDD400FAB518 /* TelegramStringFormatting.framework in Frameworks */, + D0C9C4EB2300EDCE00FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C4E92300EDC900FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C4E72300EDC400FAB518 /* Display.framework in Frameworks */, + D0C9C4E52300EDC000FAB518 /* UIKit.framework in Frameworks */, + D0C9C4E32300EDB800FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C4C22300E60C00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C4D02300E60C00FAB518 /* Info.plist */, + D0C9C4CE2300E60C00FAB518 /* Sources */, + D0C9C4CD2300E60C00FAB518 /* Products */, + D0C9C4E12300EDB800FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C4CD2300E60C00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C4CE2300E60C00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C4D72300E64800FAB518 /* DateSelectionActionSheetController.swift */, + D0C9C4CF2300E60C00FAB518 /* DateSelectionUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C4E12300EDB800FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C4F02300EE2C00FAB518 /* AccountContext.framework */, + D0C9C4EE2300EE0E00FAB518 /* SwiftSignalKit.framework */, + D0C9C4EC2300EDD400FAB518 /* TelegramStringFormatting.framework */, + D0C9C4EA2300EDCE00FAB518 /* TelegramPresentationData.framework */, + D0C9C4E82300EDC900FAB518 /* AsyncDisplayKit.framework */, + D0C9C4E62300EDC400FAB518 /* Display.framework */, + D0C9C4E42300EDC000FAB518 /* UIKit.framework */, + D0C9C4E22300EDB800FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C4C72300E60C00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4D12300E60C00FAB518 /* DateSelectionUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C4CB2300E60C00FAB518 /* DateSelectionUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C4D42300E60C00FAB518 /* Build configuration list for PBXNativeTarget "DateSelectionUI" */; + buildPhases = ( + D0C9C4C72300E60C00FAB518 /* Headers */, + D0C9C4C82300E60C00FAB518 /* Sources */, + D0C9C4C92300E60C00FAB518 /* Frameworks */, + D0C9C4CA2300E60C00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DateSelectionUI; + productName = DateSelectionUI; + productReference = D0C9C4CC2300E60C00FAB518 /* DateSelectionUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C4C32300E60C00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C4CB2300E60C00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C4C62300E60C00FAB518 /* Build configuration list for PBXProject "DateSelectionUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C4C22300E60C00FAB518; + productRefGroup = D0C9C4CD2300E60C00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C4CB2300E60C00FAB518 /* DateSelectionUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C4CA2300E60C00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C4C82300E60C00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4D82300E64900FAB518 /* DateSelectionActionSheetController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C4D22300E60C00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C4D32300E60C00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4D52300E60C00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C4D62300E60C00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4DD2300ED8800FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C4DE2300ED8800FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C4DF2300ED9600FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C4E02300ED9600FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DateSelectionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C4C62300E60C00FAB518 /* Build configuration list for PBXProject "DateSelectionUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4D22300E60C00FAB518 /* DebugAppStoreLLC */, + D0C9C4DD2300ED8800FAB518 /* DebugHockeyapp */, + D0C9C4D32300E60C00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4DF2300ED9600FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C4D42300E60C00FAB518 /* Build configuration list for PBXNativeTarget "DateSelectionUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4D52300E60C00FAB518 /* DebugAppStoreLLC */, + D0C9C4DE2300ED8800FAB518 /* DebugHockeyapp */, + D0C9C4D62300E60C00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4E02300ED9600FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C4C32300E60C00FAB518 /* Project object */; +} diff --git a/submodules/DateSelectionUI/Info.plist b/submodules/DateSelectionUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/DateSelectionUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/DateSelectionActionSheetController.swift b/submodules/DateSelectionUI/Sources/DateSelectionActionSheetController.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/DateSelectionActionSheetController.swift rename to submodules/DateSelectionUI/Sources/DateSelectionActionSheetController.swift index 2fe02a1825..81ebef320a 100644 --- a/submodules/TelegramUI/TelegramUI/DateSelectionActionSheetController.swift +++ b/submodules/DateSelectionUI/Sources/DateSelectionActionSheetController.swift @@ -2,23 +2,20 @@ import Foundation import UIKit import Display import AsyncDisplayKit -import UIKit -import SwiftSignalKit -import TelegramCore -import Photos import TelegramPresentationData import TelegramStringFormatting +import SwiftSignalKit import AccountContext -final class DateSelectionActionSheetController: ActionSheetController { +public final class DateSelectionActionSheetController: ActionSheetController { private var presentationDisposable: Disposable? private let _ready = Promise() - override var ready: Promise { + override public var ready: Promise { return self._ready } - init(context: AccountContext, title: String?, currentValue: Int32, minimumDate: Date? = nil, maximumDate: Date? = nil, emptyTitle: String? = nil, applyValue: @escaping (Int32?) -> Void) { + public init(context: AccountContext, title: String?, currentValue: Int32, minimumDate: Date? = nil, maximumDate: Date? = nil, emptyTitle: String? = nil, applyValue: @escaping (Int32?) -> Void) { let presentationData = context.sharedContext.currentPresentationData.with { $0 } let theme = presentationData.theme let strings = presentationData.strings @@ -61,7 +58,7 @@ final class DateSelectionActionSheetController: ActionSheetController { ]) } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } diff --git a/submodules/DateSelectionUI/Sources/DateSelectionUI.h b/submodules/DateSelectionUI/Sources/DateSelectionUI.h new file mode 100644 index 0000000000..f52f7827f6 --- /dev/null +++ b/submodules/DateSelectionUI/Sources/DateSelectionUI.h @@ -0,0 +1,19 @@ +// +// DateSelectionUI.h +// DateSelectionUI +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for DateSelectionUI. +FOUNDATION_EXPORT double DateSelectionUIVersionNumber; + +//! Project version string for DateSelectionUI. +FOUNDATION_EXPORT const unsigned char DateSelectionUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/GalleryUI/GalleryUI_Xcode.xcodeproj/project.pbxproj b/submodules/GalleryUI/GalleryUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..3c52c9051e --- /dev/null +++ b/submodules/GalleryUI/GalleryUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,703 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C2F52300A51400FAB518 /* GalleryUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C2F32300A51400FAB518 /* GalleryUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C3082300A58500FAB518 /* GalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */; }; + D0C9C3092300A58500FAB518 /* GalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FC2300A58400FAB518 /* GalleryController.swift */; }; + D0C9C30A2300A58500FAB518 /* GalleryNavigationCheckNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */; }; + D0C9C30B2300A58500FAB518 /* GalleryFooterNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */; }; + D0C9C30C2300A58500FAB518 /* GalleryControllerPresentationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */; }; + D0C9C30D2300A58500FAB518 /* GalleryNavigationRecipientNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */; }; + D0C9C30E2300A58500FAB518 /* GalleryControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */; }; + D0C9C30F2300A58500FAB518 /* GalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */; }; + D0C9C3102300A58500FAB518 /* GalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */; }; + D0C9C3112300A58500FAB518 /* GalleryVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */; }; + D0C9C3122300A58500FAB518 /* GalleryThumbnailContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */; }; + D0C9C3132300A58500FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */; }; + D0C9C3142300A58500FAB518 /* GalleryPagerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */; }; + D0C9C31B2300A9B900FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31A2300A9B900FAB518 /* Foundation.framework */; }; + D0C9C31D2300A9BD00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31C2300A9BD00FAB518 /* UIKit.framework */; }; + D0C9C31F2300A9C000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C31E2300A9C000FAB518 /* Display.framework */; }; + D0C9C3212300A9C500FAB518 /* QuickLook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3202300A9C500FAB518 /* QuickLook.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + D0C9C3232300A9C800FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3222300A9C800FAB518 /* Postbox.framework */; }; + D0C9C3252300A9CD00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */; }; + D0C9C3272300A9D100FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3262300A9D100FAB518 /* TelegramCore.framework */; }; + D0C9C3292300A9D500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C32B2300A9D900FAB518 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32A2300A9D900FAB518 /* SafariServices.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + D0C9C32D2300A9E900FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */; }; + D0C9C32F2300A9EF00FAB518 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */; }; + D0C9C3312300A9F400FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3302300A9F400FAB518 /* AccountContext.framework */; }; + D0C9C3442300AA8A00FAB518 /* ChatImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */; }; + D0C9C3452300AA8A00FAB518 /* UniversalVideoGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */; }; + D0C9C3462300AA8A00FAB518 /* ChatExternalFileGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */; }; + D0C9C3492300AA8A00FAB518 /* SecretMediaPreviewFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */; }; + D0C9C34A2300AA8A00FAB518 /* ChatItemGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */; }; + D0C9C34C2300AA8A00FAB518 /* ZoomableContentGalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */; }; + D0C9C34D2300AA8A00FAB518 /* ChatAnimationGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */; }; + D0C9C34E2300AA8A00FAB518 /* SecretMediaPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */; }; + D0C9C34F2300AA8A00FAB518 /* ChatDocumentGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */; }; + D0C9C3502300AA8A00FAB518 /* ChatVideoGalleryItemScrubberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */; }; + D0C9C3962300B45700FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */; }; + D0C9C3C32300B73200FAB518 /* WebsiteType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3C22300B73200FAB518 /* WebsiteType.framework */; }; + D0C9C3FD2300D59B00FAB518 /* ScreenCaptureDetection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */; }; + D0C9C43B2300D6DC00FAB518 /* OpenInExternalAppUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */; }; + D0C9C4412300D91200FAB518 /* GalleryItemTransitionNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C2F02300A51400FAB518 /* GalleryUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GalleryUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2F32300A51400FAB518 /* GalleryUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GalleryUI.h; sourceTree = ""; }; + D0C9C2F42300A51400FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItem.swift; sourceTree = ""; }; + D0C9C2FC2300A58400FAB518 /* GalleryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryController.swift; sourceTree = ""; }; + D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryNavigationCheckNode.swift; sourceTree = ""; }; + D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterNode.swift; sourceTree = ""; }; + D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerPresentationState.swift; sourceTree = ""; }; + D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryNavigationRecipientNode.swift; sourceTree = ""; }; + D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerNode.swift; sourceTree = ""; }; + D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItemNode.swift; sourceTree = ""; }; + D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterContentNode.swift; sourceTree = ""; }; + D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryVideoDecoration.swift; sourceTree = ""; }; + D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryThumbnailContainerNode.swift; sourceTree = ""; }; + D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; + D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryPagerNode.swift; sourceTree = ""; }; + D0C9C31A2300A9B900FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C31C2300A9BD00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C31E2300A9C000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3202300A9C500FAB518 /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = System/Library/Frameworks/QuickLook.framework; sourceTree = SDKROOT; }; + D0C9C3222300A9C800FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3262300A9D100FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C32A2300A9D900FAB518 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; + D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3302300A9F400FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatImageGalleryItem.swift; sourceTree = ""; }; + D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UniversalVideoGalleryItem.swift; sourceTree = ""; }; + D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatExternalFileGalleryItem.swift; sourceTree = ""; }; + D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewFooterContentNode.swift; sourceTree = ""; }; + D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatItemGalleryFooterContentNode.swift; sourceTree = ""; }; + D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZoomableContentGalleryItemNode.swift; sourceTree = ""; }; + D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatAnimationGalleryItem.swift; sourceTree = ""; }; + D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewController.swift; sourceTree = ""; }; + D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatDocumentGalleryItem.swift; sourceTree = ""; }; + D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatVideoGalleryItemScrubberView.swift; sourceTree = ""; }; + D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUniversalVideoContent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3C22300B73200FAB518 /* WebsiteType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebsiteType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ScreenCaptureDetection.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OpenInExternalAppUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryItemTransitionNode.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C2ED2300A51400FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C43B2300D6DC00FAB518 /* OpenInExternalAppUI.framework in Frameworks */, + D0C9C3FD2300D59B00FAB518 /* ScreenCaptureDetection.framework in Frameworks */, + D0C9C3C32300B73200FAB518 /* WebsiteType.framework in Frameworks */, + D0C9C3962300B45700FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */, + D0C9C3312300A9F400FAB518 /* AccountContext.framework in Frameworks */, + D0C9C32F2300A9EF00FAB518 /* TextFormat.framework in Frameworks */, + D0C9C32D2300A9E900FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C32B2300A9D900FAB518 /* SafariServices.framework in Frameworks */, + D0C9C3292300A9D500FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C3272300A9D100FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C3252300A9CD00FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C3232300A9C800FAB518 /* Postbox.framework in Frameworks */, + D0C9C3212300A9C500FAB518 /* QuickLook.framework in Frameworks */, + D0C9C31F2300A9C000FAB518 /* Display.framework in Frameworks */, + D0C9C31D2300A9BD00FAB518 /* UIKit.framework in Frameworks */, + D0C9C31B2300A9B900FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C2E62300A51400FAB518 = { + isa = PBXGroup; + children = ( + D0C9C2F42300A51400FAB518 /* Info.plist */, + D0C9C2F22300A51400FAB518 /* Sources */, + D0C9C2F12300A51400FAB518 /* Products */, + D0C9C3192300A9B900FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C2F12300A51400FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C2F02300A51400FAB518 /* GalleryUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C2F22300A51400FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C3522300AA8C00FAB518 /* Items */, + D0C9C33C2300AA8800FAB518 /* ChatItemGalleryFooterContentNode.swift */, + D0C9C3422300AA8900FAB518 /* ChatVideoGalleryItemScrubberView.swift */, + D0C9C3402300AA8900FAB518 /* SecretMediaPreviewController.swift */, + D0C9C33B2300AA8700FAB518 /* SecretMediaPreviewFooterContentNode.swift */, + D0C9C33E2300AA8800FAB518 /* ZoomableContentGalleryItemNode.swift */, + D0C9C2FC2300A58400FAB518 /* GalleryController.swift */, + D0C9C3012300A58400FAB518 /* GalleryControllerNode.swift */, + D0C9C2FF2300A58400FAB518 /* GalleryControllerPresentationState.swift */, + D0C9C3032300A58500FAB518 /* GalleryFooterContentNode.swift */, + D0C9C2FE2300A58400FAB518 /* GalleryFooterNode.swift */, + D0C9C2FB2300A58400FAB518 /* GalleryItem.swift */, + D0C9C3022300A58500FAB518 /* GalleryItemNode.swift */, + D0C9C2FD2300A58400FAB518 /* GalleryNavigationCheckNode.swift */, + D0C9C3002300A58400FAB518 /* GalleryNavigationRecipientNode.swift */, + D0C9C3072300A58500FAB518 /* GalleryPagerNode.swift */, + D0C9C3052300A58500FAB518 /* GalleryThumbnailContainerNode.swift */, + D0C9C3042300A58500FAB518 /* GalleryVideoDecoration.swift */, + D0C9C3062300A58500FAB518 /* FrameworkBundle.swift */, + D0C9C2F32300A51400FAB518 /* GalleryUI.h */, + D0C9C4402300D91200FAB518 /* GalleryItemTransitionNode.swift */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C3192300A9B900FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C43A2300D6DC00FAB518 /* OpenInExternalAppUI.framework */, + D0C9C3FC2300D59B00FAB518 /* ScreenCaptureDetection.framework */, + D0C9C3C22300B73200FAB518 /* WebsiteType.framework */, + D0C9C3952300B45700FAB518 /* TelegramUniversalVideoContent.framework */, + D0C9C3302300A9F400FAB518 /* AccountContext.framework */, + D0C9C32E2300A9EF00FAB518 /* TextFormat.framework */, + D0C9C32C2300A9E900FAB518 /* TelegramPresentationData.framework */, + D0C9C32A2300A9D900FAB518 /* SafariServices.framework */, + D0C9C3282300A9D500FAB518 /* AsyncDisplayKit.framework */, + D0C9C3262300A9D100FAB518 /* TelegramCore.framework */, + D0C9C3242300A9CD00FAB518 /* SwiftSignalKit.framework */, + D0C9C3222300A9C800FAB518 /* Postbox.framework */, + D0C9C3202300A9C500FAB518 /* QuickLook.framework */, + D0C9C31E2300A9C000FAB518 /* Display.framework */, + D0C9C31C2300A9BD00FAB518 /* UIKit.framework */, + D0C9C31A2300A9B900FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D0C9C3522300AA8C00FAB518 /* Items */ = { + isa = PBXGroup; + children = ( + D0C9C33F2300AA8800FAB518 /* ChatAnimationGalleryItem.swift */, + D0C9C3412300AA8900FAB518 /* ChatDocumentGalleryItem.swift */, + D0C9C3382300AA8700FAB518 /* ChatExternalFileGalleryItem.swift */, + D0C9C3362300AA8700FAB518 /* ChatImageGalleryItem.swift */, + D0C9C3372300AA8700FAB518 /* UniversalVideoGalleryItem.swift */, + ); + path = Items; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C2EB2300A51400FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2F52300A51400FAB518 /* GalleryUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C2EF2300A51400FAB518 /* GalleryUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C2F82300A51400FAB518 /* Build configuration list for PBXNativeTarget "GalleryUI" */; + buildPhases = ( + D0C9C2EB2300A51400FAB518 /* Headers */, + D0C9C2EC2300A51400FAB518 /* Sources */, + D0C9C2ED2300A51400FAB518 /* Frameworks */, + D0C9C2EE2300A51400FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GalleryUI; + productName = GalleryUI; + productReference = D0C9C2F02300A51400FAB518 /* GalleryUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C2E72300A51400FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C2EF2300A51400FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C2EA2300A51400FAB518 /* Build configuration list for PBXProject "GalleryUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C2E62300A51400FAB518; + productRefGroup = D0C9C2F12300A51400FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C2EF2300A51400FAB518 /* GalleryUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C2EE2300A51400FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C2EC2300A51400FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C30E2300A58500FAB518 /* GalleryControllerNode.swift in Sources */, + D0C9C3502300AA8A00FAB518 /* ChatVideoGalleryItemScrubberView.swift in Sources */, + D0C9C34C2300AA8A00FAB518 /* ZoomableContentGalleryItemNode.swift in Sources */, + D0C9C3102300A58500FAB518 /* GalleryFooterContentNode.swift in Sources */, + D0C9C30A2300A58500FAB518 /* GalleryNavigationCheckNode.swift in Sources */, + D0C9C34E2300AA8A00FAB518 /* SecretMediaPreviewController.swift in Sources */, + D0C9C30C2300A58500FAB518 /* GalleryControllerPresentationState.swift in Sources */, + D0C9C4412300D91200FAB518 /* GalleryItemTransitionNode.swift in Sources */, + D0C9C30D2300A58500FAB518 /* GalleryNavigationRecipientNode.swift in Sources */, + D0C9C3092300A58500FAB518 /* GalleryController.swift in Sources */, + D0C9C30F2300A58500FAB518 /* GalleryItemNode.swift in Sources */, + D0C9C3142300A58500FAB518 /* GalleryPagerNode.swift in Sources */, + D0C9C3452300AA8A00FAB518 /* UniversalVideoGalleryItem.swift in Sources */, + D0C9C3122300A58500FAB518 /* GalleryThumbnailContainerNode.swift in Sources */, + D0C9C3462300AA8A00FAB518 /* ChatExternalFileGalleryItem.swift in Sources */, + D0C9C34D2300AA8A00FAB518 /* ChatAnimationGalleryItem.swift in Sources */, + D0C9C3442300AA8A00FAB518 /* ChatImageGalleryItem.swift in Sources */, + D0C9C34F2300AA8A00FAB518 /* ChatDocumentGalleryItem.swift in Sources */, + D0C9C3132300A58500FAB518 /* FrameworkBundle.swift in Sources */, + D0C9C3082300A58500FAB518 /* GalleryItem.swift in Sources */, + D0C9C3112300A58500FAB518 /* GalleryVideoDecoration.swift in Sources */, + D0C9C34A2300AA8A00FAB518 /* ChatItemGalleryFooterContentNode.swift in Sources */, + D0C9C30B2300A58500FAB518 /* GalleryFooterNode.swift in Sources */, + D0C9C3492300AA8A00FAB518 /* SecretMediaPreviewFooterContentNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C2F62300A51400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C2F72300A51400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C2F92300A51400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C2FA2300A51400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3152300A99100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C3162300A99100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C3172300A99D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C3182300A99D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GalleryUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C2EA2300A51400FAB518 /* Build configuration list for PBXProject "GalleryUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2F62300A51400FAB518 /* DebugAppStoreLLC */, + D0C9C3152300A99100FAB518 /* DebugHockeyapp */, + D0C9C2F72300A51400FAB518 /* ReleaseAppStoreLLC */, + D0C9C3172300A99D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C2F82300A51400FAB518 /* Build configuration list for PBXNativeTarget "GalleryUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2F92300A51400FAB518 /* DebugAppStoreLLC */, + D0C9C3162300A99100FAB518 /* DebugHockeyapp */, + D0C9C2FA2300A51400FAB518 /* ReleaseAppStoreLLC */, + D0C9C3182300A99D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C2E72300A51400FAB518 /* Project object */; +} diff --git a/submodules/GalleryUI/Info.plist b/submodules/GalleryUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/GalleryUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/ChatItemGalleryFooterContentNode.swift b/submodules/GalleryUI/Sources/ChatItemGalleryFooterContentNode.swift similarity index 97% rename from submodules/TelegramUI/TelegramUI/ChatItemGalleryFooterContentNode.swift rename to submodules/GalleryUI/Sources/ChatItemGalleryFooterContentNode.swift index 6bb4ed3cd7..0fa498e7f7 100644 --- a/submodules/TelegramUI/TelegramUI/ChatItemGalleryFooterContentNode.swift +++ b/submodules/GalleryUI/Sources/ChatItemGalleryFooterContentNode.swift @@ -12,6 +12,7 @@ import TelegramStringFormatting import AccountContext import RadialStatusNode import ShareController +import OpenInExternalAppUI private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white) private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white) @@ -808,7 +809,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll } private func commitDeleteMessages(_ messages: [Message], ask: Bool) { - self.messageContextDisposable.set((chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: Set(messages.map { $0.id })) |> deliverOnMainQueue).start(next: { [weak self] actions in + self.messageContextDisposable.set((self.context.sharedContext.chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: Set(messages.map { $0.id })) |> deliverOnMainQueue).start(next: { [weak self] actions in if let strongSelf = self, let controllerInteration = strongSelf.controllerInteraction, !actions.options.isEmpty { let actionSheet = ActionSheetController(presentationTheme: strongSelf.theme) var items: [ActionSheetItem] = [] @@ -906,7 +907,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll if let strongSelf = self { let openInController = OpenInActionSheetController(context: strongSelf.context, item: item, additionalAction: nil, openUrl: { [weak self] url in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {}) } }) strongSelf.controllerInteraction?.presentController(openInController, nil) @@ -915,7 +916,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll } else { preferredAction = .custom(action: ShareControllerAction(title: presentationData.strings.Web_OpenExternal, action: { [weak self] in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, url: content.url, presentationData: presentationData, navigationController: nil, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: content.url, forceExternal: false, presentationData: presentationData, navigationController: nil, dismissInput: {}) } })) } @@ -1017,7 +1018,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll if let strongSelf = self { let openInController = OpenInActionSheetController(context: strongSelf.context, item: item, additionalAction: nil, openUrl: { [weak self] url in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: presentationData, navigationController: nil, dismissInput: {}) } }) strongSelf.controllerInteraction?.presentController(openInController, nil) @@ -1026,7 +1027,7 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, UIScroll } else { preferredAction = .custom(action: ShareControllerAction(title: presentationData.strings.Web_OpenExternal, action: { [weak self] in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, url: content.url, presentationData: presentationData, navigationController: nil, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: content.url, forceExternal: false, presentationData: presentationData, navigationController: nil, dismissInput: {}) } })) } diff --git a/submodules/TelegramUI/TelegramUI/ChatVideoGalleryItemScrubberView.swift b/submodules/GalleryUI/Sources/ChatVideoGalleryItemScrubberView.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatVideoGalleryItemScrubberView.swift rename to submodules/GalleryUI/Sources/ChatVideoGalleryItemScrubberView.swift diff --git a/submodules/GalleryUI/Sources/FrameworkBundle.swift b/submodules/GalleryUI/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..3f7a202833 --- /dev/null +++ b/submodules/GalleryUI/Sources/FrameworkBundle.swift @@ -0,0 +1,14 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) +private let screenScaleFactor = Int(UIScreen.main.scale) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/TelegramUI/TelegramUI/GalleryController.swift b/submodules/GalleryUI/Sources/GalleryController.swift similarity index 93% rename from submodules/TelegramUI/TelegramUI/GalleryController.swift rename to submodules/GalleryUI/Sources/GalleryController.swift index a2c7f2c041..d18273ba99 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryController.swift +++ b/submodules/GalleryUI/Sources/GalleryController.swift @@ -10,6 +10,9 @@ import SafariServices import TelegramPresentationData import TextFormat import AccountContext +import TelegramUniversalVideoContent +import WebsiteType +import OpenInExternalAppUI private func tagsForMessage(_ message: Message) -> MessageTags? { for media in message.media { @@ -95,7 +98,7 @@ private let internalMimePrefixes: [String] = [ "image/png" ] -func internalDocumentItemSupportsMimeType(_ type: String, fileName: String?) -> Bool { +public func internalDocumentItemSupportsMimeType(_ type: String, fileName: String?) -> Bool { if let fileName = fileName { let ext = (fileName as NSString).pathExtension if internalExtensions.contains(ext.lowercased()) { @@ -123,7 +126,7 @@ private let italicFont = Font.italic(16.0) private let boldItalicFont = Font.semiboldItalic(16.0) private let fixedFont = UIFont(name: "Menlo-Regular", size: 15.0) ?? textFont -func galleryCaptionStringWithAppliedEntities(_ text: String, entities: [MessageTextEntity]) -> NSAttributedString { +public func galleryCaptionStringWithAppliedEntities(_ text: String, entities: [MessageTextEntity]) -> NSAttributedString { return stringWithAppliedEntities(text, entities: entities, baseColor: .white, linkColor: UIColor(rgb: 0x5ac8fa), baseFont: textFont, linkFont: textFont, boldFont: boldFont, italicFont: italicFont, boldItalicFont: boldItalicFont, fixedFont: fixedFont, blockQuoteFont: textFont, underlineLinks: false) } @@ -136,7 +139,7 @@ private func galleryMessageCaptionText(_ message: Message) -> String { return message.text } -func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? { +public func galleryItemForEntry(context: AccountContext, presentationData: PresentationData, entry: MessageHistoryEntry, isCentral: Bool = false, streamVideos: Bool, loopVideos: Bool = false, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, tempFilePath: String? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void = { _ in }) -> GalleryItem? { let message = entry.message let location = entry.location if let (media, mediaImage) = mediaForMessage(message: message) { @@ -192,7 +195,7 @@ func galleryItemForEntry(context: AccountContext, presentationData: Presentation } } else if let webpage = media as? TelegramMediaWebpage, case let .Loaded(webpageContent) = webpage.content { var content: UniversalVideoContent? - switch websiteType(of: webpageContent) { + switch websiteType(of: webpageContent.websiteName) { case .instagram where webpageContent.file != nil && webpageContent.image != nil && webpageContent.file!.isVideo: content = NativeVideoContent(id: .message(message.stableId, webpageContent.file?.id ?? webpage.webpageId), fileReference: .message(message: MessageReference(message), media: webpageContent.file!), imageReference: webpageContent.image.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, enableSound: true) default: @@ -217,21 +220,21 @@ func galleryItemForEntry(context: AccountContext, presentationData: Presentation return nil } -final class GalleryTransitionArguments { - let transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)) - let addToTransitionSurface: (UIView) -> Void +public final class GalleryTransitionArguments { + public let transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)) + public let addToTransitionSurface: (UIView) -> Void - init(transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)), addToTransitionSurface: @escaping (UIView) -> Void) { + public init(transitionNode: (ASDisplayNode, () -> (UIView?, UIView?)), addToTransitionSurface: @escaping (UIView) -> Void) { self.transitionNode = transitionNode self.addToTransitionSurface = addToTransitionSurface } } -final class GalleryControllerPresentationArguments { - let animated: Bool - let transitionArguments: (MessageId, Media) -> GalleryTransitionArguments? +public final class GalleryControllerPresentationArguments { + public let animated: Bool + public let transitionArguments: (MessageId, Media) -> GalleryTransitionArguments? - init(animated: Bool = true, transitionArguments: @escaping (MessageId, Media) -> GalleryTransitionArguments?) { + public init(animated: Bool = true, transitionArguments: @escaping (MessageId, Media) -> GalleryTransitionArguments?) { self.animated = animated self.transitionArguments = transitionArguments } @@ -251,12 +254,12 @@ private enum GalleryMessageHistoryView { } } -enum GalleryControllerItemSource { +public enum GalleryControllerItemSource { case peerMessagesAtId(MessageId) case standaloneMessage(Message) } -enum GalleryControllerInteractionTapAction { +public enum GalleryControllerInteractionTapAction { case url(url: String, concealed: Bool) case textMention(String) case peerMention(PeerId, String) @@ -269,9 +272,9 @@ public enum GalleryControllerItemNodeAction { case timecode(Double) } -class GalleryController: ViewController { - static let darkNavigationTheme = NavigationBarTheme(buttonColor: .white, disabledButtonColor: UIColor(rgb: 0x525252), primaryTextColor: .white, backgroundColor: UIColor(white: 0.0, alpha: 0.6), separatorColor: UIColor(white: 0.0, alpha: 0.8), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear) - static let lightNavigationTheme = NavigationBarTheme(buttonColor: UIColor(rgb: 0x007ee5), disabledButtonColor: UIColor(rgb: 0xd0d0d0), primaryTextColor: .black, backgroundColor: UIColor(red: 0.968626451, green: 0.968626451, blue: 0.968626451, alpha: 1.0), separatorColor: UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear) +public class GalleryController: ViewController { + public static let darkNavigationTheme = NavigationBarTheme(buttonColor: .white, disabledButtonColor: UIColor(rgb: 0x525252), primaryTextColor: .white, backgroundColor: UIColor(white: 0.0, alpha: 0.6), separatorColor: UIColor(white: 0.0, alpha: 0.8), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear) + public static let lightNavigationTheme = NavigationBarTheme(buttonColor: UIColor(rgb: 0x007ee5), disabledButtonColor: UIColor(rgb: 0xd0d0d0), primaryTextColor: .black, backgroundColor: UIColor(red: 0.968626451, green: 0.968626451, blue: 0.968626451, alpha: 1.0), separatorColor: UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0), badgeBackgroundColor: .clear, badgeStrokeColor: .clear, badgeTextColor: .clear) private var galleryNode: GalleryControllerNode { return self.displayNode as! GalleryControllerNode @@ -284,14 +287,14 @@ class GalleryController: ViewController { private let streamVideos: Bool private let _ready = Promise() - override var ready: Promise { + override public var ready: Promise { return self._ready } private var didSetReady = false private var adjustedForInitialPreviewingLayout = false - var temporaryDoNotWaitForReady = false + public var temporaryDoNotWaitForReady = false private let fromPlayingVideo: Bool private let landscape: Bool private let timecode: Double? @@ -321,7 +324,7 @@ class GalleryController: ViewController { private var performAction: (GalleryControllerInteractionTapAction) -> Void private var openActionOptions: (GalleryControllerInteractionTapAction) -> Void - init(context: AccountContext, source: GalleryControllerItemSource, invertItemOrder: Bool = false, streamSingleVideo: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, synchronousLoad: Bool = false, replaceRootController: @escaping (ViewController, ValuePromise?) -> Void, baseNavigationController: NavigationController?, actionInteraction: GalleryControllerActionInteraction? = nil) { + public init(context: AccountContext, source: GalleryControllerItemSource, invertItemOrder: Bool = false, streamSingleVideo: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, synchronousLoad: Bool = false, replaceRootController: @escaping (ViewController, ValuePromise?) -> Void, baseNavigationController: NavigationController?, actionInteraction: GalleryControllerActionInteraction? = nil) { self.context = context self.source = source self.replaceRootController = replaceRootController @@ -746,7 +749,7 @@ class GalleryController: ViewController { } } - @objc func donePressed() { + @objc private func donePressed() { self.dismiss(forceAway: false) } @@ -778,7 +781,7 @@ class GalleryController: ViewController { }) } - override func loadDisplayNode() { + override public func loadDisplayNode() { let controllerInteraction = GalleryControllerInteraction(presentController: { [weak self] controller, arguments in if let strongSelf = self { strongSelf.present(controller, in: .window(.root), with: arguments, blockInteraction: true) @@ -896,11 +899,11 @@ class GalleryController: ViewController { } } - override func viewWillAppear(_ animated: Bool) { + override public func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } - override func viewDidAppear(_ animated: Bool) { + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) var nodeAnimatesItself = false @@ -939,13 +942,13 @@ class GalleryController: ViewController { self.accountInUseDisposable.set(self.context.sharedContext.setAccountUserInterfaceInUse(self.context.account.id)) } - override func viewDidDisappear(_ animated: Bool) { + override public func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) self.accountInUseDisposable.set(nil) } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) self.galleryNode.frame = CGRect(origin: CGPoint(), size: layout.size) diff --git a/submodules/TelegramUI/TelegramUI/GalleryControllerNode.swift b/submodules/GalleryUI/Sources/GalleryControllerNode.swift similarity index 90% rename from submodules/TelegramUI/TelegramUI/GalleryControllerNode.swift rename to submodules/GalleryUI/Sources/GalleryControllerNode.swift index 965ce5ce8d..35d936f616 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryControllerNode.swift +++ b/submodules/GalleryUI/Sources/GalleryControllerNode.swift @@ -5,30 +5,30 @@ import Display import Postbox import SwipeToDismissGesture -class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate { - var statusBar: StatusBar? - var navigationBar: NavigationBar? - let footerNode: GalleryFooterNode - var currentThumbnailContainerNode: GalleryThumbnailContainerNode? - var overlayNode: ASDisplayNode? - var transitionDataForCentralItem: (() -> ((ASDisplayNode, () -> (UIView?, UIView?))?, (UIView) -> Void)?)? - var dismiss: (() -> Void)? +open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate { + public var statusBar: StatusBar? + public var navigationBar: NavigationBar? + public let footerNode: GalleryFooterNode + public var currentThumbnailContainerNode: GalleryThumbnailContainerNode? + public var overlayNode: ASDisplayNode? + public var transitionDataForCentralItem: (() -> ((ASDisplayNode, () -> (UIView?, UIView?))?, (UIView) -> Void)?)? + public var dismiss: (() -> Void)? - var containerLayout: (CGFloat, ContainerViewLayout)? - var backgroundNode: ASDisplayNode - var scrollView: UIScrollView - var pager: GalleryPagerNode + public var containerLayout: (CGFloat, ContainerViewLayout)? + public var backgroundNode: ASDisplayNode + public var scrollView: UIScrollView + public var pager: GalleryPagerNode - var beginCustomDismiss: () -> Void = { } - var completeCustomDismiss: () -> Void = { } - var baseNavigationController: () -> NavigationController? = { return nil } + public var beginCustomDismiss: () -> Void = { } + public var completeCustomDismiss: () -> Void = { } + public var baseNavigationController: () -> NavigationController? = { return nil } private var presentationState = GalleryControllerPresentationState() private var isDismissed = false - var areControlsHidden = false - var isBackgroundExtendedOverNavigationBar = true { + public var areControlsHidden = false + public var isBackgroundExtendedOverNavigationBar = true { didSet { if let (navigationBarHeight, layout) = self.containerLayout { self.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight), size: CGSize(width: layout.size.width, height: layout.size.height - (self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight))) @@ -36,7 +36,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - init(controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0) { + public init(controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0) { self.backgroundNode = ASDisplayNode() self.backgroundNode.backgroundColor = UIColor.black self.scrollView = UIScrollView() @@ -216,7 +216,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - override func didLoad() { + override open func didLoad() { super.didLoad() if #available(iOSApplicationExtension 11.0, iOS 11.0, *), !self.isLayerBacked { @@ -224,7 +224,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { + open func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.containerLayout = (navigationBarHeight, layout) transition.updateFrame(node: self.backgroundNode, frame: CGRect(origin: CGPoint(x: 0.0, y: self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight), size: CGSize(width: layout.size.width, height: layout.size.height - (self.isBackgroundExtendedOverNavigationBar ? 0.0 : navigationBarHeight)))) @@ -263,7 +263,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog self.pager.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition) } - func setControlsHidden(_ hidden: Bool, animated: Bool) { + open func setControlsHidden(_ hidden: Bool, animated: Bool) { self.areControlsHidden = hidden if animated { UIView.animate(withDuration: 0.3, animations: { @@ -282,14 +282,14 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func updateThumbnailContainerNodeAlpha(_ transition: ContainedViewLayoutTransition) { + open func updateThumbnailContainerNodeAlpha(_ transition: ContainedViewLayoutTransition) { if let currentThumbnailContainerNode = self.currentThumbnailContainerNode, let layout = self.containerLayout?.1 { let visible = layout.size.width < layout.size.height && !self.areControlsHidden transition.updateAlpha(node: currentThumbnailContainerNode, alpha: visible ? 1.0 : 0.0) } } - func animateIn(animateContent: Bool) { + open func animateIn(animateContent: Bool) { self.backgroundNode.backgroundColor = self.backgroundNode.backgroundColor?.withAlphaComponent(0.0) self.statusBar?.alpha = 0.0 self.navigationBar?.alpha = 0.0 @@ -311,7 +311,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func animateOut(animateContent: Bool, completion: @escaping () -> Void) { + open func animateOut(animateContent: Bool, completion: @escaping () -> Void) { self.isDismissed = true self.pager.isScrollEnabled = false @@ -349,13 +349,13 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func updateDismissTransition(_ value: CGFloat) { + open func updateDismissTransition(_ value: CGFloat) { } - func updateDistanceFromEquilibrium(_ value: CGFloat) { + open func updateDistanceFromEquilibrium(_ value: CGFloat) { } - func scrollViewDidScroll(_ scrollView: UIScrollView) { + open func scrollViewDidScroll(_ scrollView: UIScrollView) { if self.isDismissed { return } @@ -385,7 +385,7 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { + open func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { targetContentOffset.pointee = scrollView.contentOffset let distanceFromEquilibrium = scrollView.contentOffset.y - scrollView.contentSize.height / 3.0 @@ -433,14 +433,14 @@ class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecog } } - func updatePresentationState(_ f: (GalleryControllerPresentationState) -> GalleryControllerPresentationState, transition: ContainedViewLayoutTransition) { + open func updatePresentationState(_ f: (GalleryControllerPresentationState) -> GalleryControllerPresentationState, transition: ContainedViewLayoutTransition) { self.presentationState = f(self.presentationState) if let (navigationBarHeight, layout) = self.containerLayout { self.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition) } } - @objc func panGesture(_ recognizer: SwipeToDismissGestureRecognizer) { + @objc private func panGesture(_ recognizer: SwipeToDismissGestureRecognizer) { switch recognizer.state { case .began: break diff --git a/submodules/GalleryUI/Sources/GalleryControllerPresentationState.swift b/submodules/GalleryUI/Sources/GalleryControllerPresentationState.swift new file mode 100644 index 0000000000..7fd9620cb5 --- /dev/null +++ b/submodules/GalleryUI/Sources/GalleryControllerPresentationState.swift @@ -0,0 +1,17 @@ +import Foundation + +public final class GalleryControllerPresentationState { + public let footerContentNode: GalleryFooterContentNode? + + public init() { + self.footerContentNode = nil + } + + public init(footerContentNode: GalleryFooterContentNode?) { + self.footerContentNode = footerContentNode + } + + public func withUpdatedFooterContentNode(_ footerContentNode: GalleryFooterContentNode?) -> GalleryControllerPresentationState { + return GalleryControllerPresentationState(footerContentNode: footerContentNode) + } +} diff --git a/submodules/GalleryUI/Sources/GalleryFooterContentNode.swift b/submodules/GalleryUI/Sources/GalleryFooterContentNode.swift new file mode 100644 index 0000000000..9fe0dadf41 --- /dev/null +++ b/submodules/GalleryUI/Sources/GalleryFooterContentNode.swift @@ -0,0 +1,33 @@ +import Foundation +import UIKit +import AsyncDisplayKit +import Display +import SwiftSignalKit + +public final class GalleryControllerInteraction { + public let presentController: (ViewController, ViewControllerPresentationArguments?) -> Void + public let dismissController: () -> Void + public let replaceRootController: (ViewController, ValuePromise?) -> Void + + public init(presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, dismissController: @escaping () -> Void, replaceRootController: @escaping (ViewController, ValuePromise?) -> Void) { + self.presentController = presentController + self.dismissController = dismissController + self.replaceRootController = replaceRootController + } +} + +open class GalleryFooterContentNode: ASDisplayNode { + public var requestLayout: ((ContainedViewLayoutTransition) -> Void)? + public var controllerInteraction: GalleryControllerInteraction? + + open func updateLayout(size: CGSize, metrics: LayoutMetrics, leftInset: CGFloat, rightInset: CGFloat, bottomInset: CGFloat, contentInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat { + return 0.0 + } + + open func animateIn(fromHeight: CGFloat, previousContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition) { + } + + open func animateOut(toHeight: CGFloat, nextContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { + completion() + } +} diff --git a/submodules/TelegramUI/TelegramUI/GalleryFooterNode.swift b/submodules/GalleryUI/Sources/GalleryFooterNode.swift similarity index 91% rename from submodules/TelegramUI/TelegramUI/GalleryFooterNode.swift rename to submodules/GalleryUI/Sources/GalleryFooterNode.swift index cfcd4eefeb..7537360dce 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryFooterNode.swift +++ b/submodules/GalleryUI/Sources/GalleryFooterNode.swift @@ -3,7 +3,7 @@ import UIKit import AsyncDisplayKit import Display -final class GalleryFooterNode: ASDisplayNode { +public final class GalleryFooterNode: ASDisplayNode { private let backgroundNode: ASDisplayNode private var currentFooterContentNode: GalleryFooterContentNode? @@ -11,7 +11,7 @@ final class GalleryFooterNode: ASDisplayNode { private let controllerInteraction: GalleryControllerInteraction - init(controllerInteraction: GalleryControllerInteraction) { + public init(controllerInteraction: GalleryControllerInteraction) { self.controllerInteraction = controllerInteraction self.backgroundNode = ASDisplayNode() @@ -22,7 +22,7 @@ final class GalleryFooterNode: ASDisplayNode { self.addSubnode(self.backgroundNode) } - func updateLayout(_ layout: ContainerViewLayout, footerContentNode: GalleryFooterContentNode?, thumbnailPanelHeight: CGFloat, transition: ContainedViewLayoutTransition) { + public func updateLayout(_ layout: ContainerViewLayout, footerContentNode: GalleryFooterContentNode?, thumbnailPanelHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.currentLayout = (layout, thumbnailPanelHeight) let cleanInsets = layout.insets(options: []) @@ -69,7 +69,7 @@ final class GalleryFooterNode: ASDisplayNode { } } - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { if !self.backgroundNode.frame.contains(point) { return nil } diff --git a/submodules/GalleryUI/Sources/GalleryItem.swift b/submodules/GalleryUI/Sources/GalleryItem.swift new file mode 100644 index 0000000000..89cfa918e5 --- /dev/null +++ b/submodules/GalleryUI/Sources/GalleryItem.swift @@ -0,0 +1,27 @@ +import Foundation + +public struct GalleryItemOriginData: Equatable { + public var title: String? + public var timestamp: Int32? + + public init(title: String?, timestamp: Int32?) { + self.title = title + self.timestamp = timestamp + } +} + +public struct GalleryItemIndexData: Equatable { + public var position: Int32 + public var totalCount: Int32 + + public init(position: Int32, totalCount: Int32) { + self.position = position + self.totalCount = totalCount + } +} + +public protocol GalleryItem { + func node() -> GalleryItemNode + func updateNode(node: GalleryItemNode) + func thumbnailItem() -> (Int64, GalleryThumbnailItem)? +} diff --git a/submodules/TelegramUI/TelegramUI/GalleryItemNode.swift b/submodules/GalleryUI/Sources/GalleryItemNode.swift similarity index 85% rename from submodules/TelegramUI/TelegramUI/GalleryItemNode.swift rename to submodules/GalleryUI/Sources/GalleryItemNode.swift index cbe3019609..7a91e6988a 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryItemNode.swift +++ b/submodules/GalleryUI/Sources/GalleryItemNode.swift @@ -12,7 +12,7 @@ public enum GalleryItemNodeNavigationStyle { open class GalleryItemNode: ASDisplayNode { private var _index: Int? - var index: Int { + public var index: Int { get { return self._index! } set(value) { @@ -20,13 +20,13 @@ open class GalleryItemNode: ASDisplayNode { } } - var toggleControlsVisibility: () -> Void = { } - var dismiss: () -> Void = { } - var beginCustomDismiss: () -> Void = { } - var completeCustomDismiss: () -> Void = { } - var baseNavigationController: () -> NavigationController? = { return nil } + public var toggleControlsVisibility: () -> Void = { } + public var dismiss: () -> Void = { } + public var beginCustomDismiss: () -> Void = { } + public var completeCustomDismiss: () -> Void = { } + public var baseNavigationController: () -> NavigationController? = { return nil } - override init() { + override public init() { super.init() self.setViewBlock({ diff --git a/submodules/GalleryUI/Sources/GalleryItemTransitionNode.swift b/submodules/GalleryUI/Sources/GalleryItemTransitionNode.swift new file mode 100644 index 0000000000..040a3e0ad4 --- /dev/null +++ b/submodules/GalleryUI/Sources/GalleryItemTransitionNode.swift @@ -0,0 +1,7 @@ +import Foundation +import AccountContext + +public protocol GalleryItemTransitionNode: class { + func isAvailableForGalleryTransition() -> Bool + var decoration: UniversalVideoDecoration? { get } +} diff --git a/submodules/TelegramUI/TelegramUI/GalleryNavigationCheckNode.swift b/submodules/GalleryUI/Sources/GalleryNavigationCheckNode.swift similarity index 69% rename from submodules/TelegramUI/TelegramUI/GalleryNavigationCheckNode.swift rename to submodules/GalleryUI/Sources/GalleryNavigationCheckNode.swift index 3a53d69013..2c0abd29e4 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryNavigationCheckNode.swift +++ b/submodules/GalleryUI/Sources/GalleryNavigationCheckNode.swift @@ -5,10 +5,10 @@ import Display import TelegramPresentationData import CheckNode -final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDisplayNode { +public final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDisplayNode { private var checkNode: CheckNode - init(theme: PresentationTheme) { + public init(theme: PresentationTheme) { self.checkNode = CheckNode(strokeColor: theme.list.itemCheckColors.strokeColor, fillColor: theme.list.itemCheckColors.fillColor, foregroundColor: theme.list.itemCheckColors.foregroundColor, style: .navigation) super.init() @@ -16,27 +16,27 @@ final class GalleryNavigationCheckNode: ASDisplayNode, NavigationButtonCustomDis self.addSubnode(self.checkNode) } - var isHighlightable: Bool { + public var isHighlightable: Bool { return false } - var isChecked: Bool { + public var isChecked: Bool { return self.checkNode.isChecked } - func setIsChecked(_ isChecked: Bool, animated: Bool) { + public func setIsChecked(_ isChecked: Bool, animated: Bool) { self.checkNode.setIsChecked(isChecked, animated: animated) } - func addTarget(target: AnyObject?, action: Selector) { + public func addTarget(target: AnyObject?, action: Selector) { self.checkNode.addTarget(target: target, action: action) } - override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { + override public func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { return CGSize(width: 39.0, height: 39.0) } - override func layout() { + override public func layout() { super.layout() let size = self.bounds.size diff --git a/submodules/TelegramUI/TelegramUI/GalleryNavigationRecipientNode.swift b/submodules/GalleryUI/Sources/GalleryNavigationRecipientNode.swift similarity index 81% rename from submodules/TelegramUI/TelegramUI/GalleryNavigationRecipientNode.swift rename to submodules/GalleryUI/Sources/GalleryNavigationRecipientNode.swift index a3f9e70a32..8dc795867d 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryNavigationRecipientNode.swift +++ b/submodules/GalleryUI/Sources/GalleryNavigationRecipientNode.swift @@ -4,11 +4,11 @@ import AsyncDisplayKit import Display import LegacyComponents -final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCustomDisplayNode { +public final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCustomDisplayNode { private var iconNode: ASImageNode private var textNode: ImmediateTextNode - init(color: UIColor, title: String) { + public init(color: UIColor, title: String) { self.iconNode = ASImageNode() self.iconNode.alpha = 0.45 self.iconNode.image = TGComponentsImageNamed("PhotoPickerArrow") @@ -28,16 +28,16 @@ final class GalleryNavigationRecipientNode: ASDisplayNode, NavigationButtonCusto } } - var isHighlightable: Bool { + public var isHighlightable: Bool { return false } - override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { + override public func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { let textSize = self.textNode.updateLayout(CGSize(width: constrainedSize.width - 50.0, height: constrainedSize.height)) return CGSize(width: textSize.width + 12.0, height: 30.0) } - override func layout() { + override public func layout() { super.layout() if let image = self.iconNode.image { diff --git a/submodules/TelegramUI/TelegramUI/GalleryPagerNode.swift b/submodules/GalleryUI/Sources/GalleryPagerNode.swift similarity index 89% rename from submodules/TelegramUI/TelegramUI/GalleryPagerNode.swift rename to submodules/GalleryUI/Sources/GalleryPagerNode.swift index ca32017143..fea7e407af 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryPagerNode.swift +++ b/submodules/GalleryUI/Sources/GalleryPagerNode.swift @@ -5,7 +5,7 @@ import Display import SwiftSignalKit import Postbox -struct GalleryPagerInsertItem { +public struct GalleryPagerInsertItem { public let index: Int public let item: GalleryItem public let previousIndex: Int? @@ -17,31 +17,38 @@ struct GalleryPagerInsertItem { } } -struct GalleryPagerUpdateItem { - let index: Int - let previousIndex: Int - let item: GalleryItem +public struct GalleryPagerUpdateItem { + public let index: Int + public let previousIndex: Int + public let item: GalleryItem - init(index: Int, previousIndex: Int, item: GalleryItem) { + public init(index: Int, previousIndex: Int, item: GalleryItem) { self.index = index self.previousIndex = previousIndex self.item = item } } -struct GalleryPagerTransaction { - let deleteItems: [Int] - let insertItems: [GalleryPagerInsertItem] - let updateItems: [GalleryPagerUpdateItem] - let focusOnItem: Int? +public struct GalleryPagerTransaction { + public let deleteItems: [Int] + public let insertItems: [GalleryPagerInsertItem] + public let updateItems: [GalleryPagerUpdateItem] + public let focusOnItem: Int? + + public init(deleteItems: [Int], insertItems: [GalleryPagerInsertItem], updateItems: [GalleryPagerUpdateItem], focusOnItem: Int?) { + self.deleteItems = deleteItems + self.insertItems = insertItems + self.updateItems = updateItems + self.focusOnItem = focusOnItem + } } -final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { +public final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { private let pageGap: CGFloat private let scrollView: UIScrollView - private(set) var items: [GalleryItem] = [] + public private(set) var items: [GalleryItem] = [] private var itemNodes: [GalleryItemNode] = [] private var ignoreDidScroll = false private var ignoreCentralItemIndexUpdate = false @@ -55,16 +62,16 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { private var containerLayout: (ContainerViewLayout, CGFloat)? - var centralItemIndexUpdated: (Int?) -> Void = { _ in } + public var centralItemIndexUpdated: (Int?) -> Void = { _ in } private var invalidatedItems = false - var centralItemIndexOffsetUpdated: (([GalleryItem]?, Int, CGFloat)?) -> Void = { _ in } - var toggleControlsVisibility: () -> Void = { } - var dismiss: () -> Void = { } - var beginCustomDismiss: () -> Void = { } - var completeCustomDismiss: () -> Void = { } - var baseNavigationController: () -> NavigationController? = { return nil } + public var centralItemIndexOffsetUpdated: (([GalleryItem]?, Int, CGFloat)?) -> Void = { _ in } + public var toggleControlsVisibility: () -> Void = { } + public var dismiss: () -> Void = { } + public var beginCustomDismiss: () -> Void = { } + public var completeCustomDismiss: () -> Void = { } + public var baseNavigationController: () -> NavigationController? = { return nil } - init(pageGap: CGFloat) { + public init(pageGap: CGFloat) { self.pageGap = pageGap self.scrollView = UIScrollView() if #available(iOSApplicationExtension 11.0, iOS 11.0, *) { @@ -85,7 +92,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { self.view.addSubview(self.scrollView) } - var isScrollEnabled: Bool { + public var isScrollEnabled: Bool { get { return self.scrollView.isScrollEnabled } @@ -94,7 +101,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { } } - func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { + public func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { self.containerLayout = (layout, navigationBarHeight) var centralPoint: CGPoint? @@ -129,14 +136,14 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { } } - func ready() -> Signal { + public func ready() -> Signal { if let itemNode = self.centralItemNode() { return itemNode.ready() } return .single(Void()) } - func centralItemNode() -> GalleryItemNode? { + public func centralItemNode() -> GalleryItemNode? { if let centralItemIndex = self.centralItemIndex, let centralItemNode = self.visibleItemNode(at: centralItemIndex) { return centralItemNode } else { @@ -144,7 +151,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { } } - func replaceItems(_ items: [GalleryItem], centralItemIndex: Int?, keepFirst: Bool = false) { + public func replaceItems(_ items: [GalleryItem], centralItemIndex: Int?, keepFirst: Bool = false) { var updateItems: [GalleryPagerUpdateItem] = [] let deleteItems: [Int] = [] var insertItems: [GalleryPagerInsertItem] = [] @@ -158,7 +165,7 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { self.transaction(GalleryPagerTransaction(deleteItems: deleteItems, insertItems: insertItems, updateItems: updateItems, focusOnItem: centralItemIndex)) } - func transaction(_ transaction: GalleryPagerTransaction) { + public func transaction(_ transaction: GalleryPagerTransaction) { for updatedItem in transaction.updateItems { self.items[updatedItem.previousIndex] = updatedItem.item if let itemNode = self.visibleItemNode(at: updatedItem.previousIndex) { @@ -397,23 +404,23 @@ final class GalleryPagerNode: ASDisplayNode, UIScrollViewDelegate { self.updateCentralIndexOffset(transition: .immediate) } - func scrollViewDidScroll(_ scrollView: UIScrollView) { + public func scrollViewDidScroll(_ scrollView: UIScrollView) { if !self.ignoreDidScroll { self.updateItemNodes(transition: .immediate) } } - func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { if !decelerate { self.ensureItemsLoaded(force: false) } } - func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { + public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { self.ensureItemsLoaded(force: true) } - func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { self.ensureItemsLoaded(force: true) } diff --git a/submodules/TelegramUI/TelegramUI/GalleryThumbnailContainerNode.swift b/submodules/GalleryUI/Sources/GalleryThumbnailContainerNode.swift similarity index 91% rename from submodules/TelegramUI/TelegramUI/GalleryThumbnailContainerNode.swift rename to submodules/GalleryUI/Sources/GalleryThumbnailContainerNode.swift index 88e1ccffbb..6f373b8a7c 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryThumbnailContainerNode.swift +++ b/submodules/GalleryUI/Sources/GalleryThumbnailContainerNode.swift @@ -8,7 +8,7 @@ private let itemBaseSize = CGSize(width: 23.0, height: 42.0) private let spacing: CGFloat = 2.0 private let maxWidth: CGFloat = 75.0 -protocol GalleryThumbnailItem { +public protocol GalleryThumbnailItem { func isEqual(to: GalleryThumbnailItem) -> Bool var image: (Signal<(TransformImageArguments) -> DrawingContext?, NoError>, CGSize) { get } } @@ -48,12 +48,12 @@ private final class GalleryThumbnailItemNode: ASDisplayNode { } } -final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { - let groupId: Int64 +public final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { + public let groupId: Int64 private let scrollNode: ASScrollNode - private(set) var items: [GalleryThumbnailItem] = [] - private(set) var indexes: [Int] = [] + public private(set) var items: [GalleryThumbnailItem] = [] + public private(set) var indexes: [Int] = [] private var itemNodes: [GalleryThumbnailItemNode] = [] private var centralIndexAndProgress: (Int, CGFloat?)? private var currentLayout: CGSize? @@ -62,7 +62,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { public var itemChanged: ((Int) -> Void)? - init(groupId: Int64) { + public init(groupId: Int64) { self.groupId = groupId self.scrollNode = ASScrollNode() @@ -86,7 +86,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func updateItems(_ items: [GalleryThumbnailItem], indexes: [Int], centralIndex: Int, progress: CGFloat) { + public func updateItems(_ items: [GalleryThumbnailItem], indexes: [Int], centralIndex: Int, progress: CGFloat) { self.indexes = indexes var items: [GalleryThumbnailItem] = items.count <= 1 ? [] : items var updated = false @@ -103,7 +103,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { if updated { var itemNodes: [GalleryThumbnailItemNode] = [] for item in items { - if let index = self.items.index(where: { $0.isEqual(to: item) }) { + if let index = self.items.firstIndex(where: { $0.isEqual(to: item) }) { itemNodes.append(self.itemNodes[index]) } else { itemNodes.append(GalleryThumbnailItemNode(item: item)) @@ -129,14 +129,14 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func updateCentralIndexAndProgress(centralIndex: Int, progress: CGFloat, transition: ContainedViewLayoutTransition = .immediate) { + public func updateCentralIndexAndProgress(centralIndex: Int, progress: CGFloat, transition: ContainedViewLayoutTransition = .immediate) { self.centralIndexAndProgress = (centralIndex, progress) if let size = self.currentLayout { self.updateLayout(size: size, transition: transition) } } - func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { self.currentLayout = size if let (centralIndex, progress) = self.centralIndexAndProgress { self.updateLayout(size: size, centralIndex: centralIndex, progress: progress, transition: transition) @@ -148,7 +148,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { return CGPoint(x: -contentInset.left + (CGFloat(index) + progress) * (itemBaseSize.width + spacing), y: 0.0) } - func updateLayout(size: CGSize, centralIndex: Int, progress: CGFloat?, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, centralIndex: Int, progress: CGFloat?, transition: ContainedViewLayoutTransition) { self.currentLayout = size self.scrollNode.frame = CGRect(origin: CGPoint(), size: size) let centralSpacing: CGFloat = 8.0 @@ -231,7 +231,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func animateOut(toRight: Bool) { + public func animateOut(toRight: Bool) { let collection = toRight ? self.itemNodes : self.itemNodes.reversed() let offset: CGFloat = toRight ? -15.0 : 15.0 var delay: Double = 0.0 @@ -242,7 +242,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func scrollViewDidScroll(_ scrollView: UIScrollView) { + public func scrollViewDidScroll(_ scrollView: UIScrollView) { guard let currentLayout = self.currentLayout else { return } @@ -267,7 +267,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { guard let currentLayout = self.currentLayout else { return } @@ -283,7 +283,7 @@ final class GalleryThumbnailContainerNode: ASDisplayNode, UIScrollViewDelegate { } } - func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { guard let currentLayout = self.currentLayout, !scrollView.isTracking else { return } diff --git a/submodules/GalleryUI/Sources/GalleryUI.h b/submodules/GalleryUI/Sources/GalleryUI.h new file mode 100644 index 0000000000..96745aa2f0 --- /dev/null +++ b/submodules/GalleryUI/Sources/GalleryUI.h @@ -0,0 +1,19 @@ +// +// GalleryUI.h +// GalleryUI +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for GalleryUI. +FOUNDATION_EXPORT double GalleryUIVersionNumber; + +//! Project version string for GalleryUI. +FOUNDATION_EXPORT const unsigned char GalleryUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/GalleryVideoDecoration.swift b/submodules/GalleryUI/Sources/GalleryVideoDecoration.swift similarity index 88% rename from submodules/TelegramUI/TelegramUI/GalleryVideoDecoration.swift rename to submodules/GalleryUI/Sources/GalleryVideoDecoration.swift index 009e8d82c9..3a57b5d066 100644 --- a/submodules/TelegramUI/TelegramUI/GalleryVideoDecoration.swift +++ b/submodules/GalleryUI/Sources/GalleryVideoDecoration.swift @@ -7,20 +7,20 @@ import UniversalMediaPlayer import AccountContext import PhotoResources -final class GalleryVideoDecoration: UniversalVideoDecoration { - let backgroundNode: ASDisplayNode? = nil - let contentContainerNode: ASDisplayNode - let foregroundNode: ASDisplayNode? = nil +public final class GalleryVideoDecoration: UniversalVideoDecoration { + public let backgroundNode: ASDisplayNode? = nil + public let contentContainerNode: ASDisplayNode + public let foregroundNode: ASDisplayNode? = nil private var contentNode: (ASDisplayNode & UniversalVideoContentNode)? private var validLayoutSize: CGSize? - init() { + public init() { self.contentContainerNode = ASDisplayNode() } - func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { + public func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { if self.contentNode !== contentNode { let previous = self.contentNode self.contentNode = contentNode @@ -43,7 +43,7 @@ final class GalleryVideoDecoration: UniversalVideoDecoration { } } - func updateCorners(_ corners: ImageCorners) { + public func updateCorners(_ corners: ImageCorners) { self.contentContainerNode.clipsToBounds = true if isRoundEqualCorners(corners) { self.contentContainerNode.cornerRadius = corners.topLeft.radius @@ -70,7 +70,7 @@ final class GalleryVideoDecoration: UniversalVideoDecoration { } } - func updateClippingFrame(_ frame: CGRect, completion: (() -> Void)?) { + public func updateClippingFrame(_ frame: CGRect, completion: (() -> Void)?) { self.contentContainerNode.layer.animate(from: NSValue(cgRect: self.contentContainerNode.bounds), to: NSValue(cgRect: frame), keyPath: "bounds", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.25, removeOnCompletion: false, completion: { _ in }) @@ -89,10 +89,10 @@ final class GalleryVideoDecoration: UniversalVideoDecoration { } } - func updateContentNodeSnapshot(_ snapshot: UIView?) { + public func updateContentNodeSnapshot(_ snapshot: UIView?) { } - func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { self.validLayoutSize = size let bounds = CGRect(origin: CGPoint(), size: size) @@ -112,9 +112,9 @@ final class GalleryVideoDecoration: UniversalVideoDecoration { } } - func setStatus(_ status: Signal) { + public func setStatus(_ status: Signal) { } - func tap() { + public func tap() { } } diff --git a/submodules/TelegramUI/TelegramUI/ChatAnimationGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatAnimationGalleryItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatAnimationGalleryItem.swift rename to submodules/GalleryUI/Sources/Items/ChatAnimationGalleryItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatDocumentGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatDocumentGalleryItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatDocumentGalleryItem.swift rename to submodules/GalleryUI/Sources/Items/ChatDocumentGalleryItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatExternalFileGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatExternalFileGalleryItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatExternalFileGalleryItem.swift rename to submodules/GalleryUI/Sources/Items/ChatExternalFileGalleryItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatImageGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatImageGalleryItem.swift rename to submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift diff --git a/submodules/TelegramUI/TelegramUI/UniversalVideoGalleryItem.swift b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift similarity index 97% rename from submodules/TelegramUI/TelegramUI/UniversalVideoGalleryItem.swift rename to submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift index 0176cd3ca2..7281d6bfcb 100644 --- a/submodules/TelegramUI/TelegramUI/UniversalVideoGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/UniversalVideoGalleryItem.swift @@ -9,13 +9,14 @@ import TelegramPresentationData import UniversalMediaPlayer import AccountContext import RadialStatusNode +import TelegramUniversalVideoContent -enum UniversalVideoGalleryItemContentInfo { +public enum UniversalVideoGalleryItemContentInfo { case message(Message) case webPage(TelegramMediaWebpage, Media) } -class UniversalVideoGalleryItem: GalleryItem { +public class UniversalVideoGalleryItem: GalleryItem { let context: AccountContext let presentationData: PresentationData let content: UniversalVideoContent @@ -32,7 +33,7 @@ class UniversalVideoGalleryItem: GalleryItem { let performAction: (GalleryControllerInteractionTapAction) -> Void let openActionOptions: (GalleryControllerInteractionTapAction) -> Void - init(context: AccountContext, presentationData: PresentationData, content: UniversalVideoContent, originData: GalleryItemOriginData?, indexData: GalleryItemIndexData?, contentInfo: UniversalVideoGalleryItemContentInfo?, caption: NSAttributedString, credit: NSAttributedString? = nil, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void) { + public init(context: AccountContext, presentationData: PresentationData, content: UniversalVideoContent, originData: GalleryItemOriginData?, indexData: GalleryItemIndexData?, contentInfo: UniversalVideoGalleryItemContentInfo?, caption: NSAttributedString, credit: NSAttributedString? = nil, hideControls: Bool = false, fromPlayingVideo: Bool = false, landscape: Bool = false, timecode: Double? = nil, playbackCompleted: @escaping () -> Void = {}, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction) -> Void) { self.context = context self.presentationData = presentationData self.content = content @@ -50,7 +51,7 @@ class UniversalVideoGalleryItem: GalleryItem { self.openActionOptions = openActionOptions } - func node() -> GalleryItemNode { + public func node() -> GalleryItemNode { let node = UniversalVideoGalleryItemNode(context: self.context, presentationData: self.presentationData, performAction: self.performAction, openActionOptions: self.openActionOptions) if let indexData = self.indexData { @@ -62,7 +63,7 @@ class UniversalVideoGalleryItem: GalleryItem { return node } - func updateNode(node: GalleryItemNode) { + public func updateNode(node: GalleryItemNode) { if let node = node as? UniversalVideoGalleryItemNode { if let indexData = self.indexData { node._title.set(.single("\(indexData.position + 1) \(self.presentationData.strings.Common_of) \(indexData.totalCount)")) @@ -72,7 +73,7 @@ class UniversalVideoGalleryItem: GalleryItem { } } - func thumbnailItem() -> (Int64, GalleryThumbnailItem)? { + public func thumbnailItem() -> (Int64, GalleryThumbnailItem)? { guard let contentInfo = self.contentInfo else { return nil } @@ -879,7 +880,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { let fromTransform: CATransform3D let toTransform: CATransform3D - if let interactiveMediaNode = node.0 as? ChatMessageInteractiveMediaNode, interactiveMediaNode.automaticPlayback ?? false, videoNode.hasAttachedContext { + if let interactiveMediaNode = node.0 as? GalleryItemTransitionNode, interactiveMediaNode.isAvailableForGalleryTransition(), videoNode.hasAttachedContext { copyView.removeFromSuperview() let previousFrame = videoNode.frame @@ -896,7 +897,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { let targetScale = max(transformedFrame.size.width / videoNode.layer.bounds.size.width, transformedFrame.size.height / videoNode.layer.bounds.size.height) videoNode.backgroundColor = .clear - if let bubbleDecoration = interactiveMediaNode.videoNodeDecoration, let decoration = videoNode.decoration as? GalleryVideoDecoration { + if let bubbleDecoration = interactiveMediaNode.decoration as? ChatBubbleVideoDecoration, let decoration = videoNode.decoration as? GalleryVideoDecoration { transformedSuperFrame = transformedSuperFrame.offsetBy(dx: bubbleDecoration.corners.extendedEdges.right / 2.0 - bubbleDecoration.corners.extendedEdges.left / 2.0, dy: 0.0) if let item = self.item { let size = item.content.dimensions.aspectFilled(bubbleDecoration.contentContainerNode.frame.size) @@ -921,7 +922,7 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode { videoNode.continuePlayingWithoutSound() } } - } else if let _ = node.0 as? InstantPagePlayableVideoNode, videoNode.hasAttachedContext { + } else if let _ = node.0 as? GalleryItemTransitionNode, videoNode.hasAttachedContext { copyView.removeFromSuperview() let previousFrame = videoNode.frame diff --git a/submodules/TelegramUI/TelegramUI/SecretMediaPreviewController.swift b/submodules/GalleryUI/Sources/SecretMediaPreviewController.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecretMediaPreviewController.swift rename to submodules/GalleryUI/Sources/SecretMediaPreviewController.swift index 17ab4b4e25..9244ec960a 100644 --- a/submodules/TelegramUI/TelegramUI/SecretMediaPreviewController.swift +++ b/submodules/GalleryUI/Sources/SecretMediaPreviewController.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import TelegramPresentationData import AccountContext import RadialStatusNode +import ScreenCaptureDetection private func galleryMediaForMedia(media: Media) -> Media? { if let media = media as? TelegramMediaImage { diff --git a/submodules/TelegramUI/TelegramUI/SecretMediaPreviewFooterContentNode.swift b/submodules/GalleryUI/Sources/SecretMediaPreviewFooterContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecretMediaPreviewFooterContentNode.swift rename to submodules/GalleryUI/Sources/SecretMediaPreviewFooterContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ZoomableContentGalleryItemNode.swift b/submodules/GalleryUI/Sources/ZoomableContentGalleryItemNode.swift similarity index 93% rename from submodules/TelegramUI/TelegramUI/ZoomableContentGalleryItemNode.swift rename to submodules/GalleryUI/Sources/ZoomableContentGalleryItemNode.swift index 5d034a7595..7c7851232a 100644 --- a/submodules/TelegramUI/TelegramUI/ZoomableContentGalleryItemNode.swift +++ b/submodules/GalleryUI/Sources/ZoomableContentGalleryItemNode.swift @@ -3,15 +3,15 @@ import UIKit import Display import AsyncDisplayKit -class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { - let scrollNode: ASScrollNode +open class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { + public let scrollNode: ASScrollNode private var containerLayout: ContainerViewLayout? private var ignoreZoom = false private var ignoreZoomTransition: ContainedViewLayoutTransition? - var zoomableContent: (CGSize, ASDisplayNode)? { + public var zoomableContent: (CGSize, ASDisplayNode)? { didSet { if oldValue?.1 !== self.zoomableContent?.1 { if let node = oldValue?.1 { @@ -26,7 +26,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { } } - override init() { + override public init() { self.scrollNode = ASScrollNode() if #available(iOSApplicationExtension 11.0, iOS 11.0, *) { self.scrollNode.view.contentInsetAdjustmentBehavior = .never @@ -51,7 +51,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { self.addSubnode(self.scrollNode) } - @objc func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) { + @objc open func contentTap(_ recognizer: TapLongTapOrDoubleTapGestureRecognizer) { if recognizer.state == .ended { if let (gesture, location) = recognizer.lastRecognizedGestureAndLocation { switch gesture { @@ -82,7 +82,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { } } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { + override open func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition) var shouldResetContents = false @@ -194,11 +194,11 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { } } - func viewForZooming(in scrollView: UIScrollView) -> UIView? { + open func viewForZooming(in scrollView: UIScrollView) -> UIView? { return self.zoomableContent?.1.view } - func scrollViewDidZoom(_ scrollView: UIScrollView) { + open func scrollViewDidZoom(_ scrollView: UIScrollView) { if !self.ignoreZoom { self.centerScrollViewContents(transition: self.ignoreZoomTransition ?? .immediate) } @@ -209,7 +209,7 @@ class ZoomableContentGalleryItemNode: GalleryItemNode, UIScrollViewDelegate { } } - override func contentSize() -> CGSize? { + override open func contentSize() -> CGSize? { if let (_, contentNode) = self.zoomableContent { let size = contentNode.view.convert(contentNode.bounds, to: self.view).size return CGSize(width: floor(size.width), height: floor(size.height)) diff --git a/submodules/GameUI/GameUI_Xcode.xcodeproj/project.pbxproj b/submodules/GameUI/GameUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..d8823adb7f --- /dev/null +++ b/submodules/GameUI/GameUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,591 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C18E22FFA17D00FAB518 /* GameUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C18C22FFA17D00FAB518 /* GameUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C19B23001E2700FAB518 /* GameControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19823001E2700FAB518 /* GameControllerNode.swift */; }; + D0C9C19C23001E2700FAB518 /* GameControllerTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */; }; + D0C9C19D23001E2700FAB518 /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C19A23001E2700FAB518 /* GameController.swift */; }; + D0C9C1A023001E5A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C19F23001E5A00FAB518 /* Foundation.framework */; }; + D0C9C1A223001EFD00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A123001EFD00FAB518 /* UIKit.framework */; }; + D0C9C1A423001F0000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A323001F0000FAB518 /* Display.framework */; }; + D0C9C1A623001F0400FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C1A823001F0800FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A723001F0800FAB518 /* TelegramCore.framework */; }; + D0C9C1AA23001F0D00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */; }; + D0C9C1AC23001F1300FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AB23001F1300FAB518 /* Postbox.framework */; }; + D0C9C1AE23001F1900FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */; }; + D0C9C1B023001F1D00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */; }; + D0C9C1B223001F2500FAB518 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1B123001F2500FAB518 /* WebKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + D0C9C1B423001F3D00FAB518 /* ShareController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1B323001F3D00FAB518 /* ShareController.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C18922FFA17D00FAB518 /* GameUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GameUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C18C22FFA17D00FAB518 /* GameUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GameUI.h; sourceTree = ""; }; + D0C9C18D22FFA17D00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C19823001E2700FAB518 /* GameControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerNode.swift; sourceTree = ""; }; + D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerTitleView.swift; sourceTree = ""; }; + D0C9C19A23001E2700FAB518 /* GameController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; + D0C9C19F23001E5A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C1A123001EFD00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C1A323001F0000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1A723001F0800FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1AB23001F1300FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1B123001F2500FAB518 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + D0C9C1B323001F3D00FAB518 /* ShareController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ShareController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C18622FFA17D00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C1B423001F3D00FAB518 /* ShareController.framework in Frameworks */, + D0C9C1B223001F2500FAB518 /* WebKit.framework in Frameworks */, + D0C9C1B023001F1D00FAB518 /* AccountContext.framework in Frameworks */, + D0C9C1AE23001F1900FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C1AC23001F1300FAB518 /* Postbox.framework in Frameworks */, + D0C9C1AA23001F0D00FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C1A823001F0800FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C1A623001F0400FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C1A423001F0000FAB518 /* Display.framework in Frameworks */, + D0C9C1A223001EFD00FAB518 /* UIKit.framework in Frameworks */, + D0C9C1A023001E5A00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C17F22FFA17D00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C18D22FFA17D00FAB518 /* Info.plist */, + D0C9C18B22FFA17D00FAB518 /* Sources */, + D0C9C18A22FFA17D00FAB518 /* Products */, + D0C9C19E23001E5A00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C18A22FFA17D00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C18922FFA17D00FAB518 /* GameUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C18B22FFA17D00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C19A23001E2700FAB518 /* GameController.swift */, + D0C9C19823001E2700FAB518 /* GameControllerNode.swift */, + D0C9C19923001E2700FAB518 /* GameControllerTitleView.swift */, + D0C9C18C22FFA17D00FAB518 /* GameUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C19E23001E5A00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C1B323001F3D00FAB518 /* ShareController.framework */, + D0C9C1B123001F2500FAB518 /* WebKit.framework */, + D0C9C1AF23001F1D00FAB518 /* AccountContext.framework */, + D0C9C1AD23001F1900FAB518 /* TelegramPresentationData.framework */, + D0C9C1AB23001F1300FAB518 /* Postbox.framework */, + D0C9C1A923001F0D00FAB518 /* SwiftSignalKit.framework */, + D0C9C1A723001F0800FAB518 /* TelegramCore.framework */, + D0C9C1A523001F0400FAB518 /* AsyncDisplayKit.framework */, + D0C9C1A323001F0000FAB518 /* Display.framework */, + D0C9C1A123001EFD00FAB518 /* UIKit.framework */, + D0C9C19F23001E5A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C18422FFA17D00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C18E22FFA17D00FAB518 /* GameUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C18822FFA17D00FAB518 /* GameUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C19122FFA17D00FAB518 /* Build configuration list for PBXNativeTarget "GameUI" */; + buildPhases = ( + D0C9C18422FFA17D00FAB518 /* Headers */, + D0C9C18522FFA17D00FAB518 /* Sources */, + D0C9C18622FFA17D00FAB518 /* Frameworks */, + D0C9C18722FFA17D00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GameUI; + productName = GameUI; + productReference = D0C9C18922FFA17D00FAB518 /* GameUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C18022FFA17D00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C18822FFA17D00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C18322FFA17D00FAB518 /* Build configuration list for PBXProject "GameUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C17F22FFA17D00FAB518; + productRefGroup = D0C9C18A22FFA17D00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C18822FFA17D00FAB518 /* GameUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C18722FFA17D00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C18522FFA17D00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C19B23001E2700FAB518 /* GameControllerNode.swift in Sources */, + D0C9C19D23001E2700FAB518 /* GameController.swift in Sources */, + D0C9C19C23001E2700FAB518 /* GameControllerTitleView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C18F22FFA17D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C19022FFA17D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C19222FFA17D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C19322FFA17D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C19423001D9F00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C19523001D9F00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C19623001DBE00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C19723001DBE00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.GameUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C18322FFA17D00FAB518 /* Build configuration list for PBXProject "GameUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C18F22FFA17D00FAB518 /* DebugAppStoreLLC */, + D0C9C19423001D9F00FAB518 /* DebugHockeyapp */, + D0C9C19022FFA17D00FAB518 /* ReleaseAppStoreLLC */, + D0C9C19623001DBE00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C19122FFA17D00FAB518 /* Build configuration list for PBXNativeTarget "GameUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C19222FFA17D00FAB518 /* DebugAppStoreLLC */, + D0C9C19523001D9F00FAB518 /* DebugHockeyapp */, + D0C9C19322FFA17D00FAB518 /* ReleaseAppStoreLLC */, + D0C9C19723001DBE00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C18022FFA17D00FAB518 /* Project object */; +} diff --git a/submodules/GameUI/Info.plist b/submodules/GameUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/GameUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/GameController.swift b/submodules/GameUI/Sources/GameController.swift similarity index 83% rename from submodules/TelegramUI/TelegramUI/GameController.swift rename to submodules/GameUI/Sources/GameController.swift index 6c17dce60f..d82d782767 100644 --- a/submodules/TelegramUI/TelegramUI/GameController.swift +++ b/submodules/GameUI/Sources/GameController.swift @@ -8,7 +8,7 @@ import Postbox import TelegramPresentationData import AccountContext -final class GameController: ViewController { +public final class GameController: ViewController { private var controllerNode: GameControllerNode { return self.displayNode as! GameControllerNode } @@ -19,7 +19,7 @@ final class GameController: ViewController { private var presentationData: PresentationData - init(context: AccountContext, url: String, message: Message) { + public init(context: AccountContext, url: String, message: Message) { self.context = context self.url = url self.message = message @@ -53,7 +53,7 @@ final class GameController: ViewController { } } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -61,38 +61,37 @@ final class GameController: ViewController { assert(true) } - @objc func closePressed() { + @objc private func closePressed() { self.dismiss() } - @objc func sharePressed() { + @objc private func sharePressed() { self.controllerNode.shareWithoutScore() } - override func loadDisplayNode() { + override public func loadDisplayNode() { self.displayNode = GameControllerNode(context: self.context, presentationData: self.presentationData, url: self.url, present: { [weak self] c, a in self?.present(c, in: .window(.root), with: a) }, message: self.message) } - override func dismiss(completion: (() -> Void)? = nil) { + override public func dismiss(completion: (() -> Void)? = nil) { self.controllerNode.animateOut(completion: { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) completion?() }) } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition) } - override var presentationController: UIPresentationController? { + override public var presentationController: UIPresentationController? { get { return nil } set(value) { - } } } diff --git a/submodules/TelegramUI/TelegramUI/GameControllerNode.swift b/submodules/GameUI/Sources/GameControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/GameControllerNode.swift rename to submodules/GameUI/Sources/GameControllerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/GameControllerTitleView.swift b/submodules/GameUI/Sources/GameControllerTitleView.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/GameControllerTitleView.swift rename to submodules/GameUI/Sources/GameControllerTitleView.swift index d8fe704e93..528d9828b1 100644 --- a/submodules/TelegramUI/TelegramUI/GameControllerTitleView.swift +++ b/submodules/GameUI/Sources/GameControllerTitleView.swift @@ -5,7 +5,6 @@ import Display import Postbox import TelegramCore import SwiftSignalKit -import LegacyComponents import TelegramPresentationData final class GameControllerTitleView: UIView { diff --git a/submodules/GameUI/Sources/GameUI.h b/submodules/GameUI/Sources/GameUI.h new file mode 100644 index 0000000000..18da9568d0 --- /dev/null +++ b/submodules/GameUI/Sources/GameUI.h @@ -0,0 +1,19 @@ +// +// GameUI.h +// GameUI +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for GameUI. +FOUNDATION_EXPORT double GameUIVersionNumber; + +//! Project version string for GameUI. +FOUNDATION_EXPORT const unsigned char GameUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/ImageCompression/ImageCompression_Xcode.xcodeproj/project.pbxproj b/submodules/ImageCompression/ImageCompression_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..da44f63bcf --- /dev/null +++ b/submodules/ImageCompression/ImageCompression_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,551 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C4AB2300E50200FAB518 /* ImageCompression.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C4A92300E50200FAB518 /* ImageCompression.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C4B62300E57200FAB518 /* ImageCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4B52300E57200FAB518 /* ImageCompression.swift */; }; + D0C9C4B92300E59B00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4B82300E59A00FAB518 /* Foundation.framework */; }; + D0C9C4BB2300E59C00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BA2300E59C00FAB518 /* UIKit.framework */; }; + D0C9C4BD2300E5A000FAB518 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C4A62300E50200FAB518 /* ImageCompression.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImageCompression.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4A92300E50200FAB518 /* ImageCompression.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageCompression.h; sourceTree = ""; }; + D0C9C4AA2300E50200FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C4B52300E57200FAB518 /* ImageCompression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCompression.swift; sourceTree = ""; }; + D0C9C4B82300E59A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C4BA2300E59C00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C4A32300E50200FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4BD2300E5A000FAB518 /* AVFoundation.framework in Frameworks */, + D0C9C4BB2300E59C00FAB518 /* UIKit.framework in Frameworks */, + D0C9C4B92300E59B00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C49C2300E50200FAB518 = { + isa = PBXGroup; + children = ( + D0C9C4AA2300E50200FAB518 /* Info.plist */, + D0C9C4A82300E50200FAB518 /* Sources */, + D0C9C4A72300E50200FAB518 /* Products */, + D0C9C4B72300E59900FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C4A72300E50200FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C4A62300E50200FAB518 /* ImageCompression.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C4A82300E50200FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C4B52300E57200FAB518 /* ImageCompression.swift */, + D0C9C4A92300E50200FAB518 /* ImageCompression.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C4B72300E59900FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C4BC2300E5A000FAB518 /* AVFoundation.framework */, + D0C9C4BA2300E59C00FAB518 /* UIKit.framework */, + D0C9C4B82300E59A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C4A12300E50200FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4AB2300E50200FAB518 /* ImageCompression.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C4A52300E50200FAB518 /* ImageCompression */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C4AE2300E50200FAB518 /* Build configuration list for PBXNativeTarget "ImageCompression" */; + buildPhases = ( + D0C9C4A12300E50200FAB518 /* Headers */, + D0C9C4A22300E50200FAB518 /* Sources */, + D0C9C4A32300E50200FAB518 /* Frameworks */, + D0C9C4A42300E50200FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ImageCompression; + productName = ImageCompression; + productReference = D0C9C4A62300E50200FAB518 /* ImageCompression.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C49D2300E50200FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C4A52300E50200FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C4A02300E50200FAB518 /* Build configuration list for PBXProject "ImageCompression_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C49C2300E50200FAB518; + productRefGroup = D0C9C4A72300E50200FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C4A52300E50200FAB518 /* ImageCompression */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C4A42300E50200FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C4A22300E50200FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4B62300E57200FAB518 /* ImageCompression.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C4AC2300E50200FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C4AD2300E50200FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4AF2300E50200FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C4B02300E50200FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4B12300E53B00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C4B22300E53B00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C4B32300E54900FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C4B42300E54900FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ImageCompression; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C4A02300E50200FAB518 /* Build configuration list for PBXProject "ImageCompression_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4AC2300E50200FAB518 /* DebugAppStoreLLC */, + D0C9C4B12300E53B00FAB518 /* DebugHockeyapp */, + D0C9C4AD2300E50200FAB518 /* ReleaseAppStoreLLC */, + D0C9C4B32300E54900FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C4AE2300E50200FAB518 /* Build configuration list for PBXNativeTarget "ImageCompression" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4AF2300E50200FAB518 /* DebugAppStoreLLC */, + D0C9C4B22300E53B00FAB518 /* DebugHockeyapp */, + D0C9C4B02300E50200FAB518 /* ReleaseAppStoreLLC */, + D0C9C4B42300E54900FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C49D2300E50200FAB518 /* Project object */; +} diff --git a/submodules/ImageCompression/Info.plist b/submodules/ImageCompression/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/ImageCompression/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/ImageCompression/Sources/ImageCompression.h b/submodules/ImageCompression/Sources/ImageCompression.h new file mode 100644 index 0000000000..b0c98db10b --- /dev/null +++ b/submodules/ImageCompression/Sources/ImageCompression.h @@ -0,0 +1,19 @@ +// +// ImageCompression.h +// ImageCompression +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for ImageCompression. +FOUNDATION_EXPORT double ImageCompressionVersionNumber; + +//! Project version string for ImageCompression. +FOUNDATION_EXPORT const unsigned char ImageCompressionVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/ImageCompression.swift b/submodules/ImageCompression/Sources/ImageCompression.swift similarity index 86% rename from submodules/TelegramUI/TelegramUI/ImageCompression.swift rename to submodules/ImageCompression/Sources/ImageCompression.swift index 6397b1e429..b4fd52325b 100644 --- a/submodules/TelegramUI/TelegramUI/ImageCompression.swift +++ b/submodules/ImageCompression/Sources/ImageCompression.swift @@ -1,13 +1,8 @@ import Foundation import AVFoundation import UIKit -import Display -import TelegramCore -import Postbox -import TelegramUIPrivateModule - -func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? { +public func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? { let data = NSMutableData() guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, "public.jpeg" as CFString, 1, nil) else { return nil @@ -30,7 +25,7 @@ func compressImageToJPEG(_ image: UIImage, quality: Float) -> Data? { } @available(iOSApplicationExtension 11.0, iOS 11.0, *) -func compressImage(_ image: UIImage, quality: Float) -> Data? { +public func compressImage(_ image: UIImage, quality: Float) -> Data? { let data = NSMutableData() guard let destination = CGImageDestinationCreateWithData(data as CFMutableData, AVFileType.heic as CFString, 1, nil) else { return nil diff --git a/submodules/LegacyUI/Info.plist b/submodules/LegacyUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/LegacyUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/LegacyUI/LegacyUI_Xcode.xcodeproj/project.pbxproj b/submodules/LegacyUI/LegacyUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..205fd2a02c --- /dev/null +++ b/submodules/LegacyUI/LegacyUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,627 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C45F2300E24D00FAB518 /* LegacyUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C45D2300E24D00FAB518 /* LegacyUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C46C2300E2D700FAB518 /* LegacyEmptyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */; }; + D0C9C46D2300E2D700FAB518 /* LegacyControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */; }; + D0C9C46E2300E2D700FAB518 /* LegacyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C46B2300E2D700FAB518 /* LegacyController.swift */; }; + D0C9C4712300E2E800FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4702300E2E800FAB518 /* Foundation.framework */; }; + D0C9C4732300E2EC00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4722300E2EC00FAB518 /* UIKit.framework */; }; + D0C9C4752300E2F100FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4742300E2F100FAB518 /* Display.framework */; }; + D0C9C4772300E2F400FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */; }; + D0C9C4792300E2F900FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */; }; + D0C9C47B2300E2FD00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */; }; + D0C9C4812300E35400FAB518 /* TelegramInitializeLegacyComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */; }; + D0C9C4832300E35E00FAB518 /* MtProtoKitDynamic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */; }; + D0C9C4852300E36A00FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4842300E36A00FAB518 /* Postbox.framework */; }; + D0C9C4872300E36F00FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4862300E36F00FAB518 /* TelegramCore.framework */; }; + D0C9C4892300E37900FAB518 /* DeviceAccess.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4882300E37900FAB518 /* DeviceAccess.framework */; }; + D0C9C48B2300E37F00FAB518 /* TelegramAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */; }; + D0C9C48D2300E38700FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C48C2300E38700FAB518 /* AccountContext.framework */; }; + D0C9C48F2300E3B500FAB518 /* LegacyComponentsStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */; }; + D0C9C4922300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */; }; + D0C9C4932300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */; }; + D0C9C4952300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */; }; + D0C9C4972300E3FC00FAB518 /* LegacyImageDownloadActor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */; }; + D0C9C4992300E42D00FAB518 /* LegacyMediaLocations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */; }; + D0C9C49B2300E4C300FAB518 /* LegacyNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LegacyUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C45D2300E24D00FAB518 /* LegacyUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LegacyUI.h; sourceTree = ""; }; + D0C9C45E2300E24D00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyEmptyController.swift; sourceTree = ""; }; + D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyControllerNode.swift; sourceTree = ""; }; + D0C9C46B2300E2D700FAB518 /* LegacyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyController.swift; sourceTree = ""; }; + D0C9C4702300E2E800FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C4722300E2EC00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C4742300E2F100FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramInitializeLegacyComponents.swift; sourceTree = ""; }; + D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MtProtoKitDynamic.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4842300E36A00FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4862300E36F00FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4882300E37900FAB518 /* DeviceAccess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DeviceAccess.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C48C2300E38700FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyComponentsStickers.swift; sourceTree = ""; }; + D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyHTTPOperationImpl.swift; sourceTree = ""; }; + D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyPeerAvatarPlaceholderDataSource.swift; sourceTree = ""; }; + D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyLocationVenueIconDataSource.swift; sourceTree = ""; }; + D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyImageDownloadActor.swift; sourceTree = ""; }; + D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyMediaLocations.swift; sourceTree = ""; }; + D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyNavigationController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C4572300E24D00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C48D2300E38700FAB518 /* AccountContext.framework in Frameworks */, + D0C9C48B2300E37F00FAB518 /* TelegramAudio.framework in Frameworks */, + D0C9C4892300E37900FAB518 /* DeviceAccess.framework in Frameworks */, + D0C9C4872300E36F00FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C4852300E36A00FAB518 /* Postbox.framework in Frameworks */, + D0C9C4832300E35E00FAB518 /* MtProtoKitDynamic.framework in Frameworks */, + D0C9C47B2300E2FD00FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C4792300E2F900FAB518 /* LegacyComponents.framework in Frameworks */, + D0C9C4772300E2F400FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C4752300E2F100FAB518 /* Display.framework in Frameworks */, + D0C9C4732300E2EC00FAB518 /* UIKit.framework in Frameworks */, + D0C9C4712300E2E800FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C4502300E24D00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C45E2300E24D00FAB518 /* Info.plist */, + D0C9C45C2300E24D00FAB518 /* Sources */, + D0C9C45B2300E24D00FAB518 /* Products */, + D0C9C46F2300E2E800FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C45B2300E24D00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C45C2300E24D00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C49A2300E4C300FAB518 /* LegacyNavigationController.swift */, + D0C9C4982300E42D00FAB518 /* LegacyMediaLocations.swift */, + D0C9C4962300E3FC00FAB518 /* LegacyImageDownloadActor.swift */, + D0C9C4942300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift */, + D0C9C4902300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift */, + D0C9C4912300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift */, + D0C9C48E2300E3B500FAB518 /* LegacyComponentsStickers.swift */, + D0C9C4802300E35400FAB518 /* TelegramInitializeLegacyComponents.swift */, + D0C9C46B2300E2D700FAB518 /* LegacyController.swift */, + D0C9C46A2300E2D700FAB518 /* LegacyControllerNode.swift */, + D0C9C4692300E2D700FAB518 /* LegacyEmptyController.swift */, + D0C9C45D2300E24D00FAB518 /* LegacyUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C46F2300E2E800FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C48C2300E38700FAB518 /* AccountContext.framework */, + D0C9C48A2300E37F00FAB518 /* TelegramAudio.framework */, + D0C9C4882300E37900FAB518 /* DeviceAccess.framework */, + D0C9C4862300E36F00FAB518 /* TelegramCore.framework */, + D0C9C4842300E36A00FAB518 /* Postbox.framework */, + D0C9C4822300E35E00FAB518 /* MtProtoKitDynamic.framework */, + D0C9C47A2300E2FD00FAB518 /* TelegramPresentationData.framework */, + D0C9C4782300E2F900FAB518 /* LegacyComponents.framework */, + D0C9C4762300E2F400FAB518 /* SwiftSignalKit.framework */, + D0C9C4742300E2F100FAB518 /* Display.framework */, + D0C9C4722300E2EC00FAB518 /* UIKit.framework */, + D0C9C4702300E2E800FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C4552300E24D00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C45F2300E24D00FAB518 /* LegacyUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C4592300E24D00FAB518 /* LegacyUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C4622300E24D00FAB518 /* Build configuration list for PBXNativeTarget "LegacyUI" */; + buildPhases = ( + D0C9C4552300E24D00FAB518 /* Headers */, + D0C9C4562300E24D00FAB518 /* Sources */, + D0C9C4572300E24D00FAB518 /* Frameworks */, + D0C9C4582300E24D00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LegacyUI; + productName = LegacyUI; + productReference = D0C9C45A2300E24D00FAB518 /* LegacyUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C4512300E24D00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C4592300E24D00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C4542300E24D00FAB518 /* Build configuration list for PBXProject "LegacyUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C4502300E24D00FAB518; + productRefGroup = D0C9C45B2300E24D00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C4592300E24D00FAB518 /* LegacyUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C4582300E24D00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C4562300E24D00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C49B2300E4C300FAB518 /* LegacyNavigationController.swift in Sources */, + D0C9C4992300E42D00FAB518 /* LegacyMediaLocations.swift in Sources */, + D0C9C4972300E3FC00FAB518 /* LegacyImageDownloadActor.swift in Sources */, + D0C9C4932300E3DA00FAB518 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */, + D0C9C46D2300E2D700FAB518 /* LegacyControllerNode.swift in Sources */, + D0C9C4812300E35400FAB518 /* TelegramInitializeLegacyComponents.swift in Sources */, + D0C9C46C2300E2D700FAB518 /* LegacyEmptyController.swift in Sources */, + D0C9C46E2300E2D700FAB518 /* LegacyController.swift in Sources */, + D0C9C4922300E3DA00FAB518 /* LegacyHTTPOperationImpl.swift in Sources */, + D0C9C48F2300E3B500FAB518 /* LegacyComponentsStickers.swift in Sources */, + D0C9C4952300E3E900FAB518 /* LegacyLocationVenueIconDataSource.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C4602300E24D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C4612300E24D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4632300E24D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C4642300E24D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4652300E28100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C4662300E28100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C4672300E28D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C4682300E28D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LegacyUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C4542300E24D00FAB518 /* Build configuration list for PBXProject "LegacyUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4602300E24D00FAB518 /* DebugAppStoreLLC */, + D0C9C4652300E28100FAB518 /* DebugHockeyapp */, + D0C9C4612300E24D00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4672300E28D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C4622300E24D00FAB518 /* Build configuration list for PBXNativeTarget "LegacyUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4632300E24D00FAB518 /* DebugAppStoreLLC */, + D0C9C4662300E28100FAB518 /* DebugHockeyapp */, + D0C9C4642300E24D00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4682300E28D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C4512300E24D00FAB518 /* Project object */; +} diff --git a/submodules/TelegramUI/TelegramUI/LegacyComponentsStickers.swift b/submodules/LegacyUI/Sources/LegacyComponentsStickers.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyComponentsStickers.swift rename to submodules/LegacyUI/Sources/LegacyComponentsStickers.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyController.swift b/submodules/LegacyUI/Sources/LegacyController.swift similarity index 91% rename from submodules/TelegramUI/TelegramUI/LegacyController.swift rename to submodules/LegacyUI/Sources/LegacyController.swift index 565e1724a1..bccfc2f78f 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyController.swift +++ b/submodules/LegacyUI/Sources/LegacyController.swift @@ -89,11 +89,11 @@ private final class LegacyComponentsOverlayWindowManagerImpl: NSObject, LegacyCo } } -final class LegacyControllerContext: NSObject, LegacyComponentsContext { - private(set) weak var controller: ViewController? +public final class LegacyControllerContext: NSObject, LegacyComponentsContext { + public private(set) weak var controller: ViewController? private let theme: PresentationTheme? - init(controller: ViewController?, theme: PresentationTheme?) { + public init(controller: ViewController?, theme: PresentationTheme?) { self.controller = controller self.theme = theme @@ -234,18 +234,18 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext { } - func makeOverlayWindowManager() -> LegacyComponentsOverlayWindowManager! { + public func makeOverlayWindowManager() -> LegacyComponentsOverlayWindowManager! { return LegacyComponentsOverlayWindowManagerImpl(parentController: self.controller, theme: self.theme) } - func applicationStatusBarAlpha() -> CGFloat { + public func applicationStatusBarAlpha() -> CGFloat { if let controller = self.controller { return controller.statusBar.alpha } return 0.0 } - func setApplicationStatusBarAlpha(_ alpha: CGFloat) { + public func setApplicationStatusBarAlpha(_ alpha: CGFloat) { if let controller = self.controller { controller.statusBar.alpha = alpha self.updateDeferScreenEdgeGestures() @@ -262,18 +262,18 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext { } } - func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, delay: TimeInterval, duration: TimeInterval, completion: (() -> Void)!) { + public func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, delay: TimeInterval, duration: TimeInterval, completion: (() -> Void)!) { completion?() } - func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, duration: TimeInterval, completion: (() -> Void)!) { + public func animateApplicationStatusBarAppearance(_ statusBarAnimation: Int32, duration: TimeInterval, completion: (() -> Void)!) { self.animateApplicationStatusBarAppearance(statusBarAnimation, delay: 0.0, duration: duration, completion: completion) } - func animateApplicationStatusBarStyleTransition(withDuration duration: TimeInterval) { + public func animateApplicationStatusBarStyleTransition(withDuration duration: TimeInterval) { } - func safeAreaInset() -> UIEdgeInsets { + public func safeAreaInset() -> UIEdgeInsets { if let controller = self.controller as? LegacyController, let validLayout = controller.validLayout { var safeInsets = validLayout.safeInsets if safeInsets.top.isEqual(to: 44.0) { @@ -287,7 +287,7 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext { return UIEdgeInsets() } - func prefersLightStatusBar() -> Bool { + public func prefersLightStatusBar() -> Bool { if let controller = self.controller { switch controller.statusBar.statusBarStyle { case .Black: @@ -303,7 +303,7 @@ final class LegacyControllerContext: NSObject, LegacyComponentsContext { } } -public class LegacyController: ViewController, PresentableController { +open class LegacyController: ViewController, PresentableController { public private(set) var legacyController: UIViewController! private let presentation: LegacyControllerPresentation @@ -318,17 +318,17 @@ public class LegacyController: ViewController, PresentableController { fileprivate var validLayout: ContainerViewLayout? - var controllerLoaded: (() -> Void)? + public var controllerLoaded: (() -> Void)? public var presentationCompleted: (() -> Void)? private let sizeClass: SVariable = SVariable() - var enableSizeClassSignal: Bool = false - var sizeClassSignal: SSignal { + public var enableSizeClassSignal: Bool = false + public var sizeClassSignal: SSignal { return self.sizeClass.signal()! } private var enableContainerLayoutUpdates = false - var disposables = DisposableSet() + public var disposables = DisposableSet() public init(presentation: LegacyControllerPresentation, theme: PresentationTheme? = nil, strings: PresentationStrings? = nil, initialLayout: ContainerViewLayout? = nil) { self.sizeClass.set(SSignal.single(UIUserInterfaceSizeClass.compact.rawValue as NSNumber)) @@ -368,12 +368,12 @@ public class LegacyController: ViewController, PresentableController { } } - override public func loadDisplayNode() { + override open func loadDisplayNode() { self.displayNode = LegacyControllerNode() self.displayNodeDidLoad() } - override public func viewWillAppear(_ animated: Bool) { + override open func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if self.ignoreAppearanceMethodInvocations() { @@ -398,7 +398,7 @@ public class LegacyController: ViewController, PresentableController { self.legacyController.viewWillAppear(animated && passControllerAppearanceAnimated(in: true, presentation: self.presentation)) } - override public func viewWillDisappear(_ animated: Bool) { + override open func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) if self.ignoreAppearanceMethodInvocations() { @@ -410,7 +410,7 @@ public class LegacyController: ViewController, PresentableController { private var viewDidAppearProcessed = false - override public func viewDidAppear(_ animated: Bool) { + override open func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.enableContainerLayoutUpdates = true if self.ignoreAppearanceMethodInvocations() { @@ -448,7 +448,7 @@ public class LegacyController: ViewController, PresentableController { } } - override public func viewDidDisappear(_ animated: Bool) { + override open func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) self.viewDidAppearProcessed = false @@ -459,7 +459,7 @@ public class LegacyController: ViewController, PresentableController { self.legacyController.viewDidDisappear(animated && passControllerAppearanceAnimated(in: false, presentation: self.presentation)) } - override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override open func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { let previousSizeClass: UIUserInterfaceSizeClass if let validLayout = self.validLayout, case .regular = validLayout.metrics.widthClass { previousSizeClass = .regular @@ -523,7 +523,7 @@ public class LegacyController: ViewController, PresentableController { } } - func dismissWithAnimation() { + public func dismissWithAnimation() { self.controllerNode.animateModalOut { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) } diff --git a/submodules/TelegramUI/TelegramUI/LegacyControllerNode.swift b/submodules/LegacyUI/Sources/LegacyControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyControllerNode.swift rename to submodules/LegacyUI/Sources/LegacyControllerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyEmptyController.swift b/submodules/LegacyUI/Sources/LegacyEmptyController.swift similarity index 85% rename from submodules/TelegramUI/TelegramUI/LegacyEmptyController.swift rename to submodules/LegacyUI/Sources/LegacyEmptyController.swift index fc25416d48..8f4d117e79 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyEmptyController.swift +++ b/submodules/LegacyUI/Sources/LegacyEmptyController.swift @@ -3,21 +3,21 @@ import UIKit import LegacyComponents import Display -final class LegacyEmptyController: TGViewController { - override init!(context: LegacyComponentsContext!) { +public final class LegacyEmptyController: TGViewController { + override public init!(context: LegacyComponentsContext!) { super.init(context: context) } - required init?(coder aDecoder: NSCoder) { + required public init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func viewDidLoad() { + override public func viewDidLoad() { self.view.backgroundColor = nil self.view.isOpaque = false } - override func present(context generator: ((LegacyComponentsContext?) -> UIViewController?)!) { + override public func present(context generator: ((LegacyComponentsContext?) -> UIViewController?)!) { if let context = self.context as? LegacyControllerContext, let controller = context.controller { let context = legacyContextGet() let presentationData = context?.sharedContext.currentPresentationData.with { $0 } diff --git a/submodules/TelegramUI/TelegramUI/LegacyHTTPOperationImpl.swift b/submodules/LegacyUI/Sources/LegacyHTTPOperationImpl.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyHTTPOperationImpl.swift rename to submodules/LegacyUI/Sources/LegacyHTTPOperationImpl.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyImageDownloadActor.swift b/submodules/LegacyUI/Sources/LegacyImageDownloadActor.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyImageDownloadActor.swift rename to submodules/LegacyUI/Sources/LegacyImageDownloadActor.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyLocationVenueIconDataSource.swift b/submodules/LegacyUI/Sources/LegacyLocationVenueIconDataSource.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyLocationVenueIconDataSource.swift rename to submodules/LegacyUI/Sources/LegacyLocationVenueIconDataSource.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyMediaLocations.swift b/submodules/LegacyUI/Sources/LegacyMediaLocations.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyMediaLocations.swift rename to submodules/LegacyUI/Sources/LegacyMediaLocations.swift diff --git a/submodules/TelegramUI/TelegramUI/LegacyNavigationController.swift b/submodules/LegacyUI/Sources/LegacyNavigationController.swift similarity index 56% rename from submodules/TelegramUI/TelegramUI/LegacyNavigationController.swift rename to submodules/LegacyUI/Sources/LegacyNavigationController.swift index fa0c72acd2..76d56ee8fd 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyNavigationController.swift +++ b/submodules/LegacyUI/Sources/LegacyNavigationController.swift @@ -2,7 +2,7 @@ import Foundation import UIKit import LegacyComponents -func makeLegacyNavigationController(rootController: UIViewController) -> TGNavigationController { +public func makeLegacyNavigationController(rootController: UIViewController) -> TGNavigationController { return TGNavigationController.make(withRootController: rootController) } diff --git a/submodules/TelegramUI/TelegramUI/LegacyPeerAvatarPlaceholderDataSource.swift b/submodules/LegacyUI/Sources/LegacyPeerAvatarPlaceholderDataSource.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/LegacyPeerAvatarPlaceholderDataSource.swift rename to submodules/LegacyUI/Sources/LegacyPeerAvatarPlaceholderDataSource.swift diff --git a/submodules/LegacyUI/Sources/LegacyUI.h b/submodules/LegacyUI/Sources/LegacyUI.h new file mode 100644 index 0000000000..f42c305222 --- /dev/null +++ b/submodules/LegacyUI/Sources/LegacyUI.h @@ -0,0 +1,19 @@ +// +// LegacyUI.h +// LegacyUI +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for LegacyUI. +FOUNDATION_EXPORT double LegacyUIVersionNumber; + +//! Project version string for LegacyUI. +FOUNDATION_EXPORT const unsigned char LegacyUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/TelegramInitializeLegacyComponents.swift b/submodules/LegacyUI/Sources/TelegramInitializeLegacyComponents.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/TelegramInitializeLegacyComponents.swift rename to submodules/LegacyUI/Sources/TelegramInitializeLegacyComponents.swift index 9d14c7a4e5..c456274e06 100644 --- a/submodules/TelegramUI/TelegramUI/TelegramInitializeLegacyComponents.swift +++ b/submodules/LegacyUI/Sources/TelegramInitializeLegacyComponents.swift @@ -22,7 +22,7 @@ public func updateLegacyLocalization(strings: PresentationStrings) { legacyLocalization = TGLocalization(version: 0, code: strings.primaryComponent.languageCode, dict: strings.primaryComponent.dict, isActive: true) } -func updateLegacyTheme() { +public func updateLegacyTheme() { TGCheckButtonView.resetCache() } diff --git a/submodules/MediaPlayer/Sources/FFMpegMediaFrameSourceContext.swift b/submodules/MediaPlayer/Sources/FFMpegMediaFrameSourceContext.swift index b12b445457..891b215e93 100644 --- a/submodules/MediaPlayer/Sources/FFMpegMediaFrameSourceContext.swift +++ b/submodules/MediaPlayer/Sources/FFMpegMediaFrameSourceContext.swift @@ -75,6 +75,8 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa let readCount = min(resourceSize - context.readingOffset, Int(bufferSize)) let requestRange: Range = context.readingOffset ..< (context.readingOffset + readCount) + precondition(readCount < 1 * 1024 * 1024) + if let maximumFetchSize = context.maximumFetchSize { context.touchedRanges.insert(integersIn: requestRange) var totalCount = 0 @@ -122,12 +124,14 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa let readingOffset = context.readingOffset let readCount = max(0, min(fileSize - readingOffset, Int(bufferSize))) let range = readingOffset ..< (readingOffset + readCount) + precondition(readCount < 1 * 1024 * 1024) lseek(fd, off_t(range.lowerBound), SEEK_SET) var data = Data(count: readCount) - data.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer) -> Void in - let readBytes = read(fd, bytes, readCount) - assert(readBytes <= readCount) + data.withUnsafeMutableBytes { bytes -> Void in + precondition(bytes.baseAddress != nil) + let readBytes = read(fd, bytes.baseAddress, readCount) + precondition(readBytes <= readCount) } fetchedData = data close(fd) @@ -143,13 +147,17 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa let readCount = max(0, min(next.size - readingOffset, Int(bufferSize))) let range = readingOffset ..< (readingOffset + readCount) + precondition(readCount < 1 * 1024 * 1024) + let fd = open(next.path, O_RDONLY, S_IRUSR) if fd >= 0 { lseek(fd, off_t(range.lowerBound), SEEK_SET) var data = Data(count: readCount) - data.withUnsafeMutableBytes { (bytes: UnsafeMutablePointer) -> Void in - let readBytes = read(fd, bytes, readCount) + data.withUnsafeMutableBytes { bytes -> Void in + precondition(bytes.baseAddress != nil) + let readBytes = read(fd, bytes.baseAddress, readCount) assert(readBytes <= readCount) + precondition(readBytes <= readCount) } fetchedData = data close(fd) @@ -168,8 +176,9 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa } } if let fetchedData = fetchedData { - fetchedData.withUnsafeBytes { (bytes: UnsafePointer) -> Void in - memcpy(buffer, bytes, fetchedData.count) + fetchedData.withUnsafeBytes { bytes -> Void in + precondition(bytes.baseAddress != nil) + memcpy(buffer, bytes.baseAddress, fetchedData.count) } fetchedCount = Int32(fetchedData.count) context.readingOffset += Int(fetchedCount) diff --git a/submodules/OpenInExternalAppUI/Info.plist b/submodules/OpenInExternalAppUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/OpenInExternalAppUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj/project.pbxproj b/submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..e0469f8a62 --- /dev/null +++ b/submodules/OpenInExternalAppUI/OpenInExternalAppUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,603 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C40F2300D60C00FAB518 /* OpenInExternalAppUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C41C2300D67800FAB518 /* OpenInOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4192300D67800FAB518 /* OpenInOptions.swift */; }; + D0C9C41D2300D67800FAB518 /* OpenInActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */; }; + D0C9C41E2300D67800FAB518 /* OpenInAppIconResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */; }; + D0C9C4212300D68A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4202300D68A00FAB518 /* Foundation.framework */; }; + D0C9C4232300D68D00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4222300D68D00FAB518 /* UIKit.framework */; }; + D0C9C4252300D69000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4242300D69000FAB518 /* Display.framework */; }; + D0C9C4272300D69500FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C4292300D69900FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */; }; + D0C9C42B2300D69D00FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42A2300D69D00FAB518 /* Postbox.framework */; }; + D0C9C42D2300D6A200FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */; }; + D0C9C42F2300D6A700FAB518 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C42E2300D6A700FAB518 /* MapKit.framework */; }; + D0C9C4312300D6AB00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */; }; + D0C9C4332300D6B100FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4322300D6B100FAB518 /* AccountContext.framework */; }; + D0C9C4352300D6B500FAB518 /* PhotoResources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4342300D6B500FAB518 /* PhotoResources.framework */; }; + D0C9C4372300D6C100FAB518 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4362300D6C000FAB518 /* CoreLocation.framework */; }; + D0C9C4392300D6C400FAB518 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */; }; + D0C9C43F2300D75500FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OpenInExternalAppUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenInExternalAppUI.h; sourceTree = ""; }; + D0C9C40E2300D60C00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C4192300D67800FAB518 /* OpenInOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInOptions.swift; sourceTree = ""; }; + D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInActionSheetController.swift; sourceTree = ""; }; + D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenInAppIconResources.swift; sourceTree = ""; }; + D0C9C4202300D68A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C4222300D68D00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C4242300D69000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C42A2300D69D00FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C42E2300D6A700FAB518 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; + D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4322300D6B100FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4342300D6B500FAB518 /* PhotoResources.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PhotoResources.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4362300D6C000FAB518 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UrlEscaping.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C4072300D60C00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C4392300D6C400FAB518 /* UrlEscaping.framework in Frameworks */, + D0C9C4372300D6C100FAB518 /* CoreLocation.framework in Frameworks */, + D0C9C4352300D6B500FAB518 /* PhotoResources.framework in Frameworks */, + D0C9C4332300D6B100FAB518 /* AccountContext.framework in Frameworks */, + D0C9C4312300D6AB00FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C42F2300D6A700FAB518 /* MapKit.framework in Frameworks */, + D0C9C42D2300D6A200FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C42B2300D69D00FAB518 /* Postbox.framework in Frameworks */, + D0C9C4292300D69900FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C4272300D69500FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C4252300D69000FAB518 /* Display.framework in Frameworks */, + D0C9C4232300D68D00FAB518 /* UIKit.framework in Frameworks */, + D0C9C4212300D68A00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C4002300D60C00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C40E2300D60C00FAB518 /* Info.plist */, + D0C9C40C2300D60C00FAB518 /* Sources */, + D0C9C40B2300D60C00FAB518 /* Products */, + D0C9C41F2300D68A00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C40B2300D60C00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C40C2300D60C00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C41A2300D67800FAB518 /* OpenInActionSheetController.swift */, + D0C9C41B2300D67800FAB518 /* OpenInAppIconResources.swift */, + D0C9C4192300D67800FAB518 /* OpenInOptions.swift */, + D0C9C43E2300D75500FAB518 /* FrameworkBundle.swift */, + D0C9C40D2300D60C00FAB518 /* OpenInExternalAppUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C41F2300D68A00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C4382300D6C400FAB518 /* UrlEscaping.framework */, + D0C9C4362300D6C000FAB518 /* CoreLocation.framework */, + D0C9C4342300D6B500FAB518 /* PhotoResources.framework */, + D0C9C4322300D6B100FAB518 /* AccountContext.framework */, + D0C9C4302300D6AB00FAB518 /* TelegramPresentationData.framework */, + D0C9C42E2300D6A700FAB518 /* MapKit.framework */, + D0C9C42C2300D6A200FAB518 /* TelegramCore.framework */, + D0C9C42A2300D69D00FAB518 /* Postbox.framework */, + D0C9C4282300D69900FAB518 /* SwiftSignalKit.framework */, + D0C9C4262300D69500FAB518 /* AsyncDisplayKit.framework */, + D0C9C4242300D69000FAB518 /* Display.framework */, + D0C9C4222300D68D00FAB518 /* UIKit.framework */, + D0C9C4202300D68A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C4052300D60C00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C40F2300D60C00FAB518 /* OpenInExternalAppUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C4092300D60C00FAB518 /* OpenInExternalAppUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C4122300D60C00FAB518 /* Build configuration list for PBXNativeTarget "OpenInExternalAppUI" */; + buildPhases = ( + D0C9C4052300D60C00FAB518 /* Headers */, + D0C9C4062300D60C00FAB518 /* Sources */, + D0C9C4072300D60C00FAB518 /* Frameworks */, + D0C9C4082300D60C00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OpenInExternalAppUI; + productName = OpenInExternalAppUI; + productReference = D0C9C40A2300D60C00FAB518 /* OpenInExternalAppUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C4012300D60C00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C4092300D60C00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C4042300D60C00FAB518 /* Build configuration list for PBXProject "OpenInExternalAppUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C4002300D60C00FAB518; + productRefGroup = D0C9C40B2300D60C00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C4092300D60C00FAB518 /* OpenInExternalAppUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C4082300D60C00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C4062300D60C00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C43F2300D75500FAB518 /* FrameworkBundle.swift in Sources */, + D0C9C41D2300D67800FAB518 /* OpenInActionSheetController.swift in Sources */, + D0C9C41C2300D67800FAB518 /* OpenInOptions.swift in Sources */, + D0C9C41E2300D67800FAB518 /* OpenInAppIconResources.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C4102300D60C00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C4112300D60C00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4132300D60C00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C4142300D60C00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C4152300D65600FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C4162300D65600FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C4172300D66100FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C4182300D66100FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.OpenInExternalAppUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C4042300D60C00FAB518 /* Build configuration list for PBXProject "OpenInExternalAppUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4102300D60C00FAB518 /* DebugAppStoreLLC */, + D0C9C4152300D65600FAB518 /* DebugHockeyapp */, + D0C9C4112300D60C00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4172300D66100FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C4122300D60C00FAB518 /* Build configuration list for PBXNativeTarget "OpenInExternalAppUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C4132300D60C00FAB518 /* DebugAppStoreLLC */, + D0C9C4162300D65600FAB518 /* DebugHockeyapp */, + D0C9C4142300D60C00FAB518 /* ReleaseAppStoreLLC */, + D0C9C4182300D66100FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C4012300D60C00FAB518 /* Project object */; +} diff --git a/submodules/OpenInExternalAppUI/Sources/FrameworkBundle.swift b/submodules/OpenInExternalAppUI/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/OpenInExternalAppUI/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/TelegramUI/TelegramUI/OpenInActionSheetController.swift b/submodules/OpenInExternalAppUI/Sources/OpenInActionSheetController.swift similarity index 95% rename from submodules/TelegramUI/TelegramUI/OpenInActionSheetController.swift rename to submodules/OpenInExternalAppUI/Sources/OpenInActionSheetController.swift index 4c1208b353..2b59aa3d95 100644 --- a/submodules/TelegramUI/TelegramUI/OpenInActionSheetController.swift +++ b/submodules/OpenInExternalAppUI/Sources/OpenInActionSheetController.swift @@ -11,19 +11,24 @@ import AccountContext import PhotoResources public struct OpenInControllerAction { - let title: String - let action: () -> Void + public let title: String + public let action: () -> Void + + public init(title: String, action: @escaping () -> Void) { + self.title = title + self.action = action + } } -final class OpenInActionSheetController: ActionSheetController { +public final class OpenInActionSheetController: ActionSheetController { private var presentationDisposable: Disposable? private let _ready = Promise() - override var ready: Promise { + override public var ready: Promise { return self._ready } - init(context: AccountContext, item: OpenInItem, additionalAction: OpenInControllerAction? = nil, openUrl: @escaping (String) -> Void) { + public init(context: AccountContext, item: OpenInItem, additionalAction: OpenInControllerAction? = nil, openUrl: @escaping (String) -> Void) { let presentationData = context.sharedContext.currentPresentationData.with { $0 } let theme = presentationData.theme let strings = presentationData.strings @@ -77,7 +82,7 @@ final class OpenInActionSheetController: ActionSheetController { ]) } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } diff --git a/submodules/TelegramUI/TelegramUI/OpenInAppIconResources.swift b/submodules/OpenInExternalAppUI/Sources/OpenInAppIconResources.swift similarity index 96% rename from submodules/TelegramUI/TelegramUI/OpenInAppIconResources.swift rename to submodules/OpenInExternalAppUI/Sources/OpenInAppIconResources.swift index d3b1856128..4c5379f68c 100644 --- a/submodules/TelegramUI/TelegramUI/OpenInAppIconResources.swift +++ b/submodules/OpenInExternalAppUI/Sources/OpenInAppIconResources.swift @@ -60,7 +60,7 @@ public class OpenInAppIconResource: TelegramMediaResource { } } -func fetchOpenInAppIconResource(resource: OpenInAppIconResource) -> Signal { +public func fetchOpenInAppIconResource(resource: OpenInAppIconResource) -> Signal { return Signal { subscriber in subscriber.putNext(.reset) diff --git a/submodules/OpenInExternalAppUI/Sources/OpenInExternalAppUI.h b/submodules/OpenInExternalAppUI/Sources/OpenInExternalAppUI.h new file mode 100644 index 0000000000..fa78128498 --- /dev/null +++ b/submodules/OpenInExternalAppUI/Sources/OpenInExternalAppUI.h @@ -0,0 +1,19 @@ +// +// OpenInExternalAppUI.h +// OpenInExternalAppUI +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for OpenInExternalAppUI. +FOUNDATION_EXPORT double OpenInExternalAppUIVersionNumber; + +//! Project version string for OpenInExternalAppUI. +FOUNDATION_EXPORT const unsigned char OpenInExternalAppUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/OpenInOptions.swift b/submodules/OpenInExternalAppUI/Sources/OpenInOptions.swift similarity index 96% rename from submodules/TelegramUI/TelegramUI/OpenInOptions.swift rename to submodules/OpenInExternalAppUI/Sources/OpenInOptions.swift index 2bca820ecc..f392d0bd34 100644 --- a/submodules/TelegramUI/TelegramUI/OpenInOptions.swift +++ b/submodules/OpenInExternalAppUI/Sources/OpenInOptions.swift @@ -6,33 +6,33 @@ import MapKit import AccountContext import UrlEscaping -enum OpenInItem { +public enum OpenInItem { case url(url: String) case location(location: TelegramMediaMap, withDirections: Bool) } -enum OpenInApplication { +public enum OpenInApplication { case safari case maps case other(title: String, identifier: Int64, scheme: String, store: String?) } -enum OpenInAction { +public enum OpenInAction { case none case openUrl(url: String) case openLocation(latitude: Double, longitude: Double, withDirections: Bool) } -final class OpenInOption { - let application: OpenInApplication - let action: () -> OpenInAction +public final class OpenInOption { + public let application: OpenInApplication + public let action: () -> OpenInAction - init(application: OpenInApplication, action: @escaping () -> OpenInAction) { + public init(application: OpenInApplication, action: @escaping () -> OpenInAction) { self.application = application self.action = action } - var title: String { + public var title: String { get { switch self.application { case .safari: @@ -46,7 +46,7 @@ final class OpenInOption { } } -func availableOpenInOptions(context: AccountContext, item: OpenInItem) -> [OpenInOption] { +public func availableOpenInOptions(context: AccountContext, item: OpenInItem) -> [OpenInOption] { return allOpenInOptions(context: context, item: item).filter { option in if case let .other(_, _, scheme, _) = option.application { return context.sharedContext.applicationBindings.canOpenUrl("\(scheme)://") diff --git a/submodules/PassportUI/Info.plist b/submodules/PassportUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/PassportUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/PassportUI/PassportUI_Xcode.xcodeproj/project.pbxproj b/submodules/PassportUI/PassportUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c38de867f1 --- /dev/null +++ b/submodules/PassportUI/PassportUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,775 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C1F02300222100FAB518 /* PassportUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C1EE2300222100FAB518 /* PassportUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C220230022AB00FAB518 /* SecureIdValueFormFileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */; }; + D0C9C221230022AB00FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */; }; + D0C9C222230022AB00FAB518 /* SecureIdDocumentImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */; }; + D0C9C223230022AB00FAB518 /* SecureIdAuthListFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */; }; + D0C9C224230022AB00FAB518 /* SecureIdDocumentFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */; }; + D0C9C225230022AB00FAB518 /* SecureIdDocumentFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */; }; + D0C9C226230022AB00FAB518 /* SecureIdValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C200230022A400FAB518 /* SecureIdValues.swift */; }; + D0C9C227230022AB00FAB518 /* SecureIdAuthListContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */; }; + D0C9C228230022AB00FAB518 /* SecureIdDocumentGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */; }; + D0C9C229230022AB00FAB518 /* SecureIdAuthControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */; }; + D0C9C22A230022AB00FAB518 /* SecureIdVerificationDocumentsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */; }; + D0C9C22B230022AB00FAB518 /* SecureIdValueFormPhoneItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */; }; + D0C9C22C230022AB00FAB518 /* FormControllerActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */; }; + D0C9C22D230022AB00FAB518 /* FormEditableBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */; }; + D0C9C22E230022AB00FAB518 /* FormControllerScrollerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */; }; + D0C9C22F230022AB00FAB518 /* FormControllerTextItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */; }; + D0C9C230230022AB00FAB518 /* SecureIdAuthHeaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */; }; + D0C9C231230022AB00FAB518 /* SecureIdAuthAcceptNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */; }; + D0C9C232230022AB00FAB518 /* SecureIdDocumentTypeSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */; }; + D0C9C233230022AB00FAB518 /* SecureIdAuthControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */; }; + D0C9C234230022AB00FAB518 /* FormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20E230022A700FAB518 /* FormControllerNode.swift */; }; + D0C9C235230022AB00FAB518 /* FormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C20F230022A700FAB518 /* FormController.swift */; }; + D0C9C236230022AB00FAB518 /* FormBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */; }; + D0C9C237230022AB00FAB518 /* SecureIdAuthFormContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */; }; + D0C9C238230022AB00FAB518 /* FormControllerTextInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */; }; + D0C9C239230022AB00FAB518 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */; }; + D0C9C23A230022AB00FAB518 /* SecureIdAuthPasswordSetupContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */; }; + D0C9C23B230022AB00FAB518 /* SecureIdAuthFormFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */; }; + D0C9C23C230022AB00FAB518 /* SecureIdAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */; }; + D0C9C23D230022AB00FAB518 /* FormControllerDetailActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */; }; + D0C9C23E230022AB00FAB518 /* SecureIdLocalResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */; }; + D0C9C23F230022AB00FAB518 /* SecureIdPlaintextFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */; }; + D0C9C240230022AB00FAB518 /* SecureIdPlaintextFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */; }; + D0C9C241230022AB00FAB518 /* SecureIdVerificationDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */; }; + D0C9C242230022AB00FAB518 /* FormControllerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */; }; + D0C9C243230022AB00FAB518 /* SecureIdAuthContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */; }; + D0C9C244230022AB00FAB518 /* FormControllerHeaderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */; }; + D0C9C247230022C100FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C246230022C100FAB518 /* UIKit.framework */; }; + D0C9C249230022C300FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C248230022C200FAB518 /* Foundation.framework */; }; + D0C9C24B230022C500FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24A230022C500FAB518 /* Postbox.framework */; }; + D0C9C24D230022C900FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24C230022C900FAB518 /* TelegramCore.framework */; }; + D0C9C24F230022CE00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */; }; + D0C9C251230022D400FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C253230022D800FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C252230022D800FAB518 /* Display.framework */; }; + D0C9C255230022E000FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */; }; + D0C9C25923009EC900FAB518 /* FindSecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */; }; + D0C9C2812300A04900FAB518 /* PhoneInputNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */; }; + D0C9C2852300A0BF00FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */; }; + D0C9C2B32300A1D300FAB518 /* CountrySelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */; }; + D0C9C3332300AA0100FAB518 /* GalleryUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3322300AA0100FAB518 /* GalleryUI.framework */; }; + D0C9C4492300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */; }; + D0C9C44B2300E17600FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */; }; + D0C9C44D2300E17A00FAB518 /* OverlayStatusController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */; }; + D0C9C44F2300E1D600FAB518 /* LegacySecureIdScanController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */; }; + D0C9C47D2300E31700FAB518 /* LegacyUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C47C2300E31700FAB518 /* LegacyUI.framework */; }; + D0C9C4BF2300E5B400FAB518 /* ImageCompression.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */; }; + D0C9C4DA2300E67200FAB518 /* DateSelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */; }; + D0C9C52D2300EFB100FAB518 /* PasswordSetupUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C1EB2300222100FAB518 /* PassportUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PassportUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1EE2300222100FAB518 /* PassportUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PassportUI.h; sourceTree = ""; }; + D0C9C1EF2300222100FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormFileItem.swift; sourceTree = ""; }; + D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryFooterContentNode.swift; sourceTree = ""; }; + D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentImageGalleryItem.swift; sourceTree = ""; }; + D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListFieldNode.swift; sourceTree = ""; }; + D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormController.swift; sourceTree = ""; }; + D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormControllerNode.swift; sourceTree = ""; }; + D0C9C200230022A400FAB518 /* SecureIdValues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValues.swift; sourceTree = ""; }; + D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListContentNode.swift; sourceTree = ""; }; + D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryController.swift; sourceTree = ""; }; + D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerNode.swift; sourceTree = ""; }; + D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocumentsContext.swift; sourceTree = ""; }; + D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormPhoneItem.swift; sourceTree = ""; }; + D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerActionItem.swift; sourceTree = ""; }; + D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormEditableBlockItemNode.swift; sourceTree = ""; }; + D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerScrollerNode.swift; sourceTree = ""; }; + D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerTextItem.swift; sourceTree = ""; }; + D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthHeaderNode.swift; sourceTree = ""; }; + D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthAcceptNode.swift; sourceTree = ""; }; + D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentTypeSelectionController.swift; sourceTree = ""; }; + D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerState.swift; sourceTree = ""; }; + D0C9C20E230022A700FAB518 /* FormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerNode.swift; sourceTree = ""; }; + D0C9C20F230022A700FAB518 /* FormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormController.swift; sourceTree = ""; }; + D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormBlockItemNode.swift; sourceTree = ""; }; + D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormContentNode.swift; sourceTree = ""; }; + D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerTextInputItem.swift; sourceTree = ""; }; + D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordOptionContentNode.swift; sourceTree = ""; }; + D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordSetupContentNode.swift; sourceTree = ""; }; + D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormFieldNode.swift; sourceTree = ""; }; + D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthController.swift; sourceTree = ""; }; + D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerDetailActionItem.swift; sourceTree = ""; }; + D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdLocalResource.swift; sourceTree = ""; }; + D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormController.swift; sourceTree = ""; }; + D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormControllerNode.swift; sourceTree = ""; }; + D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocument.swift; sourceTree = ""; }; + D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerItem.swift; sourceTree = ""; }; + D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecureIdAuthContentNode.swift; sourceTree = ""; }; + D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormControllerHeaderItem.swift; sourceTree = ""; }; + D0C9C246230022C100FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C248230022C200FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C24A230022C500FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C24C230022C900FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C252230022D800FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FindSecureIdValue.swift; sourceTree = ""; }; + D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PhoneInputNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; + D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CountrySelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3322300AA0100FAB518 /* GalleryUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GalleryUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySecureIdAttachmentMenu.swift; sourceTree = ""; }; + D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OverlayStatusController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySecureIdScanController.swift; sourceTree = ""; }; + D0C9C47C2300E31700FAB518 /* LegacyUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageCompression.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DateSelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PasswordSetupUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C1E82300222100FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C52D2300EFB100FAB518 /* PasswordSetupUI.framework in Frameworks */, + D0C9C4DA2300E67200FAB518 /* DateSelectionUI.framework in Frameworks */, + D0C9C4BF2300E5B400FAB518 /* ImageCompression.framework in Frameworks */, + D0C9C47D2300E31700FAB518 /* LegacyUI.framework in Frameworks */, + D0C9C44D2300E17A00FAB518 /* OverlayStatusController.framework in Frameworks */, + D0C9C44B2300E17600FAB518 /* LegacyComponents.framework in Frameworks */, + D0C9C3332300AA0100FAB518 /* GalleryUI.framework in Frameworks */, + D0C9C2B32300A1D300FAB518 /* CountrySelectionUI.framework in Frameworks */, + D0C9C2812300A04900FAB518 /* PhoneInputNode.framework in Frameworks */, + D0C9C255230022E000FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C253230022D800FAB518 /* Display.framework in Frameworks */, + D0C9C251230022D400FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C24F230022CE00FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C24D230022C900FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C24B230022C500FAB518 /* Postbox.framework in Frameworks */, + D0C9C249230022C300FAB518 /* Foundation.framework in Frameworks */, + D0C9C247230022C100FAB518 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C1E12300222100FAB518 = { + isa = PBXGroup; + children = ( + D0C9C1EF2300222100FAB518 /* Info.plist */, + D0C9C1ED2300222100FAB518 /* Sources */, + D0C9C1EC2300222100FAB518 /* Products */, + D0C9C245230022BF00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C1EC2300222100FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C1EB2300222100FAB518 /* PassportUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C1ED2300222100FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C21C230022AB00FAB518 /* Form */, + D0C9C20B230022A600FAB518 /* SecureIdAuthAcceptNode.swift */, + D0C9C21E230022AB00FAB518 /* SecureIdAuthContentNode.swift */, + D0C9C216230022A800FAB518 /* SecureIdAuthController.swift */, + D0C9C203230022A500FAB518 /* SecureIdAuthControllerNode.swift */, + D0C9C20D230022A600FAB518 /* SecureIdAuthControllerState.swift */, + D0C9C211230022A700FAB518 /* SecureIdAuthFormContentNode.swift */, + D0C9C215230022A800FAB518 /* SecureIdAuthFormFieldNode.swift */, + D0C9C20A230022A600FAB518 /* SecureIdAuthHeaderNode.swift */, + D0C9C201230022A400FAB518 /* SecureIdAuthListContentNode.swift */, + D0C9C1FD230022A400FAB518 /* SecureIdAuthListFieldNode.swift */, + D0C9C213230022A700FAB518 /* SecureIdAuthPasswordOptionContentNode.swift */, + D0C9C214230022A700FAB518 /* SecureIdAuthPasswordSetupContentNode.swift */, + D0C9C1FE230022A400FAB518 /* SecureIdDocumentFormController.swift */, + D0C9C1FF230022A400FAB518 /* SecureIdDocumentFormControllerNode.swift */, + D0C9C202230022A500FAB518 /* SecureIdDocumentGalleryController.swift */, + D0C9C1FB230022A400FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift */, + D0C9C1FC230022A400FAB518 /* SecureIdDocumentImageGalleryItem.swift */, + D0C9C20C230022A600FAB518 /* SecureIdDocumentTypeSelectionController.swift */, + D0C9C218230022A800FAB518 /* SecureIdLocalResource.swift */, + D0C9C219230022A800FAB518 /* SecureIdPlaintextFormController.swift */, + D0C9C21A230022A800FAB518 /* SecureIdPlaintextFormControllerNode.swift */, + D0C9C1FA230022A400FAB518 /* SecureIdValueFormFileItem.swift */, + D0C9C205230022A500FAB518 /* SecureIdValueFormPhoneItem.swift */, + D0C9C200230022A400FAB518 /* SecureIdValues.swift */, + D0C9C21B230022A900FAB518 /* SecureIdVerificationDocument.swift */, + D0C9C204230022A500FAB518 /* SecureIdVerificationDocumentsContext.swift */, + D0C9C25823009EC900FAB518 /* FindSecureIdValue.swift */, + D0C9C4482300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift */, + D0C9C44E2300E1D600FAB518 /* LegacySecureIdScanController.swift */, + D0C9C2842300A0BF00FAB518 /* FrameworkBundle.swift */, + D0C9C1EE2300222100FAB518 /* PassportUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C21C230022AB00FAB518 /* Form */ = { + isa = PBXGroup; + children = ( + D0C9C210230022A700FAB518 /* FormBlockItemNode.swift */, + D0C9C20F230022A700FAB518 /* FormController.swift */, + D0C9C206230022A500FAB518 /* FormControllerActionItem.swift */, + D0C9C217230022A800FAB518 /* FormControllerDetailActionItem.swift */, + D0C9C21F230022AB00FAB518 /* FormControllerHeaderItem.swift */, + D0C9C21D230022AB00FAB518 /* FormControllerItem.swift */, + D0C9C20E230022A700FAB518 /* FormControllerNode.swift */, + D0C9C208230022A600FAB518 /* FormControllerScrollerNode.swift */, + D0C9C212230022A700FAB518 /* FormControllerTextInputItem.swift */, + D0C9C209230022A600FAB518 /* FormControllerTextItem.swift */, + D0C9C207230022A500FAB518 /* FormEditableBlockItemNode.swift */, + ); + path = Form; + sourceTree = ""; + }; + D0C9C245230022BF00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C52C2300EFB100FAB518 /* PasswordSetupUI.framework */, + D0C9C4D92300E67200FAB518 /* DateSelectionUI.framework */, + D0C9C4BE2300E5B400FAB518 /* ImageCompression.framework */, + D0C9C47C2300E31700FAB518 /* LegacyUI.framework */, + D0C9C44C2300E17A00FAB518 /* OverlayStatusController.framework */, + D0C9C44A2300E17600FAB518 /* LegacyComponents.framework */, + D0C9C3322300AA0100FAB518 /* GalleryUI.framework */, + D0C9C2B22300A1D300FAB518 /* CountrySelectionUI.framework */, + D0C9C2802300A04900FAB518 /* PhoneInputNode.framework */, + D0C9C254230022E000FAB518 /* TelegramPresentationData.framework */, + D0C9C252230022D800FAB518 /* Display.framework */, + D0C9C250230022D400FAB518 /* AsyncDisplayKit.framework */, + D0C9C24E230022CE00FAB518 /* SwiftSignalKit.framework */, + D0C9C24C230022C900FAB518 /* TelegramCore.framework */, + D0C9C24A230022C500FAB518 /* Postbox.framework */, + D0C9C248230022C200FAB518 /* Foundation.framework */, + D0C9C246230022C100FAB518 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C1E62300222100FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C1F02300222100FAB518 /* PassportUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C1EA2300222100FAB518 /* PassportUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C1F32300222100FAB518 /* Build configuration list for PBXNativeTarget "PassportUI" */; + buildPhases = ( + D0C9C1E62300222100FAB518 /* Headers */, + D0C9C1E72300222100FAB518 /* Sources */, + D0C9C1E82300222100FAB518 /* Frameworks */, + D0C9C1E92300222100FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PassportUI; + productName = PassportUI; + productReference = D0C9C1EB2300222100FAB518 /* PassportUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C1E22300222100FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C1EA2300222100FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C1E52300222100FAB518 /* Build configuration list for PBXProject "PassportUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C1E12300222100FAB518; + productRefGroup = D0C9C1EC2300222100FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C1EA2300222100FAB518 /* PassportUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C1E92300222100FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C1E72300222100FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C222230022AB00FAB518 /* SecureIdDocumentImageGalleryItem.swift in Sources */, + D0C9C221230022AB00FAB518 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */, + D0C9C44F2300E1D600FAB518 /* LegacySecureIdScanController.swift in Sources */, + D0C9C229230022AB00FAB518 /* SecureIdAuthControllerNode.swift in Sources */, + D0C9C240230022AB00FAB518 /* SecureIdPlaintextFormControllerNode.swift in Sources */, + D0C9C4492300E15E00FAB518 /* LegacySecureIdAttachmentMenu.swift in Sources */, + D0C9C22F230022AB00FAB518 /* FormControllerTextItem.swift in Sources */, + D0C9C226230022AB00FAB518 /* SecureIdValues.swift in Sources */, + D0C9C242230022AB00FAB518 /* FormControllerItem.swift in Sources */, + D0C9C243230022AB00FAB518 /* SecureIdAuthContentNode.swift in Sources */, + D0C9C23F230022AB00FAB518 /* SecureIdPlaintextFormController.swift in Sources */, + D0C9C244230022AB00FAB518 /* FormControllerHeaderItem.swift in Sources */, + D0C9C232230022AB00FAB518 /* SecureIdDocumentTypeSelectionController.swift in Sources */, + D0C9C231230022AB00FAB518 /* SecureIdAuthAcceptNode.swift in Sources */, + D0C9C25923009EC900FAB518 /* FindSecureIdValue.swift in Sources */, + D0C9C225230022AB00FAB518 /* SecureIdDocumentFormControllerNode.swift in Sources */, + D0C9C234230022AB00FAB518 /* FormControllerNode.swift in Sources */, + D0C9C22A230022AB00FAB518 /* SecureIdVerificationDocumentsContext.swift in Sources */, + D0C9C224230022AB00FAB518 /* SecureIdDocumentFormController.swift in Sources */, + D0C9C23C230022AB00FAB518 /* SecureIdAuthController.swift in Sources */, + D0C9C22E230022AB00FAB518 /* FormControllerScrollerNode.swift in Sources */, + D0C9C22C230022AB00FAB518 /* FormControllerActionItem.swift in Sources */, + D0C9C2852300A0BF00FAB518 /* FrameworkBundle.swift in Sources */, + D0C9C237230022AB00FAB518 /* SecureIdAuthFormContentNode.swift in Sources */, + D0C9C22D230022AB00FAB518 /* FormEditableBlockItemNode.swift in Sources */, + D0C9C239230022AB00FAB518 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */, + D0C9C23D230022AB00FAB518 /* FormControllerDetailActionItem.swift in Sources */, + D0C9C227230022AB00FAB518 /* SecureIdAuthListContentNode.swift in Sources */, + D0C9C241230022AB00FAB518 /* SecureIdVerificationDocument.swift in Sources */, + D0C9C228230022AB00FAB518 /* SecureIdDocumentGalleryController.swift in Sources */, + D0C9C223230022AB00FAB518 /* SecureIdAuthListFieldNode.swift in Sources */, + D0C9C238230022AB00FAB518 /* FormControllerTextInputItem.swift in Sources */, + D0C9C23A230022AB00FAB518 /* SecureIdAuthPasswordSetupContentNode.swift in Sources */, + D0C9C230230022AB00FAB518 /* SecureIdAuthHeaderNode.swift in Sources */, + D0C9C23B230022AB00FAB518 /* SecureIdAuthFormFieldNode.swift in Sources */, + D0C9C233230022AB00FAB518 /* SecureIdAuthControllerState.swift in Sources */, + D0C9C235230022AB00FAB518 /* FormController.swift in Sources */, + D0C9C22B230022AB00FAB518 /* SecureIdValueFormPhoneItem.swift in Sources */, + D0C9C220230022AB00FAB518 /* SecureIdValueFormFileItem.swift in Sources */, + D0C9C23E230022AB00FAB518 /* SecureIdLocalResource.swift in Sources */, + D0C9C236230022AB00FAB518 /* FormBlockItemNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C1F12300222100FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C1F22300222100FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C1F42300222100FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C1F52300222100FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C1F62300225100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C1F72300225100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C1F82300225D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C1F92300225D00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PassportUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C1E52300222100FAB518 /* Build configuration list for PBXProject "PassportUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C1F12300222100FAB518 /* DebugAppStoreLLC */, + D0C9C1F62300225100FAB518 /* DebugHockeyapp */, + D0C9C1F22300222100FAB518 /* ReleaseAppStoreLLC */, + D0C9C1F82300225D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C1F32300222100FAB518 /* Build configuration list for PBXNativeTarget "PassportUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C1F42300222100FAB518 /* DebugAppStoreLLC */, + D0C9C1F72300225100FAB518 /* DebugHockeyapp */, + D0C9C1F52300222100FAB518 /* ReleaseAppStoreLLC */, + D0C9C1F92300225D00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C1E22300222100FAB518 /* Project object */; +} diff --git a/submodules/TelegramUI/TelegramUI/FindSecureIdValue.swift b/submodules/PassportUI/Sources/FindSecureIdValue.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FindSecureIdValue.swift rename to submodules/PassportUI/Sources/FindSecureIdValue.swift diff --git a/submodules/TelegramUI/TelegramUI/FormBlockItemNode.swift b/submodules/PassportUI/Sources/Form/FormBlockItemNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FormBlockItemNode.swift rename to submodules/PassportUI/Sources/Form/FormBlockItemNode.swift diff --git a/submodules/TelegramUI/TelegramUI/FormController.swift b/submodules/PassportUI/Sources/Form/FormController.swift similarity index 80% rename from submodules/TelegramUI/TelegramUI/FormController.swift rename to submodules/PassportUI/Sources/Form/FormController.swift index 081a9e203a..731cd4efc4 100644 --- a/submodules/TelegramUI/TelegramUI/FormController.swift +++ b/submodules/PassportUI/Sources/Form/FormController.swift @@ -6,8 +6,8 @@ import Display import TelegramCore import TelegramPresentationData -class FormController>: ViewController { - var controllerNode: Node { +public class FormController>: ViewController { + public var controllerNode: Node { return self.displayNode as! Node } @@ -29,7 +29,7 @@ class FormController Void)? = nil) { + override public func dismiss(completion: (() -> Void)? = nil) { self.controllerNode.view.endEditing(true) self.controllerNode.animateOut(completion: { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) @@ -46,7 +46,7 @@ class FormController Bool func item(params: ItemParams, strings: PresentationStrings) -> FormControllerItem } -enum FormControllerItemNeighbor { +public enum FormControllerItemNeighbor { case none case spacer case item(FormControllerItemNode) } -struct FormControllerItemPreLayout { +public struct FormControllerItemPreLayout { let aligningInset: CGFloat } -struct FormControllerItemLayoutParams { +public struct FormControllerItemLayoutParams { let maxAligningInset: CGFloat } -protocol FormControllerItem { +public protocol FormControllerItem { func node() -> ASDisplayNode & FormControllerItemNode func update(node: ASDisplayNode & FormControllerItemNode, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, width: CGFloat, previousNeighbor: FormControllerItemNeighbor, nextNeighbor: FormControllerItemNeighbor, transition: ContainedViewLayoutTransition) -> (FormControllerItemPreLayout, (FormControllerItemLayoutParams) -> CGFloat) } -protocol FormControllerItemNode { +public protocol FormControllerItemNode { var preventsTouchesToOtherItems: Bool { get } func touchesToOtherItemsPrevented() } diff --git a/submodules/TelegramUI/TelegramUI/FormControllerNode.swift b/submodules/PassportUI/Sources/Form/FormControllerNode.swift similarity index 97% rename from submodules/TelegramUI/TelegramUI/FormControllerNode.swift rename to submodules/PassportUI/Sources/Form/FormControllerNode.swift index c33f299c0f..cd76c108eb 100644 --- a/submodules/TelegramUI/TelegramUI/FormControllerNode.swift +++ b/submodules/PassportUI/Sources/Form/FormControllerNode.swift @@ -82,18 +82,18 @@ struct FormControllerInternalState { } } -struct FormControllerState { +public struct FormControllerState { let layoutState: FormControllerLayoutState let presentationState: FormControllerPresentationState let innerState: InnerState } -enum FormControllerItemEntry { +public enum FormControllerItemEntry { case entry(Entry) case spacer } -protocol FormControllerInnerState { +public protocol FormControllerInnerState { associatedtype Entry: FormControllerEntry func isEqual(to: Self) -> Bool @@ -105,7 +105,7 @@ private enum FilteredItemNeighbor { case item(FormControllerItem) } -class FormControllerNode: ViewControllerTracingNode, UIScrollViewDelegate { +public class FormControllerNode: ViewControllerTracingNode, UIScrollViewDelegate { private typealias InternalState = FormControllerInternalState typealias State = FormControllerState typealias Entry = InnerState.Entry @@ -131,7 +131,7 @@ class FormControllerNode: View preconditionFailure() } - required init(initParams: InitParams, presentationData: PresentationData) { + required public init(initParams: InitParams, presentationData: PresentationData) { self.internalState = FormControllerInternalState(layoutState: nil, presentationState: FormControllerPresentationState(theme: presentationData.theme, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat), innerState: nil) self.scrollNode = FormControllerScrollerNode() diff --git a/submodules/TelegramUI/TelegramUI/FormControllerScrollerNode.swift b/submodules/PassportUI/Sources/Form/FormControllerScrollerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FormControllerScrollerNode.swift rename to submodules/PassportUI/Sources/Form/FormControllerScrollerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/FormControllerTextInputItem.swift b/submodules/PassportUI/Sources/Form/FormControllerTextInputItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FormControllerTextInputItem.swift rename to submodules/PassportUI/Sources/Form/FormControllerTextInputItem.swift diff --git a/submodules/TelegramUI/TelegramUI/FormControllerTextItem.swift b/submodules/PassportUI/Sources/Form/FormControllerTextItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FormControllerTextItem.swift rename to submodules/PassportUI/Sources/Form/FormControllerTextItem.swift diff --git a/submodules/TelegramUI/TelegramUI/FormEditableBlockItemNode.swift b/submodules/PassportUI/Sources/Form/FormEditableBlockItemNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/FormEditableBlockItemNode.swift rename to submodules/PassportUI/Sources/Form/FormEditableBlockItemNode.swift diff --git a/submodules/PassportUI/Sources/FrameworkBundle.swift b/submodules/PassportUI/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/PassportUI/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/TelegramUI/TelegramUI/LegacySecureIdAttachmentMenu.swift b/submodules/PassportUI/Sources/LegacySecureIdAttachmentMenu.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/LegacySecureIdAttachmentMenu.swift rename to submodules/PassportUI/Sources/LegacySecureIdAttachmentMenu.swift index 84f85bd1f6..042ab70189 100644 --- a/submodules/TelegramUI/TelegramUI/LegacySecureIdAttachmentMenu.swift +++ b/submodules/PassportUI/Sources/LegacySecureIdAttachmentMenu.swift @@ -7,6 +7,8 @@ import Postbox import TelegramCore import OverlayStatusController import AccountContext +import LegacyUI +import ImageCompression enum SecureIdAttachmentMenuType { case generic diff --git a/submodules/TelegramUI/TelegramUI/LegacySecureIdScanController.swift b/submodules/PassportUI/Sources/LegacySecureIdScanController.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/LegacySecureIdScanController.swift rename to submodules/PassportUI/Sources/LegacySecureIdScanController.swift index a4675b66a3..3bb3b78d3b 100644 --- a/submodules/TelegramUI/TelegramUI/LegacySecureIdScanController.swift +++ b/submodules/PassportUI/Sources/LegacySecureIdScanController.swift @@ -3,6 +3,7 @@ import UIKit import Display import LegacyComponents import TelegramPresentationData +import LegacyUI func legacySecureIdScanController(theme: PresentationTheme, strings: PresentationStrings, finished: @escaping (SecureIdRecognizedDocumentData?) -> Void) -> ViewController { let legacyController = LegacyController(presentation: .modal(animateIn: true), theme: theme, strings: strings) diff --git a/submodules/PassportUI/Sources/PassportUI.h b/submodules/PassportUI/Sources/PassportUI.h new file mode 100644 index 0000000000..7031f66464 --- /dev/null +++ b/submodules/PassportUI/Sources/PassportUI.h @@ -0,0 +1,19 @@ +// +// PassportUI.h +// PassportUI +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for PassportUI. +FOUNDATION_EXPORT double PassportUIVersionNumber; + +//! Project version string for PassportUI. +FOUNDATION_EXPORT const unsigned char PassportUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthAcceptNode.swift b/submodules/PassportUI/Sources/SecureIdAuthAcceptNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthAcceptNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthAcceptNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthContentNode.swift b/submodules/PassportUI/Sources/SecureIdAuthContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthContentNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthController.swift b/submodules/PassportUI/Sources/SecureIdAuthController.swift similarity index 95% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthController.swift rename to submodules/PassportUI/Sources/SecureIdAuthController.swift index 29e99d44c6..ce49d5a7f2 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdAuthController.swift +++ b/submodules/PassportUI/Sources/SecureIdAuthController.swift @@ -10,6 +10,7 @@ import TextFormat import ProgressNavigationButtonNode import AccountContext import AlertUI +import PasswordSetupUI public enum SecureIdRequestResult: String { case success = "success" @@ -59,12 +60,12 @@ final class SecureIdAuthControllerInteraction { } } -enum SecureIdAuthControllerMode { +public enum SecureIdAuthControllerMode { case form(peerId: PeerId, scope: String, publicKey: String, callbackUrl: String, opaquePayload: Data, opaqueNonce: Data) case list } -final class SecureIdAuthController: ViewController { +public final class SecureIdAuthController: ViewController { private var controllerNode: SecureIdAuthControllerNode { return self.displayNode as! SecureIdAuthControllerNode } @@ -85,7 +86,7 @@ final class SecureIdAuthController: ViewController { private let hapticFeedback = HapticFeedback() - init(context: AccountContext, mode: SecureIdAuthControllerMode) { + public init(context: AccountContext, mode: SecureIdAuthControllerMode) { self.context = context self.presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -270,7 +271,7 @@ final class SecureIdAuthController: ViewController { } } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -282,7 +283,7 @@ final class SecureIdAuthController: ViewController { self.recoveryDisposable.dispose() } - override func viewDidAppear(_ animated: Bool) { + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !self.didPlayPresentationAnimation { @@ -291,14 +292,14 @@ final class SecureIdAuthController: ViewController { } } - override func dismiss(completion: (() -> Void)? = nil) { + override public func dismiss(completion: (() -> Void)? = nil) { self.controllerNode.animateOut(completion: { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) completion?() }) } - override func loadDisplayNode() { + override public func loadDisplayNode() { let interaction = SecureIdAuthControllerInteraction(updateState: { [weak self] f in self?.updateState(f) }, present: { [weak self] c, a in @@ -313,7 +314,7 @@ final class SecureIdAuthController: ViewController { self?.grantAccess() }, openUrl: { [weak self] url in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, url: url, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: { self?.view.endEditing(true) }) } @@ -326,7 +327,7 @@ final class SecureIdAuthController: ViewController { guard let strongSelf = self else { return } - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } }) @@ -359,7 +360,7 @@ final class SecureIdAuthController: ViewController { self.controllerNode.updateState(self.state, transition: .immediate) } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition) @@ -400,7 +401,7 @@ final class SecureIdAuthController: ViewController { } private func openUrl(_ url: String) { - openExternalUrl(context: self.context, url: url, forceExternal: true, presentationData: self.presentationData, navigationController: nil, dismissInput: { [weak self] in + self.context.sharedContext.openExternalUrl(context: self.context, urlContext: .generic, url: url, forceExternal: true, presentationData: self.presentationData, navigationController: nil, dismissInput: { [weak self] in self?.view.endEditing(true) }) } @@ -643,7 +644,7 @@ final class SecureIdAuthController: ViewController { guard let strongSelf = self else { return } - openExternalUrl(context: strongSelf.context, url: strongSelf.presentationData.strings.Passport_InfoFAQ_URL, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: strongSelf.presentationData.strings.Passport_InfoFAQ_URL, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: { self?.view.endEditing(true) }) })]), in: .window(.root)) diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthControllerNode.swift b/submodules/PassportUI/Sources/SecureIdAuthControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthControllerNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthControllerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthControllerState.swift b/submodules/PassportUI/Sources/SecureIdAuthControllerState.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthControllerState.swift rename to submodules/PassportUI/Sources/SecureIdAuthControllerState.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthFormContentNode.swift b/submodules/PassportUI/Sources/SecureIdAuthFormContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthFormContentNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthFormContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthFormFieldNode.swift b/submodules/PassportUI/Sources/SecureIdAuthFormFieldNode.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthFormFieldNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthFormFieldNode.swift index 7168a48eb7..0290391218 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdAuthFormFieldNode.swift +++ b/submodules/PassportUI/Sources/SecureIdAuthFormFieldNode.swift @@ -6,6 +6,7 @@ import Display import TelegramCore import TelegramPresentationData import TelegramStringFormatting +import CountrySelectionUI enum SecureIdRequestedIdentityDocument: Int32 { case passport diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthHeaderNode.swift b/submodules/PassportUI/Sources/SecureIdAuthHeaderNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthHeaderNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthHeaderNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthListContentNode.swift b/submodules/PassportUI/Sources/SecureIdAuthListContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthListContentNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthListContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthListFieldNode.swift b/submodules/PassportUI/Sources/SecureIdAuthListFieldNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthListFieldNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthListFieldNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthPasswordOptionContentNode.swift b/submodules/PassportUI/Sources/SecureIdAuthPasswordOptionContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthPasswordOptionContentNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthPasswordOptionContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdAuthPasswordSetupContentNode.swift b/submodules/PassportUI/Sources/SecureIdAuthPasswordSetupContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdAuthPasswordSetupContentNode.swift rename to submodules/PassportUI/Sources/SecureIdAuthPasswordSetupContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentFormController.swift b/submodules/PassportUI/Sources/SecureIdDocumentFormController.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentFormController.swift rename to submodules/PassportUI/Sources/SecureIdDocumentFormController.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentFormControllerNode.swift b/submodules/PassportUI/Sources/SecureIdDocumentFormControllerNode.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentFormControllerNode.swift rename to submodules/PassportUI/Sources/SecureIdDocumentFormControllerNode.swift index 3fc26f4607..51b0071ed7 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdDocumentFormControllerNode.swift +++ b/submodules/PassportUI/Sources/SecureIdDocumentFormControllerNode.swift @@ -8,6 +8,9 @@ import SwiftSignalKit import TelegramPresentationData import TelegramStringFormatting import AccountContext +import GalleryUI +import CountrySelectionUI +import DateSelectionUI private enum SecureIdDocumentFormTextField { case identifier diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryController.swift b/submodules/PassportUI/Sources/SecureIdDocumentGalleryController.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryController.swift rename to submodules/PassportUI/Sources/SecureIdDocumentGalleryController.swift index 5b925a0b9f..adc379563d 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryController.swift +++ b/submodules/PassportUI/Sources/SecureIdDocumentGalleryController.swift @@ -8,6 +8,7 @@ import AsyncDisplayKit import TelegramCore import TelegramPresentationData import AccountContext +import GalleryUI struct SecureIdDocumentGalleryEntryLocation: Equatable { let position: Int32 diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryFooterContentNode.swift b/submodules/PassportUI/Sources/SecureIdDocumentGalleryFooterContentNode.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryFooterContentNode.swift rename to submodules/PassportUI/Sources/SecureIdDocumentGalleryFooterContentNode.swift index d1344bf760..8c2f34bdc1 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdDocumentGalleryFooterContentNode.swift +++ b/submodules/PassportUI/Sources/SecureIdDocumentGalleryFooterContentNode.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import Photos import TelegramPresentationData import AccountContext +import GalleryUI private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white) diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentImageGalleryItem.swift b/submodules/PassportUI/Sources/SecureIdDocumentImageGalleryItem.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentImageGalleryItem.swift rename to submodules/PassportUI/Sources/SecureIdDocumentImageGalleryItem.swift index 391ded2ce5..044ad3cfaa 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdDocumentImageGalleryItem.swift +++ b/submodules/PassportUI/Sources/SecureIdDocumentImageGalleryItem.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramPresentationData import AccountContext import PhotoResources +import GalleryUI class SecureIdDocumentGalleryItem: GalleryItem { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/SecureIdDocumentTypeSelectionController.swift b/submodules/PassportUI/Sources/SecureIdDocumentTypeSelectionController.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SecureIdDocumentTypeSelectionController.swift rename to submodules/PassportUI/Sources/SecureIdDocumentTypeSelectionController.swift diff --git a/submodules/TelegramUI/TelegramUI/SecureIdLocalResource.swift b/submodules/PassportUI/Sources/SecureIdLocalResource.swift similarity index 97% rename from submodules/TelegramUI/TelegramUI/SecureIdLocalResource.swift rename to submodules/PassportUI/Sources/SecureIdLocalResource.swift index 50ea04d9de..dfb8a8ffce 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdLocalResource.swift +++ b/submodules/PassportUI/Sources/SecureIdLocalResource.swift @@ -61,7 +61,7 @@ private final class Buffer { var data = Data() } -func fetchSecureIdLocalImageResource(postbox: Postbox, resource: SecureIdLocalImageResource) -> Signal { +public func fetchSecureIdLocalImageResource(postbox: Postbox, resource: SecureIdLocalImageResource) -> Signal { return Signal { subscriber in guard let fetchResource = postbox.mediaBox.fetchResource else { return EmptyDisposable diff --git a/submodules/TelegramUI/TelegramUI/SecureIdPlaintextFormController.swift b/submodules/PassportUI/Sources/SecureIdPlaintextFormController.swift similarity index 88% rename from submodules/TelegramUI/TelegramUI/SecureIdPlaintextFormController.swift rename to submodules/PassportUI/Sources/SecureIdPlaintextFormController.swift index b86e7a5203..2b3c092cc8 100644 --- a/submodules/TelegramUI/TelegramUI/SecureIdPlaintextFormController.swift +++ b/submodules/PassportUI/Sources/SecureIdPlaintextFormController.swift @@ -9,12 +9,12 @@ import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext -enum SecureIdPlaintextFormType { +public enum SecureIdPlaintextFormType { case phone case email } -final class SecureIdPlaintextFormController: FormController { +public final class SecureIdPlaintextFormController: FormController { private let context: AccountContext private var presentationData: PresentationData private let updatedValue: (SecureIdValueWithContext?) -> Void @@ -26,7 +26,7 @@ final class SecureIdPlaintextFormController: FormController Void) { + public init(context: AccountContext, secureIdContext: SecureIdAccessContext, type: SecureIdPlaintextFormType, immediatelyAvailableValue: SecureIdValue?, updatedValue: @escaping (SecureIdValueWithContext?) -> Void) { self.context = context self.presentationData = context.sharedContext.currentPresentationData.with { $0 } self.secureIdContext = secureIdContext @@ -49,7 +49,7 @@ final class SecureIdPlaintextFormController: FormController String { var cleanNumber = "" @@ -22,7 +23,7 @@ private func cleanPhoneNumber(_ text: String?) -> String { return cleanNumber } -final class SecureIdPlaintextFormParams { +public final class SecureIdPlaintextFormParams { fileprivate let openCountrySelection: () -> Void fileprivate let updateTextField: (SecureIdPlaintextFormTextField, String) -> Void fileprivate let usePhone: (String) -> Void @@ -259,12 +260,12 @@ enum SecureIdPlaintextFormInputState { case inProgress } -struct SecureIdPlaintextFormInnerState: FormControllerInnerState { +public struct SecureIdPlaintextFormInnerState: FormControllerInnerState { fileprivate let previousValue: SecureIdValue? fileprivate var data: SecureIdPlaintextFormDataState fileprivate var actionState: SecureIdPlaintextFormActionState - func isEqual(to: SecureIdPlaintextFormInnerState) -> Bool { + public func isEqual(to: SecureIdPlaintextFormInnerState) -> Bool { if !self.data.isEqual(to: to.data) { return false } @@ -274,7 +275,7 @@ struct SecureIdPlaintextFormInnerState: FormControllerInnerState { return true } - func entries() -> [FormControllerItemEntry] { + public func entries() -> [FormControllerItemEntry] { switch self.data { case let .phone(phone): var result: [FormControllerItemEntry] = [] @@ -408,7 +409,7 @@ extension SecureIdPlaintextFormInnerState { } } -enum SecureIdPlaintextFormEntryId: Hashable { +public enum SecureIdPlaintextFormEntryId: Hashable { case immediatelyAvailablePhone case immediatelyAvailablePhoneInfo case numberInputHeader @@ -425,7 +426,7 @@ enum SecureIdPlaintextFormEntryId: Hashable { case emailVerifyInfo } -enum SecureIdPlaintextFormEntry: FormControllerEntry { +public enum SecureIdPlaintextFormEntry: FormControllerEntry { case immediatelyAvailablePhone(String) case immediatelyAvailablePhoneInfo case numberInputHeader @@ -441,7 +442,7 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { case emailCode(String) case emailVerifyInfo(String) - var stableId: SecureIdPlaintextFormEntryId { + public var stableId: SecureIdPlaintextFormEntryId { switch self { case .immediatelyAvailablePhone: return .immediatelyAvailablePhone @@ -474,7 +475,7 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } } - func isEqual(to: SecureIdPlaintextFormEntry) -> Bool { + public func isEqual(to: SecureIdPlaintextFormEntry) -> Bool { switch self { case let .immediatelyAvailablePhone(value): if case .immediatelyAvailablePhone(value) = to { @@ -563,7 +564,7 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } } - func item(params: SecureIdPlaintextFormParams, strings: PresentationStrings) -> FormControllerItem { + public func item(params: SecureIdPlaintextFormParams, strings: PresentationStrings) -> FormControllerItem { switch self { case let .immediatelyAvailablePhone(value): return FormControllerActionItem(type: .accent, title: strings.Passport_Phone_UseTelegramNumber(formatPhoneNumber(value)).0, activated: { @@ -626,7 +627,7 @@ enum SecureIdPlaintextFormEntry: FormControllerEntry { } } -struct SecureIdPlaintextFormControllerNodeInitParams { +public struct SecureIdPlaintextFormControllerNodeInitParams { let context: AccountContext let secureIdContext: SecureIdAccessContext } @@ -636,9 +637,9 @@ private enum SecureIdPlaintextFormNavigatonTransition { case push } -final class SecureIdPlaintextFormControllerNode: FormControllerNode { +public final class SecureIdPlaintextFormControllerNode: FormControllerNode { private var _itemParams: SecureIdPlaintextFormParams? - override var itemParams: SecureIdPlaintextFormParams { + override public var itemParams: SecureIdPlaintextFormParams { return self._itemParams! } @@ -654,7 +655,7 @@ final class SecureIdPlaintextFormControllerNode: FormControllerNode + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/PasswordSetupUI/PasswordSetupUI_Xcode.xcodeproj/project.pbxproj b/submodules/PasswordSetupUI/PasswordSetupUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..5ac96b3d8c --- /dev/null +++ b/submodules/PasswordSetupUI/PasswordSetupUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,599 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C5012300EEC100FAB518 /* PasswordSetupUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C4FF2300EEC100FAB518 /* PasswordSetupUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C50E2300EF4300FAB518 /* SetupTwoStepVerificationContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C50B2300EF4300FAB518 /* SetupTwoStepVerificationContentNode.swift */; }; + D0C9C50F2300EF4300FAB518 /* SetupTwoStepVerificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C50C2300EF4300FAB518 /* SetupTwoStepVerificationController.swift */; }; + D0C9C5102300EF4300FAB518 /* SetupTwoStepVerificationControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C50D2300EF4300FAB518 /* SetupTwoStepVerificationControllerNode.swift */; }; + D0C9C5132300EF5400FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5122300EF5400FAB518 /* Foundation.framework */; }; + D0C9C5152300EF5900FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5142300EF5900FAB518 /* UIKit.framework */; }; + D0C9C5172300EF5D00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5162300EF5D00FAB518 /* Display.framework */; }; + D0C9C5192300EF6100FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5182300EF6100FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C51B2300EF6700FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C51A2300EF6700FAB518 /* TelegramPresentationData.framework */; }; + D0C9C51D2300EF7400FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C51C2300EF7400FAB518 /* SwiftSignalKit.framework */; }; + D0C9C51F2300EF7800FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C51E2300EF7800FAB518 /* Postbox.framework */; }; + D0C9C5212300EF7D00FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5202300EF7D00FAB518 /* TelegramCore.framework */; }; + D0C9C5232300EF8800FAB518 /* ProgressNavigationButtonNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5222300EF8800FAB518 /* ProgressNavigationButtonNode.framework */; }; + D0C9C5252300EF8E00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5242300EF8E00FAB518 /* AccountContext.framework */; }; + D0C9C5272300EF9900FAB518 /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5262300EF9900FAB518 /* ActivityIndicator.framework */; }; + D0C9C5292300EF9E00FAB518 /* AlertUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C5282300EF9E00FAB518 /* AlertUI.framework */; }; + D0C9C52F2300F01C00FAB518 /* ResetPasswordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C52E2300F01C00FAB518 /* ResetPasswordController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C4FC2300EEC100FAB518 /* PasswordSetupUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PasswordSetupUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4FF2300EEC100FAB518 /* PasswordSetupUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PasswordSetupUI.h; sourceTree = ""; }; + D0C9C5002300EEC100FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C50B2300EF4300FAB518 /* SetupTwoStepVerificationContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationContentNode.swift; sourceTree = ""; }; + D0C9C50C2300EF4300FAB518 /* SetupTwoStepVerificationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationController.swift; sourceTree = ""; }; + D0C9C50D2300EF4300FAB518 /* SetupTwoStepVerificationControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationControllerNode.swift; sourceTree = ""; }; + D0C9C5122300EF5400FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C5142300EF5900FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C5162300EF5D00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5182300EF6100FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C51A2300EF6700FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C51C2300EF7400FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C51E2300EF7800FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5202300EF7D00FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5222300EF8800FAB518 /* ProgressNavigationButtonNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ProgressNavigationButtonNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5242300EF8E00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5262300EF9900FAB518 /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C5282300EF9E00FAB518 /* AlertUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AlertUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C52E2300F01C00FAB518 /* ResetPasswordController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResetPasswordController.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C4F92300EEC100FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C5292300EF9E00FAB518 /* AlertUI.framework in Frameworks */, + D0C9C5272300EF9900FAB518 /* ActivityIndicator.framework in Frameworks */, + D0C9C5252300EF8E00FAB518 /* AccountContext.framework in Frameworks */, + D0C9C5232300EF8800FAB518 /* ProgressNavigationButtonNode.framework in Frameworks */, + D0C9C5212300EF7D00FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C51F2300EF7800FAB518 /* Postbox.framework in Frameworks */, + D0C9C51D2300EF7400FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C51B2300EF6700FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C5192300EF6100FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C5172300EF5D00FAB518 /* Display.framework in Frameworks */, + D0C9C5152300EF5900FAB518 /* UIKit.framework in Frameworks */, + D0C9C5132300EF5400FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C4F22300EEC100FAB518 = { + isa = PBXGroup; + children = ( + D0C9C5002300EEC100FAB518 /* Info.plist */, + D0C9C4FE2300EEC100FAB518 /* Sources */, + D0C9C4FD2300EEC100FAB518 /* Products */, + D0C9C5112300EF5300FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C4FD2300EEC100FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C4FC2300EEC100FAB518 /* PasswordSetupUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C4FE2300EEC100FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C52E2300F01C00FAB518 /* ResetPasswordController.swift */, + D0C9C50B2300EF4300FAB518 /* SetupTwoStepVerificationContentNode.swift */, + D0C9C50C2300EF4300FAB518 /* SetupTwoStepVerificationController.swift */, + D0C9C50D2300EF4300FAB518 /* SetupTwoStepVerificationControllerNode.swift */, + D0C9C4FF2300EEC100FAB518 /* PasswordSetupUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C5112300EF5300FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C5282300EF9E00FAB518 /* AlertUI.framework */, + D0C9C5262300EF9900FAB518 /* ActivityIndicator.framework */, + D0C9C5242300EF8E00FAB518 /* AccountContext.framework */, + D0C9C5222300EF8800FAB518 /* ProgressNavigationButtonNode.framework */, + D0C9C5202300EF7D00FAB518 /* TelegramCore.framework */, + D0C9C51E2300EF7800FAB518 /* Postbox.framework */, + D0C9C51C2300EF7400FAB518 /* SwiftSignalKit.framework */, + D0C9C51A2300EF6700FAB518 /* TelegramPresentationData.framework */, + D0C9C5182300EF6100FAB518 /* AsyncDisplayKit.framework */, + D0C9C5162300EF5D00FAB518 /* Display.framework */, + D0C9C5142300EF5900FAB518 /* UIKit.framework */, + D0C9C5122300EF5400FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C4F72300EEC100FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C5012300EEC100FAB518 /* PasswordSetupUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C4FB2300EEC100FAB518 /* PasswordSetupUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C5042300EEC100FAB518 /* Build configuration list for PBXNativeTarget "PasswordSetupUI" */; + buildPhases = ( + D0C9C4F72300EEC100FAB518 /* Headers */, + D0C9C4F82300EEC100FAB518 /* Sources */, + D0C9C4F92300EEC100FAB518 /* Frameworks */, + D0C9C4FA2300EEC100FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PasswordSetupUI; + productName = PasswordSetupUI; + productReference = D0C9C4FC2300EEC100FAB518 /* PasswordSetupUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C4F32300EEC100FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C4FB2300EEC100FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C4F62300EEC100FAB518 /* Build configuration list for PBXProject "PasswordSetupUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C4F22300EEC100FAB518; + productRefGroup = D0C9C4FD2300EEC100FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C4FB2300EEC100FAB518 /* PasswordSetupUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C4FA2300EEC100FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C4F82300EEC100FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C5102300EF4300FAB518 /* SetupTwoStepVerificationControllerNode.swift in Sources */, + D0C9C50E2300EF4300FAB518 /* SetupTwoStepVerificationContentNode.swift in Sources */, + D0C9C52F2300F01C00FAB518 /* ResetPasswordController.swift in Sources */, + D0C9C50F2300EF4300FAB518 /* SetupTwoStepVerificationController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C5022300EEC100FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C5032300EEC100FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C5052300EEC100FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PasswordSetupUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C5062300EEC100FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PasswordSetupUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C5072300EEF300FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C5082300EEF300FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PasswordSetupUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C5092300EF0100FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C50A2300EF0100FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PasswordSetupUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C4F62300EEC100FAB518 /* Build configuration list for PBXProject "PasswordSetupUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C5022300EEC100FAB518 /* DebugAppStoreLLC */, + D0C9C5072300EEF300FAB518 /* DebugHockeyapp */, + D0C9C5032300EEC100FAB518 /* ReleaseAppStoreLLC */, + D0C9C5092300EF0100FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C5042300EEC100FAB518 /* Build configuration list for PBXNativeTarget "PasswordSetupUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C5052300EEC100FAB518 /* DebugAppStoreLLC */, + D0C9C5082300EEF300FAB518 /* DebugHockeyapp */, + D0C9C5062300EEC100FAB518 /* ReleaseAppStoreLLC */, + D0C9C50A2300EF0100FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C4F32300EEC100FAB518 /* Project object */; +} diff --git a/submodules/PasswordSetupUI/Sources/PasswordSetupUI.h b/submodules/PasswordSetupUI/Sources/PasswordSetupUI.h new file mode 100644 index 0000000000..8d30612cf2 --- /dev/null +++ b/submodules/PasswordSetupUI/Sources/PasswordSetupUI.h @@ -0,0 +1,19 @@ +// +// PasswordSetupUI.h +// PasswordSetupUI +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for PasswordSetupUI. +FOUNDATION_EXPORT double PasswordSetupUIVersionNumber; + +//! Project version string for PasswordSetupUI. +FOUNDATION_EXPORT const unsigned char PasswordSetupUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift b/submodules/PasswordSetupUI/Sources/ResetPasswordController.swift similarity index 98% rename from submodules/TelegramUI/TelegramUI/ResetPasswordController.swift rename to submodules/PasswordSetupUI/Sources/ResetPasswordController.swift index 54d89983aa..27180144c2 100644 --- a/submodules/TelegramUI/TelegramUI/ResetPasswordController.swift +++ b/submodules/PasswordSetupUI/Sources/ResetPasswordController.swift @@ -106,12 +106,12 @@ private func resetPasswordControllerEntries(presentationData: PresentationData, return entries } -enum ResetPasswordState: Equatable { +public enum ResetPasswordState: Equatable { case setup(currentPassword: String?) case pendingVerification(emailPattern: String) } -func resetPasswordController(context: AccountContext, emailPattern: String, completion: @escaping () -> Void) -> ViewController { +public func resetPasswordController(context: AccountContext, emailPattern: String, completion: @escaping () -> Void) -> ViewController { let statePromise = ValuePromise(ResetPasswordControllerState(), ignoreRepeated: true) let stateValue = Atomic(value: ResetPasswordControllerState()) let updateState: ((ResetPasswordControllerState) -> ResetPasswordControllerState) -> Void = { f in diff --git a/submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationContentNode.swift b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationContentNode.swift rename to submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationController.swift b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationController.swift similarity index 94% rename from submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationController.swift rename to submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationController.swift index 12fbe931f9..47608aef42 100644 --- a/submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationController.swift +++ b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationController.swift @@ -9,7 +9,7 @@ import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext -class SetupTwoStepVerificationController: ViewController { +public class SetupTwoStepVerificationController: ViewController { private let context: AccountContext private let initialState: SetupTwoStepVerificationInitialState private let stateUpdated: (SetupTwoStepVerificationStateUpdate, Bool, SetupTwoStepVerificationController) -> Void @@ -31,7 +31,7 @@ class SetupTwoStepVerificationController: ViewController { private var presentationData: PresentationData private var presentationDataDisposable: Disposable? - init(context: AccountContext, initialState: SetupTwoStepVerificationInitialState, stateUpdated: @escaping (SetupTwoStepVerificationStateUpdate, Bool, SetupTwoStepVerificationController) -> Void) { + public init(context: AccountContext, initialState: SetupTwoStepVerificationInitialState, stateUpdated: @escaping (SetupTwoStepVerificationStateUpdate, Bool, SetupTwoStepVerificationController) -> Void) { self.context = context self.initialState = initialState self.stateUpdated = stateUpdated @@ -75,7 +75,7 @@ class SetupTwoStepVerificationController: ViewController { self.dismiss() } - override func viewDidAppear(_ animated: Bool) { + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if let presentationArguments = self.presentationArguments as? ViewControllerPresentationArguments, !self.didPlayPresentationAnimation { @@ -86,7 +86,7 @@ class SetupTwoStepVerificationController: ViewController { } } - override func dismiss(completion: (() -> Void)? = nil) { + override public func dismiss(completion: (() -> Void)? = nil) { self.controllerNode.animateOut(completion: { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) completion?() diff --git a/submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationControllerNode.swift b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationControllerNode.swift rename to submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift index 5b05301cec..aef4edb0b5 100644 --- a/submodules/TelegramUI/TelegramUI/SetupTwoStepVerificationControllerNode.swift +++ b/submodules/PasswordSetupUI/Sources/SetupTwoStepVerificationControllerNode.swift @@ -10,7 +10,7 @@ import ActivityIndicator import AccountContext import AlertUI -enum SetupTwoStepVerificationInitialState { +public enum SetupTwoStepVerificationInitialState { case automatic case createPassword case updatePassword(current: String, hasRecoveryEmail: Bool, hasSecureValues: Bool) @@ -132,7 +132,7 @@ enum SetupTwoStepVerificationNextAction: Equatable { case button(title: String, isEnabled: Bool) } -enum SetupTwoStepVerificationStateUpdate { +public enum SetupTwoStepVerificationStateUpdate { case noPassword case awaitingEmailConfirmation(password: String, pattern: String, codeLength: Int32?) case passwordSet(password: String?, hasRecoveryEmail: Bool, hasSecureValues: Bool) diff --git a/submodules/PhoneInputNode/Info.plist b/submodules/PhoneInputNode/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/PhoneInputNode/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/PhoneInputNode/PhoneInputNode_Xcode.xcodeproj/project.pbxproj b/submodules/PhoneInputNode/PhoneInputNode_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..4329c2b8b5 --- /dev/null +++ b/submodules/PhoneInputNode/PhoneInputNode_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,559 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C26923009F2300FAB518 /* PhoneInputNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C26723009F2300FAB518 /* PhoneInputNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C2742300A01A00FAB518 /* PhoneInputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2732300A01A00FAB518 /* PhoneInputNode.swift */; }; + D0C9C2772300A02A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2762300A02A00FAB518 /* Foundation.framework */; }; + D0C9C2792300A02D00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2782300A02D00FAB518 /* UIKit.framework */; }; + D0C9C27B2300A03000FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C27A2300A03000FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C27D2300A03500FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C27C2300A03500FAB518 /* Display.framework */; }; + D0C9C27F2300A03A00FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C27E2300A03A00FAB518 /* TelegramPresentationData.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C26423009F2300FAB518 /* PhoneInputNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PhoneInputNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C26723009F2300FAB518 /* PhoneInputNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhoneInputNode.h; sourceTree = ""; }; + D0C9C26823009F2300FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C2732300A01A00FAB518 /* PhoneInputNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneInputNode.swift; sourceTree = ""; }; + D0C9C2762300A02A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C2782300A02D00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C27A2300A03000FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C27C2300A03500FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C27E2300A03A00FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C26123009F2300FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C27F2300A03A00FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C27D2300A03500FAB518 /* Display.framework in Frameworks */, + D0C9C27B2300A03000FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C2792300A02D00FAB518 /* UIKit.framework in Frameworks */, + D0C9C2772300A02A00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C25A23009F2300FAB518 = { + isa = PBXGroup; + children = ( + D0C9C26823009F2300FAB518 /* Info.plist */, + D0C9C26623009F2300FAB518 /* Sources */, + D0C9C26523009F2300FAB518 /* Products */, + D0C9C2752300A02A00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C26523009F2300FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C26423009F2300FAB518 /* PhoneInputNode.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C26623009F2300FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C2732300A01A00FAB518 /* PhoneInputNode.swift */, + D0C9C26723009F2300FAB518 /* PhoneInputNode.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C2752300A02A00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C27E2300A03A00FAB518 /* TelegramPresentationData.framework */, + D0C9C27C2300A03500FAB518 /* Display.framework */, + D0C9C27A2300A03000FAB518 /* AsyncDisplayKit.framework */, + D0C9C2782300A02D00FAB518 /* UIKit.framework */, + D0C9C2762300A02A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C25F23009F2300FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C26923009F2300FAB518 /* PhoneInputNode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C26323009F2300FAB518 /* PhoneInputNode */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C26C23009F2300FAB518 /* Build configuration list for PBXNativeTarget "PhoneInputNode" */; + buildPhases = ( + D0C9C25F23009F2300FAB518 /* Headers */, + D0C9C26023009F2300FAB518 /* Sources */, + D0C9C26123009F2300FAB518 /* Frameworks */, + D0C9C26223009F2300FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PhoneInputNode; + productName = PhoneInputNode; + productReference = D0C9C26423009F2300FAB518 /* PhoneInputNode.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C25B23009F2300FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C26323009F2300FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C25E23009F2300FAB518 /* Build configuration list for PBXProject "PhoneInputNode_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C25A23009F2300FAB518; + productRefGroup = D0C9C26523009F2300FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C26323009F2300FAB518 /* PhoneInputNode */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C26223009F2300FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C26023009F2300FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2742300A01A00FAB518 /* PhoneInputNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C26A23009F2300FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C26B23009F2300FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C26D23009F2300FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PhoneInputNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C26E23009F2300FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PhoneInputNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C26F23009FA700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C27023009FA700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PhoneInputNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C27123009FB300FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C27223009FB300FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.PhoneInputNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C25E23009F2300FAB518 /* Build configuration list for PBXProject "PhoneInputNode_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C26A23009F2300FAB518 /* DebugAppStoreLLC */, + D0C9C26F23009FA700FAB518 /* DebugHockeyapp */, + D0C9C26B23009F2300FAB518 /* ReleaseAppStoreLLC */, + D0C9C27123009FB300FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C26C23009F2300FAB518 /* Build configuration list for PBXNativeTarget "PhoneInputNode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C26D23009F2300FAB518 /* DebugAppStoreLLC */, + D0C9C27023009FA700FAB518 /* DebugHockeyapp */, + D0C9C26E23009F2300FAB518 /* ReleaseAppStoreLLC */, + D0C9C27223009FB300FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C25B23009F2300FAB518 /* Project object */; +} diff --git a/submodules/PhoneInputNode/Sources/PhoneInputNode.h b/submodules/PhoneInputNode/Sources/PhoneInputNode.h new file mode 100644 index 0000000000..827bb35196 --- /dev/null +++ b/submodules/PhoneInputNode/Sources/PhoneInputNode.h @@ -0,0 +1,19 @@ +// +// PhoneInputNode.h +// PhoneInputNode +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for PhoneInputNode. +FOUNDATION_EXPORT double PhoneInputNodeVersionNumber; + +//! Project version string for PhoneInputNode. +FOUNDATION_EXPORT const unsigned char PhoneInputNodeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/PhoneInputNode.swift b/submodules/PhoneInputNode/Sources/PhoneInputNode.swift similarity index 90% rename from submodules/TelegramUI/TelegramUI/PhoneInputNode.swift rename to submodules/PhoneInputNode/Sources/PhoneInputNode.swift index ee04b51f7b..81f2bf5195 100644 --- a/submodules/TelegramUI/TelegramUI/PhoneInputNode.swift +++ b/submodules/PhoneInputNode/Sources/PhoneInputNode.swift @@ -76,15 +76,15 @@ private func cleanSuffix(_ text: String) -> String { return result } -final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { - let countryCodeField: TextFieldNode - let numberField: TextFieldNode +public final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { + public let countryCodeField: TextFieldNode + public let numberField: TextFieldNode - var previousCountryCodeText = "+" - var previousNumberText = "" - var enableEditing: Bool = true + public var previousCountryCodeText = "+" + public var previousNumberText = "" + public var enableEditing: Bool = true - var number: String { + public var number: String { get { return cleanPhoneNumber((self.countryCodeField.textField.text ?? "") + (self.numberField.textField.text ?? "")) } set(value) { @@ -92,7 +92,7 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { } } - var countryCodeText: String { + public var countryCodeText: String { get { return self.countryCodeField.textField.text ?? "" } set(value) { @@ -103,7 +103,7 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { } } - var numberText: String { + public var numberText: String { get { return self.numberField.textField.text ?? "" } set(value) { @@ -116,7 +116,7 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { private var countryNameForCode: (Int32, String)? - var codeAndNumber: (Int32?, String?, String) { + public var codeAndNumber: (Int32?, String?, String) { get { var code: Int32? if let text = self.countryCodeField.textField.text, text.count <= 4, let number = Int(removePlus(text)) { @@ -142,18 +142,18 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { } } - var countryCodeUpdated: ((String, String?) -> Void)? + public var countryCodeUpdated: ((String, String?) -> Void)? - var countryCodeTextUpdated: ((String) -> Void)? - var numberTextUpdated: ((String) -> Void)? + public var countryCodeTextUpdated: ((String) -> Void)? + public var numberTextUpdated: ((String) -> Void)? - var returnAction: (() -> Void)? + public var returnAction: (() -> Void)? private let phoneFormatter = InteractivePhoneFormatter() private let fontSize: CGFloat - init(fontSize: CGFloat = 20.0) { + public init(fontSize: CGFloat = 20.0) { self.fontSize = fontSize self.countryCodeField = TextFieldNode() @@ -186,15 +186,15 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { self.numberField.textField.delegate = self } - @objc func countryCodeTextChanged(_ textField: UITextField) { + @objc private func countryCodeTextChanged(_ textField: UITextField) { self.updateNumberFromTextFields() } - @objc func numberTextChanged(_ textField: UITextField) { + @objc private func numberTextChanged(_ textField: UITextField) { self.updateNumberFromTextFields() } - func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if !self.enableEditing { return false } @@ -205,7 +205,7 @@ final class PhoneInputNode: ASDisplayNode, UITextFieldDelegate { return true } - func textFieldShouldReturn(_ textField: UITextField) -> Bool { + public func textFieldShouldReturn(_ textField: UITextField) -> Bool { if textField == self.numberField.textField { self.returnAction?() } diff --git a/submodules/ScreenCaptureDetection/Info.plist b/submodules/ScreenCaptureDetection/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/ScreenCaptureDetection/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/ScreenCaptureDetection/ScreenCaptureDetection_Xcode.xcodeproj/project.pbxproj b/submodules/ScreenCaptureDetection/ScreenCaptureDetection_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..36eb05899b --- /dev/null +++ b/submodules/ScreenCaptureDetection/ScreenCaptureDetection_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,551 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C3E92300CCF700FAB518 /* ScreenCaptureDetection.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C3E72300CCF700FAB518 /* ScreenCaptureDetection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C3F42300CD5100FAB518 /* ScreenCaptureDetection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3F32300CD5100FAB518 /* ScreenCaptureDetection.swift */; }; + D0C9C3F72300CD6700FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3F62300CD6700FAB518 /* Foundation.framework */; }; + D0C9C3F92300CD6C00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3F82300CD6B00FAB518 /* UIKit.framework */; }; + D0C9C3FB2300CD7000FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3FA2300CD7000FAB518 /* SwiftSignalKit.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C3E42300CCF700FAB518 /* ScreenCaptureDetection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ScreenCaptureDetection.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3E72300CCF700FAB518 /* ScreenCaptureDetection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScreenCaptureDetection.h; sourceTree = ""; }; + D0C9C3E82300CCF700FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C3F32300CD5100FAB518 /* ScreenCaptureDetection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScreenCaptureDetection.swift; sourceTree = ""; }; + D0C9C3F62300CD6700FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C3F82300CD6B00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C3FA2300CD7000FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C3E12300CCF700FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3FB2300CD7000FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C3F92300CD6C00FAB518 /* UIKit.framework in Frameworks */, + D0C9C3F72300CD6700FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C3DA2300CCF600FAB518 = { + isa = PBXGroup; + children = ( + D0C9C3E82300CCF700FAB518 /* Info.plist */, + D0C9C3E62300CCF700FAB518 /* Sources */, + D0C9C3E52300CCF700FAB518 /* Products */, + D0C9C3F52300CD6700FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C3E52300CCF700FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C3E42300CCF700FAB518 /* ScreenCaptureDetection.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C3E62300CCF700FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C3F32300CD5100FAB518 /* ScreenCaptureDetection.swift */, + D0C9C3E72300CCF700FAB518 /* ScreenCaptureDetection.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C3F52300CD6700FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C3FA2300CD7000FAB518 /* SwiftSignalKit.framework */, + D0C9C3F82300CD6B00FAB518 /* UIKit.framework */, + D0C9C3F62300CD6700FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C3DF2300CCF700FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3E92300CCF700FAB518 /* ScreenCaptureDetection.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C3E32300CCF700FAB518 /* ScreenCaptureDetection */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C3EC2300CCF700FAB518 /* Build configuration list for PBXNativeTarget "ScreenCaptureDetection" */; + buildPhases = ( + D0C9C3DF2300CCF700FAB518 /* Headers */, + D0C9C3E02300CCF700FAB518 /* Sources */, + D0C9C3E12300CCF700FAB518 /* Frameworks */, + D0C9C3E22300CCF700FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ScreenCaptureDetection; + productName = ScreenCaptureDetection; + productReference = D0C9C3E42300CCF700FAB518 /* ScreenCaptureDetection.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C3DB2300CCF600FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C3E32300CCF700FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C3DE2300CCF600FAB518 /* Build configuration list for PBXProject "ScreenCaptureDetection_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C3DA2300CCF600FAB518; + productRefGroup = D0C9C3E52300CCF700FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C3E32300CCF700FAB518 /* ScreenCaptureDetection */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C3E22300CCF700FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C3E02300CCF700FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3F42300CD5100FAB518 /* ScreenCaptureDetection.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C3EA2300CCF700FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C3EB2300CCF700FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3ED2300CCF700FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ScreenCaptureDetection; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C3EE2300CCF700FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ScreenCaptureDetection; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3EF2300CD1E00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C3F02300CD1E00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ScreenCaptureDetection; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C3F12300CD2A00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C3F22300CD2A00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ScreenCaptureDetection; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C3DE2300CCF600FAB518 /* Build configuration list for PBXProject "ScreenCaptureDetection_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3EA2300CCF700FAB518 /* DebugAppStoreLLC */, + D0C9C3EF2300CD1E00FAB518 /* DebugHockeyapp */, + D0C9C3EB2300CCF700FAB518 /* ReleaseAppStoreLLC */, + D0C9C3F12300CD2A00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C3EC2300CCF700FAB518 /* Build configuration list for PBXNativeTarget "ScreenCaptureDetection" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3ED2300CCF700FAB518 /* DebugAppStoreLLC */, + D0C9C3F02300CD1E00FAB518 /* DebugHockeyapp */, + D0C9C3EE2300CCF700FAB518 /* ReleaseAppStoreLLC */, + D0C9C3F22300CD2A00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C3DB2300CCF600FAB518 /* Project object */; +} diff --git a/submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.h b/submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.h new file mode 100644 index 0000000000..fae383e599 --- /dev/null +++ b/submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.h @@ -0,0 +1,19 @@ +// +// ScreenCaptureDetection.h +// ScreenCaptureDetection +// +// Created by Peter on 8/12/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for ScreenCaptureDetection. +FOUNDATION_EXPORT double ScreenCaptureDetectionVersionNumber; + +//! Project version string for ScreenCaptureDetection. +FOUNDATION_EXPORT const unsigned char ScreenCaptureDetectionVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/ScreenCaptureDetection.swift b/submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.swift similarity index 93% rename from submodules/TelegramUI/TelegramUI/ScreenCaptureDetection.swift rename to submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.swift index 1ec8d833be..0c35661804 100644 --- a/submodules/TelegramUI/TelegramUI/ScreenCaptureDetection.swift +++ b/submodules/ScreenCaptureDetection/Sources/ScreenCaptureDetection.swift @@ -2,7 +2,7 @@ import Foundation import SwiftSignalKit import UIKit -enum ScreenCaptureEvent { +public enum ScreenCaptureEvent { case still case video } @@ -50,7 +50,7 @@ private func screenRecordingActive() -> Signal { } |> runOn(Queue.mainQueue()) } -func screenCaptureEvents() -> Signal { +public func screenCaptureEvents() -> Signal { return Signal { subscriber in let observer = NotificationCenter.default.addObserver(forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: .main, using: { _ in subscriber.putNext(.still) @@ -72,5 +72,6 @@ func screenCaptureEvents() -> Signal { screenRecordingDisposable.dispose() } } - } |> runOn(Queue.mainQueue()) + } + |> runOn(Queue.mainQueue()) } diff --git a/submodules/SearchBarNode/Info.plist b/submodules/SearchBarNode/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/SearchBarNode/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/SearchBarNode/SearchBarNode_Xcode.xcodeproj/project.pbxproj b/submodules/SearchBarNode/SearchBarNode_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..322e103024 --- /dev/null +++ b/submodules/SearchBarNode/SearchBarNode_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,487 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C2C52300A21900FAB518 /* SearchBarNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C2C32300A21900FAB518 /* SearchBarNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C2CD2300A2C900FAB518 /* SearchBarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2CB2300A2C900FAB518 /* SearchBarNode.swift */; }; + D0C9C2CE2300A2C900FAB518 /* SearchBarPlaceholderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2CC2300A2C900FAB518 /* SearchBarPlaceholderNode.swift */; }; + D0C9C2D52300A39000FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2D42300A39000FAB518 /* Foundation.framework */; }; + D0C9C2D72300A39300FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2D62300A39300FAB518 /* UIKit.framework */; }; + D0C9C2D92300A39600FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2D82300A39600FAB518 /* SwiftSignalKit.framework */; }; + D0C9C2DB2300A39B00FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2DA2300A39B00FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C2DD2300A3A000FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2DC2300A3A000FAB518 /* Display.framework */; }; + D0C9C2DF2300A3A400FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2DE2300A3A400FAB518 /* TelegramPresentationData.framework */; }; + D0C9C2E12300A3A800FAB518 /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2E02300A3A800FAB518 /* ActivityIndicator.framework */; }; + D0C9C2E52300A44E00FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C2E42300A44E00FAB518 /* FrameworkBundle.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C2C02300A21900FAB518 /* SearchBarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SearchBarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2C32300A21900FAB518 /* SearchBarNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SearchBarNode.h; sourceTree = ""; }; + D0C9C2C42300A21900FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C2CB2300A2C900FAB518 /* SearchBarNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBarNode.swift; sourceTree = ""; }; + D0C9C2CC2300A2C900FAB518 /* SearchBarPlaceholderNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBarPlaceholderNode.swift; sourceTree = ""; }; + D0C9C2D42300A39000FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C2D62300A39300FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C2D82300A39600FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2DA2300A39B00FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2DC2300A3A000FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2DE2300A3A400FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2E02300A3A800FAB518 /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2E42300A44E00FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C2BD2300A21900FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2E12300A3A800FAB518 /* ActivityIndicator.framework in Frameworks */, + D0C9C2DF2300A3A400FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9C2DD2300A3A000FAB518 /* Display.framework in Frameworks */, + D0C9C2DB2300A39B00FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C2D92300A39600FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C2D72300A39300FAB518 /* UIKit.framework in Frameworks */, + D0C9C2D52300A39000FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C2B62300A21900FAB518 = { + isa = PBXGroup; + children = ( + D0C9C2C42300A21900FAB518 /* Info.plist */, + D0C9C2C22300A21900FAB518 /* Sources */, + D0C9C2C12300A21900FAB518 /* Products */, + D0C9C2D32300A38F00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C2C12300A21900FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C2C02300A21900FAB518 /* SearchBarNode.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C2C22300A21900FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C2CB2300A2C900FAB518 /* SearchBarNode.swift */, + D0C9C2CC2300A2C900FAB518 /* SearchBarPlaceholderNode.swift */, + D0C9C2E42300A44E00FAB518 /* FrameworkBundle.swift */, + D0C9C2C32300A21900FAB518 /* SearchBarNode.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C2D32300A38F00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C2E02300A3A800FAB518 /* ActivityIndicator.framework */, + D0C9C2DE2300A3A400FAB518 /* TelegramPresentationData.framework */, + D0C9C2DC2300A3A000FAB518 /* Display.framework */, + D0C9C2DA2300A39B00FAB518 /* AsyncDisplayKit.framework */, + D0C9C2D82300A39600FAB518 /* SwiftSignalKit.framework */, + D0C9C2D62300A39300FAB518 /* UIKit.framework */, + D0C9C2D42300A39000FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C2BB2300A21900FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2C52300A21900FAB518 /* SearchBarNode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C2BF2300A21900FAB518 /* SearchBarNode */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C2C82300A21900FAB518 /* Build configuration list for PBXNativeTarget "SearchBarNode" */; + buildPhases = ( + D0C9C2BB2300A21900FAB518 /* Headers */, + D0C9C2BC2300A21900FAB518 /* Sources */, + D0C9C2BD2300A21900FAB518 /* Frameworks */, + D0C9C2BE2300A21900FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SearchBarNode; + productName = SearchBarNode; + productReference = D0C9C2C02300A21900FAB518 /* SearchBarNode.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C2B72300A21900FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C2BF2300A21900FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C2BA2300A21900FAB518 /* Build configuration list for PBXProject "SearchBarNode_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C2B62300A21900FAB518; + productRefGroup = D0C9C2C12300A21900FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C2BF2300A21900FAB518 /* SearchBarNode */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C2BE2300A21900FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C2BC2300A21900FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C2CD2300A2C900FAB518 /* SearchBarNode.swift in Sources */, + D0C9C2CE2300A2C900FAB518 /* SearchBarPlaceholderNode.swift in Sources */, + D0C9C2E52300A44E00FAB518 /* FrameworkBundle.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C2C62300A21900FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C2C72300A21900FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C2C92300A21900FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.SearchBarNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C2CA2300A21900FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.SearchBarNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C2E22300A3E700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C2E32300A3E700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.SearchBarNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C2BA2300A21900FAB518 /* Build configuration list for PBXProject "SearchBarNode_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2C62300A21900FAB518 /* DebugAppStoreLLC */, + D0C9C2E22300A3E700FAB518 /* DebugHockeyapp */, + D0C9C2C72300A21900FAB518 /* ReleaseAppStoreLLC */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C2C82300A21900FAB518 /* Build configuration list for PBXNativeTarget "SearchBarNode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C2C92300A21900FAB518 /* DebugAppStoreLLC */, + D0C9C2E32300A3E700FAB518 /* DebugHockeyapp */, + D0C9C2CA2300A21900FAB518 /* ReleaseAppStoreLLC */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C2B72300A21900FAB518 /* Project object */; +} diff --git a/submodules/SearchBarNode/Sources/FrameworkBundle.swift b/submodules/SearchBarNode/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/SearchBarNode/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/SearchBarNode/Sources/SearchBarNode.h b/submodules/SearchBarNode/Sources/SearchBarNode.h new file mode 100644 index 0000000000..4d919473f7 --- /dev/null +++ b/submodules/SearchBarNode/Sources/SearchBarNode.h @@ -0,0 +1,19 @@ +// +// SearchBarNode.h +// SearchBarNode +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for SearchBarNode. +FOUNDATION_EXPORT double SearchBarNodeVersionNumber; + +//! Project version string for SearchBarNode. +FOUNDATION_EXPORT const unsigned char SearchBarNodeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/SearchBarNode.swift b/submodules/SearchBarNode/Sources/SearchBarNode.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/SearchBarNode.swift rename to submodules/SearchBarNode/Sources/SearchBarNode.swift index b58aee1e36..03ead7c44f 100644 --- a/submodules/TelegramUI/TelegramUI/SearchBarNode.swift +++ b/submodules/SearchBarNode/Sources/SearchBarNode.swift @@ -129,18 +129,18 @@ private class SearchBarTextField: UITextField { } } -final class SearchBarNodeTheme: Equatable { - let background: UIColor - let separator: UIColor - let inputFill: UIColor - let placeholder: UIColor - let primaryText: UIColor - let inputIcon: UIColor - let inputClear: UIColor - let accent: UIColor - let keyboard: PresentationThemeKeyboardColor +public final class SearchBarNodeTheme: Equatable { + public let background: UIColor + public let separator: UIColor + public let inputFill: UIColor + public let placeholder: UIColor + public let primaryText: UIColor + public let inputIcon: UIColor + public let inputClear: UIColor + public let accent: UIColor + public let keyboard: PresentationThemeKeyboardColor - init(background: UIColor, separator: UIColor, inputFill: UIColor, primaryText: UIColor, placeholder: UIColor, inputIcon: UIColor, inputClear: UIColor, accent: UIColor, keyboard: PresentationThemeKeyboardColor) { + public init(background: UIColor, separator: UIColor, inputFill: UIColor, primaryText: UIColor, placeholder: UIColor, inputIcon: UIColor, inputClear: UIColor, accent: UIColor, keyboard: PresentationThemeKeyboardColor) { self.background = background self.separator = separator self.inputFill = inputFill @@ -152,7 +152,7 @@ final class SearchBarNodeTheme: Equatable { self.keyboard = keyboard } - init(theme: PresentationTheme, hasSeparator: Bool = true) { + public init(theme: PresentationTheme, hasSeparator: Bool = true) { self.background = theme.rootController.navigationBar.backgroundColor self.separator = hasSeparator ? theme.rootController.navigationBar.separatorColor : theme.rootController.navigationBar.backgroundColor self.inputFill = theme.rootController.navigationSearchBar.inputFillColor @@ -196,7 +196,7 @@ final class SearchBarNodeTheme: Equatable { } } -enum SearchBarStyle { +public enum SearchBarStyle { case modern case legacy @@ -237,11 +237,11 @@ enum SearchBarStyle { } } -class SearchBarNode: ASDisplayNode, UITextFieldDelegate { - var cancel: (() -> Void)? - var textUpdated: ((String) -> Void)? - var textReturned: ((String) -> Void)? - var clearPrefix: (() -> Void)? +public class SearchBarNode: ASDisplayNode, UITextFieldDelegate { + public var cancel: (() -> Void)? + public var textUpdated: ((String) -> Void)? + public var textReturned: ((String) -> Void)? + public var clearPrefix: (() -> Void)? private let backgroundNode: ASDisplayNode private let separatorNode: ASDisplayNode @@ -252,7 +252,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { private let clearButton: HighlightableButtonNode private let cancelButton: HighlightableButtonNode - var placeholderString: NSAttributedString? { + public var placeholderString: NSAttributedString? { get { return self.textField.placeholderString } set(value) { @@ -260,7 +260,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - var prefixString: NSAttributedString? { + public var prefixString: NSAttributedString? { get { return self.textField.prefixString } set(value) { @@ -279,7 +279,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - var text: String { + public var text: String { get { return self.textField.text ?? "" } set(value) { @@ -290,7 +290,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - var activity: Bool = false { + public var activity: Bool = false { didSet { if self.activity != oldValue { if self.activity { @@ -311,7 +311,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - var hasCancelButton: Bool = true { + public var hasCancelButton: Bool = true { didSet { self.cancelButton.isHidden = !self.hasCancelButton if let (boundingSize, leftInset, rightInset) = self.validLayout { @@ -326,7 +326,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { private var theme: SearchBarNodeTheme? private var strings: PresentationStrings? - init(theme: SearchBarNodeTheme, strings: PresentationStrings, fieldStyle: SearchBarStyle = .legacy) { + public init(theme: SearchBarNodeTheme, strings: PresentationStrings, fieldStyle: SearchBarStyle = .legacy) { self.fieldStyle = fieldStyle self.backgroundNode = ASDisplayNode() @@ -384,7 +384,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { self.updateThemeAndStrings(theme: theme, strings: strings) } - func updateThemeAndStrings(theme: SearchBarNodeTheme, strings: PresentationStrings) { + public func updateThemeAndStrings(theme: SearchBarNodeTheme, strings: PresentationStrings) { if self.theme != theme || self.strings !== strings { self.cancelButton.setAttributedTitle(NSAttributedString(string: strings.Common_Cancel, font: Font.regular(17.0), textColor: theme.accent), for: []) } @@ -411,7 +411,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - func updateLayout(boundingSize: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { + public func updateLayout(boundingSize: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) { self.validLayout = (boundingSize, leftInset, rightInset) self.backgroundNode.frame = self.bounds @@ -455,11 +455,11 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - func activate() { + public func activate() { self.textField.becomeFirstResponder() } - func animateIn(from node: SearchBarPlaceholderNode, duration: Double, timingFunction: String) { + public func animateIn(from node: SearchBarPlaceholderNode, duration: Double, timingFunction: String) { let initialTextBackgroundFrame = node.convert(node.backgroundNode.frame, to: self) let initialBackgroundFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: self.bounds.size.width, height: max(0.0, initialTextBackgroundFrame.maxY + 8.0))) @@ -492,7 +492,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { node.isHidden = true } - func deactivate(clear: Bool = true) { + public func deactivate(clear: Bool = true) { self.textField.resignFirstResponder() if clear { self.textField.text = nil @@ -500,7 +500,7 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { } } - func transitionOut(to node: SearchBarPlaceholderNode, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { + public func transitionOut(to node: SearchBarPlaceholderNode, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { let targetTextBackgroundFrame = node.convert(node.backgroundNode.frame, to: self) let duration: Double = transition.isAnimated ? 0.5 : 0.0 @@ -590,14 +590,14 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { self.cancelButton.layer.animatePosition(from: self.cancelButton.layer.position, to: CGPoint(x: self.bounds.size.width + cancelButtonFrame.size.width / 2.0, y: targetTextBackgroundFrame.midY), duration: duration, timingFunction: timingFunction, removeOnCompletion: false) } - func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { if string.range(of: "\n") != nil { return false } return true } - func textFieldShouldReturn(_ textField: UITextField) -> Bool { + public func textFieldShouldReturn(_ textField: UITextField) -> Bool { self.textField.resignFirstResponder() if let textReturned = self.textReturned { textReturned(textField.text ?? "") @@ -605,14 +605,14 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { return false } - @objc func textFieldDidChange(_ textField: UITextField) { + @objc private func textFieldDidChange(_ textField: UITextField) { self.updateIsEmpty() if let textUpdated = self.textUpdated { textUpdated(textField.text ?? "") } } - func selectAll() { + public func selectAll() { self.textField.becomeFirstResponder() self.textField.selectAll(nil) } @@ -625,13 +625,13 @@ class SearchBarNode: ASDisplayNode, UITextFieldDelegate { self.clearButton.isHidden = !isEmpty && self.prefixString == nil } - @objc func cancelPressed() { + @objc private func cancelPressed() { if let cancel = self.cancel { cancel() } } - @objc func clearPressed() { + @objc private func clearPressed() { if (self.textField.text?.isEmpty ?? true) { if self.prefixString != nil { self.clearPrefix?() diff --git a/submodules/TelegramUI/TelegramUI/SearchBarPlaceholderNode.swift b/submodules/SearchBarNode/Sources/SearchBarPlaceholderNode.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/SearchBarPlaceholderNode.swift rename to submodules/SearchBarNode/Sources/SearchBarPlaceholderNode.swift index 9201ae03b3..d893379964 100644 --- a/submodules/TelegramUI/TelegramUI/SearchBarPlaceholderNode.swift +++ b/submodules/SearchBarNode/Sources/SearchBarPlaceholderNode.swift @@ -19,24 +19,24 @@ private class SearchBarPlaceholderNodeView: UIView { } } -class SearchBarPlaceholderNode: ASDisplayNode { - var activate: (() -> Void)? +public class SearchBarPlaceholderNode: ASDisplayNode { + public var activate: (() -> Void)? private let fieldStyle: SearchBarStyle - let backgroundNode: ASDisplayNode + public let backgroundNode: ASDisplayNode private var fillBackgroundColor: UIColor private var foregroundColor: UIColor private var iconColor: UIColor - let iconNode: ASImageNode - let labelNode: TextNode + public let iconNode: ASImageNode + public let labelNode: TextNode - private(set) var placeholderString: NSAttributedString? + public private(set) var placeholderString: NSAttributedString? - convenience override init() { + convenience public override init() { self.init(fieldStyle: .legacy) } - init(fieldStyle: SearchBarStyle = .legacy) { + public init(fieldStyle: SearchBarStyle = .legacy) { self.fieldStyle = fieldStyle self.backgroundNode = ASDisplayNode() @@ -68,7 +68,7 @@ class SearchBarPlaceholderNode: ASDisplayNode { self.backgroundNode.isUserInteractionEnabled = true } - override func didLoad() { + override public func didLoad() { super.didLoad() let gestureRecognizer = TapLongTapOrDoubleTapGestureRecognizer(target: self, action: #selector(self.backgroundTap(_:))) @@ -90,7 +90,7 @@ class SearchBarPlaceholderNode: ASDisplayNode { self.backgroundNode.view.addGestureRecognizer(gestureRecognizer) } - func asyncLayout() -> (_ placeholderString: NSAttributedString?, _ constrainedSize: CGSize, _ expansionProgress: CGFloat, _ iconColor: UIColor, _ foregroundColor: UIColor, _ backgroundColor: UIColor, _ transition: ContainedViewLayoutTransition) -> (CGFloat, () -> Void) { + public func asyncLayout() -> (_ placeholderString: NSAttributedString?, _ constrainedSize: CGSize, _ expansionProgress: CGFloat, _ iconColor: UIColor, _ foregroundColor: UIColor, _ backgroundColor: UIColor, _ transition: ContainedViewLayoutTransition) -> (CGFloat, () -> Void) { let labelLayout = TextNode.asyncLayout(self.labelNode) let currentForegroundColor = self.foregroundColor let currentIconColor = self.iconColor diff --git a/submodules/TelegramCore/TelegramCore/MessageUtils.swift b/submodules/TelegramCore/TelegramCore/MessageUtils.swift index 818a117f92..99a08d8d10 100644 --- a/submodules/TelegramCore/TelegramCore/MessageUtils.swift +++ b/submodules/TelegramCore/TelegramCore/MessageUtils.swift @@ -6,7 +6,7 @@ import Foundation #endif public extension MessageFlags { - public var isSending: Bool { + var isSending: Bool { return (self.contains(.Unsent) || self.contains(.Sending)) && !self.contains(.Failed) } } @@ -28,7 +28,7 @@ public extension Message { return nil } - public var muted: Bool { + var muted: Bool { for attribute in self.attributes { if let attribute = attribute as? NotificationInfoMessageAttribute { return attribute.flags.contains(.muted) @@ -37,7 +37,7 @@ public extension Message { return false } - public var personal: Bool { + var personal: Bool { for attribute in self.attributes { if let attribute = attribute as? NotificationInfoMessageAttribute { return attribute.flags.contains(.personal) @@ -77,7 +77,7 @@ public extension Message { return false } - public var sourceReference: SourceReferenceMessageAttribute? { + var sourceReference: SourceReferenceMessageAttribute? { for attribute in self.attributes { if let attribute = attribute as? SourceReferenceMessageAttribute { return attribute @@ -86,7 +86,7 @@ public extension Message { return nil } - public var effectiveAuthor: Peer? { + var effectiveAuthor: Peer? { if let forwardInfo = self.forwardInfo, let sourceReference = self.sourceReference, forwardInfo.author?.id == sourceReference.messageId.peerId { if let peer = self.peers[sourceReference.messageId.peerId] { return peer @@ -172,3 +172,21 @@ func locallyRenderedMessage(message: StoreMessage, peers: [PeerId: Peer]) -> Mes return Message(stableId: 0, stableVersion: 0, id: id, globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: message.timestamp, flags: MessageFlags(message.flags), tags: message.tags, globalTags: message.globalTags, localTags: message.localTags, forwardInfo: forwardInfo, author: author, text: message.text, attributes: message.attributes, media: message.media, peers: messagePeers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) } + +public extension Message { + func effectivelyIncoming(_ accountPeerId: PeerId) -> Bool { + if self.id.peerId == accountPeerId { + if self.forwardInfo != nil { + return true + } else { + return false + } + } else if self.flags.contains(.Incoming) { + return true + } else if let channel = self.peers[self.id.peerId] as? TelegramChannel, case .broadcast = channel.info { + return true + } else { + return false + } + } +} diff --git a/submodules/TelegramUI/TelegramUI/CurrencyFormat.swift b/submodules/TelegramStringFormatting/Sources/CurrencyFormat.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/CurrencyFormat.swift rename to submodules/TelegramStringFormatting/Sources/CurrencyFormat.swift diff --git a/submodules/TelegramStringFormatting/Sources/FrameworkBundle.swift b/submodules/TelegramStringFormatting/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..2d6a4df5c4 --- /dev/null +++ b/submodules/TelegramStringFormatting/Sources/FrameworkBundle.swift @@ -0,0 +1,6 @@ +import Foundation + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) diff --git a/submodules/TelegramStringFormatting/Sources/MessageContentKind.swift b/submodules/TelegramStringFormatting/Sources/MessageContentKind.swift new file mode 100644 index 0000000000..b606c8ebbd --- /dev/null +++ b/submodules/TelegramStringFormatting/Sources/MessageContentKind.swift @@ -0,0 +1,207 @@ +import Foundation +import Postbox +import TelegramCore +import TelegramPresentationData +import TelegramUIPreferences + +public enum MessageContentKindKey { + case text + case image + case video + case videoMessage + case audioMessage + case sticker + case animation + case file + case contact + case game + case location + case liveLocation + case expiredImage + case expiredVideo + case poll +} + +public enum MessageContentKind: Equatable { + case text(String) + case image + case video + case videoMessage + case audioMessage + case sticker(String) + case animation + case file(String) + case contact + case game(String) + case location + case liveLocation + case expiredImage + case expiredVideo + case poll(String) + + public var key: MessageContentKindKey { + switch self { + case .text: + return .text + case .image: + return .image + case .video: + return .video + case .videoMessage: + return .videoMessage + case .audioMessage: + return .audioMessage + case .sticker: + return .sticker + case .animation: + return .animation + case .file: + return .file + case .contact: + return .contact + case .game: + return .game + case .location: + return .location + case .liveLocation: + return .liveLocation + case .expiredImage: + return .expiredImage + case .expiredVideo: + return .expiredVideo + case .poll: + return .poll + } + } +} + +public func messageContentKind(_ message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> MessageContentKind { + for media in message.media { + if let kind = mediaContentKind(media, message: message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId) { + return kind + } + } + return .text(message.text) +} + +public func mediaContentKind(_ media: Media, message: Message? = nil, strings: PresentationStrings? = nil, nameDisplayOrder: PresentationPersonNameOrder? = nil, accountPeerId: PeerId? = nil) -> MessageContentKind? { + switch media { + case let expiredMedia as TelegramMediaExpiredContent: + switch expiredMedia.data { + case .image: + return .expiredImage + case .file: + return .expiredVideo + } + case _ as TelegramMediaImage: + return .image + case let file as TelegramMediaFile: + var fileName: String = "" + for attribute in file.attributes { + switch attribute { + case let .Sticker(text, _, _): + return .sticker(text) + case let .FileName(name): + fileName = name + case let .Audio(isVoice, _, title, performer, _): + if isVoice { + return .audioMessage + } else { + if let title = title, let performer = performer, !title.isEmpty, !performer.isEmpty { + return .file(title + " — " + performer) + } else if let title = title, !title.isEmpty { + return .file(title) + } else if let performer = performer, !performer.isEmpty { + return .file(performer) + } + } + case let .Video(_, _, flags): + if file.isAnimated { + return .animation + } else { + if flags.contains(.instantRoundVideo) { + return .videoMessage + } else { + return .video + } + } + default: + break + } + } + if file.isAnimatedSticker { + return .sticker("") + } + return .file(fileName) + case _ as TelegramMediaContact: + return .contact + case let game as TelegramMediaGame: + return .game(game.title) + case let location as TelegramMediaMap: + if location.liveBroadcastingTimeout != nil { + return .liveLocation + } else { + return .location + } + case _ as TelegramMediaAction: + if let message = message, let strings = strings, let nameDisplayOrder = nameDisplayOrder, let accountPeerId = accountPeerId { + return .text(plainServiceMessageString(strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId) ?? "") + } else { + return nil + } + case let poll as TelegramMediaPoll: + return .poll(poll.text) + default: + return nil + } +} + +public func stringForMediaKind(_ kind: MessageContentKind, strings: PresentationStrings) -> (String, Bool) { + switch kind { + case let .text(text): + return (text, false) + case .image: + return (strings.Message_Photo, true) + case .video: + return (strings.Message_Video, true) + case .videoMessage: + return (strings.Message_VideoMessage, true) + case .audioMessage: + return (strings.Message_Audio, true) + case let .sticker(text): + if text.isEmpty { + return (strings.Message_Sticker, true) + } else { + return (strings.Message_StickerText(text).0, true) + } + case .animation: + return (strings.Message_Animation, true) + case let .file(text): + if text.isEmpty { + return (strings.Message_File, true) + } else { + return (text, true) + } + case .contact: + return (strings.Message_Contact, true) + case let .game(text): + return (text, true) + case .location: + return (strings.Message_Location, true) + case .liveLocation: + return (strings.Message_LiveLocation, true) + case .expiredImage: + return (strings.Message_ImageExpired, true) + case .expiredVideo: + return (strings.Message_VideoExpired, true) + case let .poll(text): + return ("📊 \(text)", false) + } +} + +public func descriptionStringForMessage(_ message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> (String, Bool) { + if !message.text.isEmpty { + return (message.text, false) + } + return stringForMediaKind(messageContentKind(message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId), strings: strings) +} diff --git a/submodules/TelegramStringFormatting/Sources/ServiceMessageStrings.swift b/submodules/TelegramStringFormatting/Sources/ServiceMessageStrings.swift new file mode 100644 index 0000000000..3fc3b9223d --- /dev/null +++ b/submodules/TelegramStringFormatting/Sources/ServiceMessageStrings.swift @@ -0,0 +1,436 @@ +import Foundation +import Postbox +import TelegramCore +import TelegramPresentationData +import TelegramUIPreferences +import TextFormat +import LocalizedPeerData +import Display + +private let titleFont = Font.regular(13.0) +private let titleBoldFont = Font.bold(13.0) + +private func peerMentionAttributes(primaryTextColor: UIColor, peerId: PeerId) -> MarkdownAttributeSet { + return MarkdownAttributeSet(font: titleBoldFont, textColor: primaryTextColor, additionalAttributes: [TelegramTextAttributes.PeerMention: TelegramPeerMention(peerId: peerId, mention: "")]) +} + +private func peerMentionsAttributes(primaryTextColor: UIColor, peerIds: [(Int, PeerId?)]) -> [Int: MarkdownAttributeSet] { + var result: [Int: MarkdownAttributeSet] = [:] + for (index, peerId) in peerIds { + if let peerId = peerId { + result[index] = peerMentionAttributes(primaryTextColor: primaryTextColor, peerId: peerId) + } + } + return result +} + +public func plainServiceMessageString(strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message, accountPeerId: PeerId) -> String? { + return universalServiceMessageString(presentationData: nil, strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId)?.string +} + +public func universalServiceMessageString(presentationData: (PresentationTheme, TelegramWallpaper)?, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message, accountPeerId: PeerId) -> NSAttributedString? { + var attributedString: NSAttributedString? + + let primaryTextColor: UIColor + if let (theme, wallpaper) = presentationData { + primaryTextColor = serviceMessageColorComponents(theme: theme, wallpaper: wallpaper).primaryText + } else { + primaryTextColor = .black + } + + let bodyAttributes = MarkdownAttributeSet(font: titleFont, textColor: primaryTextColor, additionalAttributes: [:]) + + for media in message.media { + if let action = media as? TelegramMediaAction { + let authorName = message.author?.displayTitle(strings: strings, displayOrder: nameDisplayOrder) ?? "" + + var isChannel = false + if message.id.peerId.namespace == Namespaces.Peer.CloudChannel, let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { + isChannel = true + } + + switch action.action { + case let .groupCreated(title): + if isChannel { + attributedString = NSAttributedString(string: strings.Notification_CreatedChannel, font: titleFont, textColor: primaryTextColor) + } else { + attributedString = addAttributesToStringWithRanges(strings.Notification_CreatedChatWithTitle(authorName, title), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } + case let .addedMembers(peerIds): + if let peerId = peerIds.first, peerId == message.author?.id { + if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { + attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedChannel(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, peerId)])) + } else { + attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedChat(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, peerId)])) + } + } else { + var attributePeerIds: [(Int, PeerId?)] = [(0, message.author?.id)] + if peerIds.count == 1 { + attributePeerIds.append((1, peerIds.first)) + } + attributedString = addAttributesToStringWithRanges(strings.Notification_Invited(authorName, peerDebugDisplayTitles(peerIds, message.peers)), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds)) + } + case let .removedMembers(peerIds): + if peerIds.first == message.author?.id { + if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { + attributedString = addAttributesToStringWithRanges(strings.Notification_LeftChannel(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } else { + attributedString = addAttributesToStringWithRanges(strings.Notification_LeftChat(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } + } else { + var attributePeerIds: [(Int, PeerId?)] = [(0, message.author?.id)] + if peerIds.count == 1 { + attributePeerIds.append((1, peerIds.first)) + } + attributedString = addAttributesToStringWithRanges(strings.Notification_Kicked(authorName, peerDebugDisplayTitles(peerIds, message.peers)), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds)) + } + case let .photoUpdated(image): + if authorName.isEmpty || isChannel { + if isChannel { + if image != nil { + attributedString = NSAttributedString(string: strings.Channel_MessagePhotoUpdated, font: titleFont, textColor: primaryTextColor) + } else { + attributedString = NSAttributedString(string: strings.Channel_MessagePhotoRemoved, font: titleFont, textColor: primaryTextColor) + } + } else { + if image != nil { + attributedString = NSAttributedString(string: strings.Group_MessagePhotoUpdated, font: titleFont, textColor: primaryTextColor) + } else { + attributedString = NSAttributedString(string: strings.Group_MessagePhotoRemoved, font: titleFont, textColor: primaryTextColor) + } + } + } else { + if image != nil { + attributedString = addAttributesToStringWithRanges(strings.Notification_ChangedGroupPhoto(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } else { + attributedString = addAttributesToStringWithRanges(strings.Notification_RemovedGroupPhoto(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } + } + case let .titleUpdated(title): + if authorName.isEmpty || isChannel { + attributedString = NSAttributedString(string: strings.Channel_MessageTitleUpdated(title).0, font: titleFont, textColor: primaryTextColor) + } else { + attributedString = addAttributesToStringWithRanges(strings.Notification_ChangedGroupName(authorName, title), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } + case .pinnedMessageUpdated: + enum PinnnedMediaType { + case text(String) + case game + case photo + case video + case round + case audio + case file + case gif + case sticker + case location + case contact + case poll + case deleted + } + + var pinnedMessage: Message? + for attribute in message.attributes { + if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { + pinnedMessage = message + } + } + + var type: PinnnedMediaType + if let pinnedMessage = pinnedMessage { + type = .text(pinnedMessage.text) + inner: for media in pinnedMessage.media { + if media is TelegramMediaGame { + type = .game + break inner + } + if let _ = media as? TelegramMediaImage { + type = .photo + } else if let file = media as? TelegramMediaFile { + type = .file + if file.isAnimated { + type = .gif + } else { + for attribute in file.attributes { + switch attribute { + case let .Video(_, _, flags): + if flags.contains(.instantRoundVideo) { + type = .round + } else { + type = .video + } + break inner + case let .Audio(isVoice, _, _, _, _): + if isVoice { + type = .audio + } else { + type = .file + } + break inner + case .Sticker: + type = .sticker + break inner + case .Animated: + break + default: + break + } + } + } + } else if let _ = media as? TelegramMediaMap { + type = .location + } else if let _ = media as? TelegramMediaContact { + type = .contact + } else if let _ = media as? TelegramMediaPoll { + type = .poll + } + } + } else { + type = .deleted + } + + switch type { + case let .text(text): + var clippedText = text.replacingOccurrences(of: "\n", with: " ") + if clippedText.count > 14 { + clippedText = "\(clippedText[...clippedText.index(clippedText.startIndex, offsetBy: 14)])..." + } + let textWithRanges: (String, [(Int, NSRange)]) + if clippedText.isEmpty { + textWithRanges = strings.PUSH_PINNED_NOTEXT(authorName) + } else { + textWithRanges = strings.Notification_PinnedTextMessage(authorName, clippedText) + } + attributedString = addAttributesToStringWithRanges(textWithRanges, body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .game: + attributedString = addAttributesToStringWithRanges(strings.Message_AuthorPinnedGame(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .photo: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedPhotoMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .video: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedVideoMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .round: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedRoundMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .audio: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedAudioMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .file: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedDocumentMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .gif: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedAnimationMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .sticker: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedStickerMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .location: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedLocationMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .contact: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedContactMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .poll: + attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedPollMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .deleted: + attributedString = addAttributesToStringWithRanges(strings.PUSH_PINNED_NOTEXT(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + } + case .joinedByLink: + attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedGroupByLink(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .channelMigratedFromGroup, .groupMigratedToChannel: + attributedString = NSAttributedString(string: "", font: titleFont, textColor: primaryTextColor) + case let .messageAutoremoveTimeoutUpdated(timeout): + if timeout > 0 { + let timeValue = timeIntervalString(strings: strings, value: timeout) + + let string: String + if message.author?.id == accountPeerId { + string = strings.Notification_MessageLifetimeChangedOutgoing(timeValue).0 + } else { + let authorString: String + if let author = messageMainPeer(message) { + authorString = author.compactDisplayTitle + } else { + authorString = "" + } + string = strings.Notification_MessageLifetimeChanged(authorString, timeValue).0 + } + attributedString = NSAttributedString(string: string, font: titleFont, textColor: primaryTextColor) + } else { + let string: String + if message.author?.id == accountPeerId { + string = strings.Notification_MessageLifetimeRemovedOutgoing + } else { + let authorString: String + if let author = messageMainPeer(message) { + authorString = author.compactDisplayTitle + } else { + authorString = "" + } + string = strings.Notification_MessageLifetimeRemoved(authorString).0 + } + attributedString = NSAttributedString(string: string, font: titleFont, textColor: primaryTextColor) + } + case .historyCleared: + break + case .historyScreenshot: + let text: String + if message.effectivelyIncoming(accountPeerId) { + text = strings.Notification_SecretChatMessageScreenshot(message.author?.compactDisplayTitle ?? "").0 + } else { + text = strings.Notification_SecretChatMessageScreenshotSelf + } + attributedString = NSAttributedString(string: text, font: titleFont, textColor: primaryTextColor) + case let .gameScore(gameId: _, score): + var gameTitle: String? + inner: for attribute in message.attributes { + if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { + for media in message.media { + if let game = media as? TelegramMediaGame { + gameTitle = game.title + break inner + } + } + } + } + + var baseString: String + if message.author?.id == accountPeerId { + if let _ = gameTitle { + baseString = strings.ServiceMessage_GameScoreSelfExtended(score) + } else { + baseString = strings.ServiceMessage_GameScoreSelfSimple(score) + } + } else { + if let _ = gameTitle { + baseString = strings.ServiceMessage_GameScoreExtended(score) + } else { + baseString = strings.ServiceMessage_GameScoreSimple(score) + } + } + let baseStringValue = baseString as NSString + var ranges: [(Int, NSRange)] = [] + if baseStringValue.range(of: "{name}").location != NSNotFound { + ranges.append((0, baseStringValue.range(of: "{name}"))) + } + if baseStringValue.range(of: "{game}").location != NSNotFound { + ranges.append((1, baseStringValue.range(of: "{game}"))) + } + ranges.sort(by: { $0.1.location < $1.1.location }) + + var argumentAttributes = peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)]) + argumentAttributes[1] = MarkdownAttributeSet(font: titleBoldFont, textColor: primaryTextColor, additionalAttributes: [:]) + attributedString = addAttributesToStringWithRanges(formatWithArgumentRanges(baseString, ranges, [authorName, gameTitle ?? ""]), body: bodyAttributes, argumentAttributes: argumentAttributes) + case let .paymentSent(currency, totalAmount): + var invoiceMessage: Message? + for attribute in message.attributes { + if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { + invoiceMessage = message + } + } + + var invoiceTitle: String? + if let invoiceMessage = invoiceMessage { + for media in invoiceMessage.media { + if let invoice = media as? TelegramMediaInvoice { + invoiceTitle = invoice.title + } + } + } + + if let invoiceTitle = invoiceTitle { + let botString: String + if let peer = messageMainPeer(message) { + botString = peer.compactDisplayTitle + } else { + botString = "" + } + let mutableString = NSMutableAttributedString() + mutableString.append(NSAttributedString(string: strings.Notification_PaymentSent, font: titleFont, textColor: primaryTextColor)) + + var range = NSRange(location: NSNotFound, length: 0) + + range = (mutableString.string as NSString).range(of: "{amount}") + if range.location != NSNotFound { + mutableString.replaceCharacters(in: range, with: NSAttributedString(string: formatCurrencyAmount(totalAmount, currency: currency), font: titleBoldFont, textColor: primaryTextColor)) + } + range = (mutableString.string as NSString).range(of: "{name}") + if range.location != NSNotFound { + mutableString.replaceCharacters(in: range, with: NSAttributedString(string: botString, font: titleBoldFont, textColor: primaryTextColor)) + } + range = (mutableString.string as NSString).range(of: "{title}") + if range.location != NSNotFound { + mutableString.replaceCharacters(in: range, with: NSAttributedString(string: invoiceTitle, font: titleFont, textColor: primaryTextColor)) + } + attributedString = mutableString + } else { + attributedString = NSAttributedString(string: strings.Message_PaymentSent(formatCurrencyAmount(totalAmount, currency: currency)).0, font: titleFont, textColor: primaryTextColor) + } + case let .phoneCall(_, discardReason, _): + var titleString: String + let incoming: Bool + if message.flags.contains(.Incoming) { + titleString = strings.Notification_CallIncoming + incoming = true + } else { + titleString = strings.Notification_CallOutgoing + incoming = false + } + if let discardReason = discardReason { + switch discardReason { + case .busy, .disconnect: + titleString = strings.Notification_CallCanceled + case .missed: + titleString = incoming ? strings.Notification_CallMissed : strings.Notification_CallCanceled + case .hangup: + break + } + } + attributedString = NSAttributedString(string: titleString, font: titleFont, textColor: primaryTextColor) + case let .customText(text, entities): + attributedString = stringWithAppliedEntities(text, entities: entities, baseColor: primaryTextColor, linkColor: primaryTextColor, baseFont: titleFont, linkFont: titleBoldFont, boldFont: titleBoldFont, italicFont: titleFont, boldItalicFont: titleBoldFont, fixedFont: titleFont, blockQuoteFont: titleFont, underlineLinks: false) + case let .botDomainAccessGranted(domain): + attributedString = NSAttributedString(string: strings.AuthSessions_Message(domain).0, font: titleFont, textColor: primaryTextColor) + case let .botSentSecureValues(types): + var typesString = "" + var hasIdentity = false + var hasAddress = false + for type in types { + if !typesString.isEmpty { + typesString.append(", ") + } + switch type { + case .personalDetails: + typesString.append(strings.Notification_PassportValuePersonalDetails) + case .passport, .internalPassport, .driversLicense, .idCard: + if !hasIdentity { + typesString.append(strings.Notification_PassportValueProofOfIdentity) + hasIdentity = true + } + case .address: + typesString.append(strings.Notification_PassportValueAddress) + case .bankStatement, .utilityBill, .rentalAgreement, .passportRegistration, .temporaryRegistration: + if !hasAddress { + typesString.append(strings.Notification_PassportValueProofOfAddress) + hasAddress = true + } + case .phone: + typesString.append(strings.Notification_PassportValuePhone) + case .email: + typesString.append(strings.Notification_PassportValueEmail) + } + } + attributedString = NSAttributedString(string: strings.Notification_PassportValuesSentMessage(message.peers[message.id.peerId]?.compactDisplayTitle ?? "", typesString).0, font: titleFont, textColor: primaryTextColor) + case .peerJoined: + attributedString = addAttributesToStringWithRanges(strings.Notification_Joined(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) + case .phoneNumberRequest: + attributedString = nil + case .unknown: + attributedString = nil + } + + break + } else if let expiredMedia = media as? TelegramMediaExpiredContent { + switch expiredMedia.data { + case .image: + attributedString = NSAttributedString(string: strings.Message_ImageExpired, font: titleFont, textColor: primaryTextColor) + case .file: + attributedString = NSAttributedString(string: strings.Message_VideoExpired, font: titleFont, textColor: primaryTextColor) + } + } + } + + return attributedString +} diff --git a/submodules/TelegramUI/TelegramUI/StringForDuration.swift b/submodules/TelegramStringFormatting/Sources/StringForDuration.swift similarity index 85% rename from submodules/TelegramUI/TelegramUI/StringForDuration.swift rename to submodules/TelegramStringFormatting/Sources/StringForDuration.swift index 756b9bc755..e5ab3c68b7 100644 --- a/submodules/TelegramUI/TelegramUI/StringForDuration.swift +++ b/submodules/TelegramStringFormatting/Sources/StringForDuration.swift @@ -1,6 +1,6 @@ import Foundation -func stringForDuration(_ duration: Int32, position: Int32? = nil) -> String { +public func stringForDuration(_ duration: Int32, position: Int32? = nil) -> String { var duration = duration if let position = position { duration = max(0, duration - position) diff --git a/submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj/project.pbxproj index ba37255c56..b8afb93043 100644 --- a/submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramStringFormatting/TelegramStringFormatting_Xcode.xcodeproj/project.pbxproj @@ -16,6 +16,14 @@ D0879ACA22F7063300C4D6B3 /* DateFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879AC922F7063300C4D6B3 /* DateFormat.swift */; }; D0879ACC22F7064000C4D6B3 /* TelegramUIPreferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0879ACB22F7064000C4D6B3 /* TelegramUIPreferences.framework */; }; D0879ACE22F7069200C4D6B3 /* Locale.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0879ACD22F7069200C4D6B3 /* Locale.swift */; }; + D0C9C3542300AD7000FAB518 /* StringForDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3532300AD7000FAB518 /* StringForDuration.swift */; }; + D0C9C3562300AD9900FAB518 /* MessageContentKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3552300AD9900FAB518 /* MessageContentKind.swift */; }; + D0C9C3582300ADCF00FAB518 /* ServiceMessageStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3572300ADCF00FAB518 /* ServiceMessageStrings.swift */; }; + D0C9C35A2300AE7200FAB518 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3592300AE7200FAB518 /* TextFormat.framework */; }; + D0C9C35C2300AEBA00FAB518 /* LocalizedPeerData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C35B2300AEBA00FAB518 /* LocalizedPeerData.framework */; }; + D0C9C35E2300AEF100FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C35D2300AEF100FAB518 /* Display.framework */; }; + D0C9C3622300AFCC00FAB518 /* CurrencyFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3612300AFCB00FAB518 /* CurrencyFormat.swift */; }; + D0C9C3642300AFE800FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3632300AFE800FAB518 /* FrameworkBundle.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -30,6 +38,14 @@ D0879AC922F7063300C4D6B3 /* DateFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormat.swift; sourceTree = ""; }; D0879ACB22F7064000C4D6B3 /* TelegramUIPreferences.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUIPreferences.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0879ACD22F7069200C4D6B3 /* Locale.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Locale.swift; sourceTree = ""; }; + D0C9C3532300AD7000FAB518 /* StringForDuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringForDuration.swift; sourceTree = ""; }; + D0C9C3552300AD9900FAB518 /* MessageContentKind.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageContentKind.swift; sourceTree = ""; }; + D0C9C3572300ADCF00FAB518 /* ServiceMessageStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceMessageStrings.swift; sourceTree = ""; }; + D0C9C3592300AE7200FAB518 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C35B2300AEBA00FAB518 /* LocalizedPeerData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LocalizedPeerData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C35D2300AEF100FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3612300AFCB00FAB518 /* CurrencyFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrencyFormat.swift; sourceTree = ""; }; + D0C9C3632300AFE800FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -37,6 +53,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D0C9C35E2300AEF100FAB518 /* Display.framework in Frameworks */, + D0C9C35C2300AEBA00FAB518 /* LocalizedPeerData.framework in Frameworks */, + D0C9C35A2300AE7200FAB518 /* TextFormat.framework in Frameworks */, D0879ACC22F7064000C4D6B3 /* TelegramUIPreferences.framework in Frameworks */, D0879AC622F705C300C4D6B3 /* TelegramPresentationData.framework in Frameworks */, D0879AC422F705BE00C4D6B3 /* TelegramCore.framework in Frameworks */, @@ -69,10 +88,15 @@ D0879AAF22F7021000C4D6B3 /* Sources */ = { isa = PBXGroup; children = ( + D0C9C3612300AFCB00FAB518 /* CurrencyFormat.swift */, + D0C9C3552300AD9900FAB518 /* MessageContentKind.swift */, + D0C9C3572300ADCF00FAB518 /* ServiceMessageStrings.swift */, + D0C9C3532300AD7000FAB518 /* StringForDuration.swift */, D0879ACD22F7069200C4D6B3 /* Locale.swift */, D0879AC922F7063300C4D6B3 /* DateFormat.swift */, D0879ABC22F705AE00C4D6B3 /* PresenceStrings.swift */, D0879AB022F7021000C4D6B3 /* TelegramStringFormatting.h */, + D0C9C3632300AFE800FAB518 /* FrameworkBundle.swift */, ); path = Sources; sourceTree = ""; @@ -80,6 +104,9 @@ D0879ABE22F705B700C4D6B3 /* Frameworks */ = { isa = PBXGroup; children = ( + D0C9C35D2300AEF100FAB518 /* Display.framework */, + D0C9C35B2300AEBA00FAB518 /* LocalizedPeerData.framework */, + D0C9C3592300AE7200FAB518 /* TextFormat.framework */, D0879ACB22F7064000C4D6B3 /* TelegramUIPreferences.framework */, D0879AC522F705C300C4D6B3 /* TelegramPresentationData.framework */, D0879AC322F705BE00C4D6B3 /* TelegramCore.framework */, @@ -169,8 +196,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + D0C9C3642300AFE800FAB518 /* FrameworkBundle.swift in Sources */, + D0C9C3622300AFCC00FAB518 /* CurrencyFormat.swift in Sources */, + D0C9C3562300AD9900FAB518 /* MessageContentKind.swift in Sources */, D0879ACA22F7063300C4D6B3 /* DateFormat.swift in Sources */, D0879ABD22F705AE00C4D6B3 /* PresenceStrings.swift in Sources */, + D0C9C3542300AD7000FAB518 /* StringForDuration.swift in Sources */, + D0C9C3582300ADCF00FAB518 /* ServiceMessageStrings.swift in Sources */, D0879ACE22F7069200C4D6B3 /* Locale.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/submodules/TelegramUI/TelegramUI/AppDelegate.swift b/submodules/TelegramUI/TelegramUI/AppDelegate.swift index f70cd44f12..0e9b055a78 100644 --- a/submodules/TelegramUI/TelegramUI/AppDelegate.swift +++ b/submodules/TelegramUI/TelegramUI/AppDelegate.swift @@ -18,6 +18,8 @@ import DeviceCheck import AccountContext import OverlayStatusController import UndoUI +import LegacyUI +import PassportUI private let handleVoipNotifications = false @@ -1744,7 +1746,7 @@ final class SharedApplicationContext { |> take(1) |> deliverOnMainQueue).start(next: { context in let presentationData = context.context.sharedContext.currentPresentationData.with { $0 } - openExternalUrl(context: context.context, url: url, presentationData: presentationData, navigationController: context.rootController, dismissInput: { + context.context.sharedContext.openExternalUrl(context: context.context, urlContext: .generic, url: url, forceExternal: false, presentationData: presentationData, navigationController: context.rootController, dismissInput: { }) })) } diff --git a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift index b6d9f5affb..7d214d6c81 100644 --- a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift +++ b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift @@ -13,6 +13,7 @@ import AccountContext import AlertUI import TelegramPermissions import TelegramNotices +import LegacyUI func isAccessLocked(data: PostboxAccessChallengeData, at timestamp: Int32) -> Bool { if data.isLockable, let autolockDeadline = data.autolockDeadline, autolockDeadline <= timestamp { @@ -837,7 +838,7 @@ final class AuthorizedApplicationContext { func openUrl(_ url: URL) { if self.rootController.rootTabController != nil { let presentationData = self.context.sharedContext.currentPresentationData.with { $0 } - openExternalUrl(context: self.context, url: url.absoluteString, presentationData: presentationData, navigationController: self.rootController, dismissInput: { [weak self] in + self.context.sharedContext.openExternalUrl(context: self.context, urlContext: .generic, url: url.absoluteString, forceExternal: false, presentationData: presentationData, navigationController: self.rootController, dismissInput: { [weak self] in self?.rootController.view.endEditing(true) }) } else { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift index 3506a140e5..3ec6dc4228 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift @@ -15,6 +15,7 @@ import CoreTelephony import TelegramPresentationData import TextFormat import AccountContext +import CountrySelectionUI private enum InnerState: Equatable { case state(UnauthorizedAccountStateContents) diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift index 8e6223034e..2b4db3f9c8 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryController.swift @@ -8,6 +8,7 @@ import Postbox import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext +import CountrySelectionUI final class AuthorizationSequencePhoneEntryController: ViewController { private var controllerNode: AuthorizationSequencePhoneEntryControllerNode { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift index 36fc8fe9b1..b87aed2345 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift @@ -4,6 +4,8 @@ import AsyncDisplayKit import Display import TelegramCore import TelegramPresentationData +import PhoneInputNode +import CountrySelectionUI private func emojiFlagForISOCountryCode(_ countryCode: NSString) -> String { if countryCode.length != 2 { diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift index 22ce1287a4..f45c538f7d 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSignUpController.swift @@ -7,6 +7,7 @@ import TelegramCore import TelegramPresentationData import LegacyComponents import ProgressNavigationButtonNode +import ImageCompression final class AuthorizationSequenceSignUpController: ViewController { private var controllerNode: AuthorizationSequenceSignUpControllerNode { diff --git a/submodules/TelegramUI/TelegramUI/AvatarGalleryController.swift b/submodules/TelegramUI/TelegramUI/AvatarGalleryController.swift index ad7db693d3..1b8e8275fb 100644 --- a/submodules/TelegramUI/TelegramUI/AvatarGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/AvatarGalleryController.swift @@ -8,6 +8,7 @@ import AsyncDisplayKit import TelegramCore import TelegramPresentationData import AccountContext +import GalleryUI enum AvatarGalleryEntry: Equatable { case topImage([ImageRepresentationWithReference], GalleryItemIndexData?) diff --git a/submodules/TelegramUI/TelegramUI/AvatarGalleryItemFooterContentNode.swift b/submodules/TelegramUI/TelegramUI/AvatarGalleryItemFooterContentNode.swift index aaec2f506b..cd7a370711 100644 --- a/submodules/TelegramUI/TelegramUI/AvatarGalleryItemFooterContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/AvatarGalleryItemFooterContentNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import TelegramUIPreferences import TelegramStringFormatting import AccountContext +import GalleryUI private let deleteImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionThrash"), color: .white) private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white) diff --git a/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift b/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift index 9fe2aaff7b..eff578aa68 100644 --- a/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift +++ b/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift @@ -254,7 +254,7 @@ public func blockedPeersController(context: AccountContext, blockedPeersContext: } })) }, openPeer: { peer in - if let controller = peerInfoController(context: context, peer: peer) { + if let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer) { pushControllerImpl?(controller) } }) diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutControllerNode.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutControllerNode.swift index 6f597baf93..cd4268278f 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutControllerNode.swift @@ -12,6 +12,8 @@ import ItemListUI import AccountContext import AlertUI import TelegramNotices +import TelegramStringFormatting +import PasswordSetupUI final class BotCheckoutControllerArguments { fileprivate let account: Account diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutInfoController.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutInfoController.swift index 052b6c3003..773b4b2f88 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutInfoController.swift @@ -7,6 +7,7 @@ import Postbox import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext +import CountrySelectionUI enum BotCheckoutInfoControllerAddressFocus { case street1 diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutInfoControllerNode.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutInfoControllerNode.swift index 89990377d0..a55891ee94 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutInfoControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutInfoControllerNode.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import TelegramPresentationData import AccountContext import AlertUI +import CountrySelectionUI private final class BotCheckoutInfoAddressItems { let address1: BotPaymentFieldItemNode diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryController.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryController.swift index 0208ce461b..0ad8395f29 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryController.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryController.swift @@ -8,6 +8,7 @@ import Postbox import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext +import CountrySelectionUI enum BotCheckoutNativeCardEntryStatus { case notReady diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryControllerNode.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryControllerNode.swift index 8c8d14c5da..b05febbf4e 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutNativeCardEntryControllerNode.swift @@ -7,6 +7,7 @@ import Postbox import SwiftSignalKit import TelegramPresentationData import TelegramUIPrivateModule +import CountrySelectionUI private final class BotCheckoutNativeCardEntryScrollerNodeView: UIScrollView { var ignoreUpdateBounds = false diff --git a/submodules/TelegramUI/TelegramUI/BotCheckoutPaymentShippingOptionSheetController.swift b/submodules/TelegramUI/TelegramUI/BotCheckoutPaymentShippingOptionSheetController.swift index 181b4fe09e..1115233f61 100644 --- a/submodules/TelegramUI/TelegramUI/BotCheckoutPaymentShippingOptionSheetController.swift +++ b/submodules/TelegramUI/TelegramUI/BotCheckoutPaymentShippingOptionSheetController.swift @@ -5,6 +5,7 @@ import AsyncDisplayKit import SwiftSignalKit import TelegramCore import AccountContext +import TelegramStringFormatting final class BotCheckoutPaymentShippingOptionSheetController: ActionSheetController { private var presentationDisposable: Disposable? diff --git a/submodules/TelegramUI/TelegramUI/BotReceiptControllerNode.swift b/submodules/TelegramUI/TelegramUI/BotReceiptControllerNode.swift index ecc293a882..ea2de2edc9 100644 --- a/submodules/TelegramUI/TelegramUI/BotReceiptControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/BotReceiptControllerNode.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import TelegramPresentationData import ItemListUI import AccountContext +import TelegramStringFormatting final class BotReceiptControllerArguments { fileprivate let account: Account diff --git a/submodules/TelegramUI/TelegramUI/ChangePhoneNumberController.swift b/submodules/TelegramUI/TelegramUI/ChangePhoneNumberController.swift index fbf3bf21be..14f571f47b 100644 --- a/submodules/TelegramUI/TelegramUI/ChangePhoneNumberController.swift +++ b/submodules/TelegramUI/TelegramUI/ChangePhoneNumberController.swift @@ -8,6 +8,7 @@ import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext import AlertUI +import CountrySelectionUI final class ChangePhoneNumberController: ViewController { private var controllerNode: ChangePhoneNumberControllerNode { diff --git a/submodules/TelegramUI/TelegramUI/ChangePhoneNumberControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChangePhoneNumberControllerNode.swift index 3ecfbcdf5e..20018cba42 100644 --- a/submodules/TelegramUI/TelegramUI/ChangePhoneNumberControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChangePhoneNumberControllerNode.swift @@ -5,6 +5,8 @@ import Display import TelegramCore import CoreTelephony import TelegramPresentationData +import PhoneInputNode +import CountrySelectionUI private func generateCountryButtonBackground(color: UIColor, strokeColor: UIColor) -> UIImage? { return generateImage(CGSize(width: 45.0, height: 44.0 + 6.0), rotatedContext: { size, context in diff --git a/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift b/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift index e8c02e15ce..9c75cd9a7d 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift @@ -360,7 +360,7 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId) } items.append(ActionSheetButtonItem(title: presentationData.strings.GroupRemoved_ViewUserInfo, action: { [weak actionSheet] in actionSheet?.dismissAnimated() - if let infoController = peerInfoController(context: context, peer: participant.peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: participant.peer) { pushControllerImpl?(infoController) } })) diff --git a/submodules/TelegramUI/TelegramUI/ChannelDiscussionGroupSetupSearchItem.swift b/submodules/TelegramUI/TelegramUI/ChannelDiscussionGroupSetupSearchItem.swift index df8da02ac5..abbf889903 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelDiscussionGroupSetupSearchItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelDiscussionGroupSetupSearchItem.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import TelegramPresentationData import ItemListUI import AccountContext +import SearchBarNode final class ChannelDiscussionGroupSetupSearchItem: ItemListControllerSearch { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift b/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift index 4f6c4a4e43..4f5c3f7f14 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift @@ -14,6 +14,8 @@ import OverlayStatusController import TelegramStringFormatting import ShareController import AlertUI +import GalleryUI +import LegacyUI private final class ChannelInfoControllerArguments { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/ChannelMembersController.swift b/submodules/TelegramUI/TelegramUI/ChannelMembersController.swift index ab62f32d62..1e4b5e336f 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMembersController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMembersController.swift @@ -444,7 +444,7 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) -> } })) }, openPeer: { peer in - if let controller = peerInfoController(context: context, peer: peer) { + if let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer) { pushControllerImpl?(controller) } }, inviteViaLink: { @@ -496,7 +496,7 @@ public func channelMembersController(context: AccountContext, peerId: PeerId) -> return state.withUpdatedSearchingMembers(false) } }, openPeer: { peer, _ in - if let infoController = peerInfoController(context: context, peer: peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: peer) { pushControllerImpl?(infoController) // arguments.pushController(infoController) } diff --git a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift index 21d7238e3a..d1beff669d 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift @@ -10,6 +10,7 @@ import TelegramUIPreferences import MergeLists import AccountContext import TemporaryCachedPeerDataManager +import SearchBarNode private final class ChannelMembersSearchInteraction { let openPeer: (Peer, RenderedChannelParticipant?) -> Void diff --git a/submodules/TelegramUI/TelegramUI/ChannelOwnershipTransferController.swift b/submodules/TelegramUI/TelegramUI/ChannelOwnershipTransferController.swift index d7aadde034..ced9b371d2 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelOwnershipTransferController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelOwnershipTransferController.swift @@ -10,6 +10,7 @@ import ActivityIndicator import TextFormat import AccountContext import AlertUI +import PasswordSetupUI private final class ChannelOwnershipTransferPasswordFieldNode: ASDisplayNode, UITextFieldDelegate { private var theme: PresentationTheme diff --git a/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift b/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift index f326be718d..5de260d1c7 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift @@ -652,7 +652,7 @@ public func channelPermissionsController(context: AccountContext, peerId origina }), ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) }, openPeerInfo: { peer in - if let controller = peerInfoController(context: context, peer: peer) { + if let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer) { pushControllerImpl?(controller) } }, openKicked: { diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 7bd2758ec9..1156d676ea 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -26,6 +26,11 @@ import AlertUI import UndoUI import TelegramCallsUI import TelegramNotices +import GameUI +import ScreenCaptureDetection +import GalleryUI +import OpenInExternalAppUI +import LegacyUI public enum ChatControllerPeekActions { case standard @@ -2722,7 +2727,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar }, deleteSelectedMessages: { [weak self] in if let strongSelf = self { if let messageIds = strongSelf.presentationInterfaceState.interfaceState.selectionState?.selectedIds, !messageIds.isEmpty { - strongSelf.messageContextDisposable.set((chatAvailableMessageActions(postbox: strongSelf.context.account.postbox, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds) + strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(postbox: strongSelf.context.account.postbox, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds) |> deliverOnMainQueue).start(next: { actions in if let strongSelf = self, !actions.options.isEmpty { if let banAuthor = actions.banAuthor { @@ -2747,7 +2752,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar }, deleteMessages: { [weak self] messages, contextController, completion in if let strongSelf = self, !messages.isEmpty { let messageIds = Set(messages.map { $0.id }) - strongSelf.messageContextDisposable.set((chatAvailableMessageActions(postbox: strongSelf.context.account.postbox, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds) + strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(postbox: strongSelf.context.account.postbox, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds) |> deliverOnMainQueue).start(next: { actions in if let strongSelf = self, !actions.options.isEmpty { if let banAuthor = actions.banAuthor { @@ -4653,7 +4658,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar |> take(1) |> deliverOnMainQueue).start(next: { [weak self] peerView in if let strongSelf = self, let peer = peerView.peers[peerView.peerId], peer.restrictionText == nil && !strongSelf.presentationInterfaceState.isNotAccessible { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } } @@ -6062,7 +6067,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar } self.navigationActionDisposable.set((peerSignal |> take(1) |> deliverOnMainQueue).start(next: { [weak self] peer in if let strongSelf = self, let peer = peer { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } } @@ -6467,7 +6472,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar |> take(1) |> deliverOnMainQueue).start(next: { [weak self] peer in if let strongSelf = self, peer.restrictionText == nil { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } } @@ -6564,7 +6569,7 @@ public final class ChatController: TelegramBaseController, GalleryHiddenMediaTar private func openUrlIn(_ url: String) { let actionSheet = OpenInActionSheetController(context: self.context, item: .url(url: url), openUrl: { [weak self] url in if let strongSelf = self, let navigationController = strongSelf.navigationController as? NavigationController { - openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { self?.chatDisplayNode.dismissInput() }) } diff --git a/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift index fa04fb0cac..73dbda7133 100644 --- a/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/TelegramUI/ChatInterfaceStateContextMenus.swift @@ -10,6 +10,7 @@ import TelegramVoip import OverlayStatusController import AccountContext import ContextUI +import LegacyUI private struct MessageContextMenuData { let starStatus: Bool? @@ -346,7 +347,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: return transaction.getPreferencesEntry(key: PreferencesKeys.limitsConfiguration) as? LimitsConfiguration ?? LimitsConfiguration.defaultValue } - dataSignal = combineLatest(loadLimits, loadStickerSaveStatusSignal, loadResourceStatusSignal, chatAvailableMessageActions(postbox: context.account.postbox, accountPeerId: context.account.peerId, messageIds: Set(messages.map { $0.id }))) + dataSignal = combineLatest(loadLimits, loadStickerSaveStatusSignal, loadResourceStatusSignal, context.sharedContext.chatAvailableMessageActions(postbox: context.account.postbox, accountPeerId: context.account.peerId, messageIds: Set(messages.map { $0.id }))) |> map { limitsConfiguration, stickerSaveStatus, resourceStatus, messageActions -> MessageContextMenuData in var canEdit = false if !isAction { @@ -671,34 +672,6 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: } } -struct ChatAvailableMessageActionOptions: OptionSet { - var rawValue: Int32 - - init(rawValue: Int32) { - self.rawValue = rawValue - } - - init() { - self.rawValue = 0 - } - - static let deleteLocally = ChatAvailableMessageActionOptions(rawValue: 1 << 0) - static let deleteGlobally = ChatAvailableMessageActionOptions(rawValue: 1 << 1) - static let forward = ChatAvailableMessageActionOptions(rawValue: 1 << 2) - static let report = ChatAvailableMessageActionOptions(rawValue: 1 << 3) - static let viewStickerPack = ChatAvailableMessageActionOptions(rawValue: 1 << 4) - static let rateCall = ChatAvailableMessageActionOptions(rawValue: 1 << 5) - static let cancelSending = ChatAvailableMessageActionOptions(rawValue: 1 << 6) - static let unsendPersonal = ChatAvailableMessageActionOptions(rawValue: 1 << 7) - static let sendScheduledNow = ChatAvailableMessageActionOptions(rawValue: 1 << 8) - static let editScheduledTime = ChatAvailableMessageActionOptions(rawValue: 1 << 9) -} - -struct ChatAvailableMessageActions { - let options: ChatAvailableMessageActionOptions - let banAuthor: Peer? -} - func canPerformEditingActions(limits: LimitsConfiguration, accountPeerId: PeerId, message: Message, unlimitedInterval: Bool) -> Bool { if message.id.peerId == accountPeerId { return true @@ -740,7 +713,7 @@ private func canPerformDeleteActions(limits: LimitsConfiguration, accountPeerId: return false } -func chatAvailableMessageActions(postbox: Postbox, accountPeerId: PeerId, messageIds: Set) -> Signal { +func chatAvailableMessageActionsImpl(postbox: Postbox, accountPeerId: PeerId, messageIds: Set) -> Signal { return postbox.transaction { transaction -> ChatAvailableMessageActions in let limitsConfiguration: LimitsConfiguration = transaction.getPreferencesEntry(key: PreferencesKeys.limitsConfiguration) as? LimitsConfiguration ?? LimitsConfiguration.defaultValue var optionsMap: [MessageId: ChatAvailableMessageActionOptions] = [:] diff --git a/submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift index d11298fbc2..7ca5cf1a24 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import MergeLists import ActivityIndicator import AccountContext +import SearchBarNode private final class ChatListControllerNodeView: UITracingLayerView, PreviewingHostView { var previewingDelegate: PreviewingHostViewDelegate? { diff --git a/submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift b/submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift index e1861dd61c..a970acd3c8 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift +++ b/submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift @@ -3,6 +3,7 @@ import Postbox import TelegramCore import TelegramPresentationData import TelegramUIPreferences +import TelegramStringFormatting public func chatListItemStrings(strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message?, chatPeer: RenderedPeer, accountPeerId: PeerId, enableMediaEmoji: Bool = true, isPeerGroup: Bool = false) -> (peer: Peer?, hideAuthor: Bool, messageText: String) { let peer: Peer? diff --git a/submodules/TelegramUI/TelegramUI/ChatListSearchItem.swift b/submodules/TelegramUI/TelegramUI/ChatListSearchItem.swift index b37e8b6cde..6ee54565ca 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListSearchItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatListSearchItem.swift @@ -5,6 +5,7 @@ import Postbox import Display import SwiftSignalKit import TelegramPresentationData +import SearchBarNode private let searchBarFont = Font.regular(17.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift index f11eea712f..75b78065e9 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift @@ -7,6 +7,7 @@ import AsyncDisplayKit import Postbox import TelegramPresentationData import StickerResources +import AccountContext enum ChatMediaInputStickerGridSectionAccessory { case none diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageActionItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageActionItemNode.swift index 05a41c77d5..769653f95b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageActionItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageActionItemNode.swift @@ -11,437 +11,10 @@ import TextFormat import LocalizedPeerData import UrlEscaping import PhotoResources - -private let titleFont = Font.regular(13.0) -private let titleBoldFont = Font.bold(13.0) - -private func peerMentionAttributes(primaryTextColor: UIColor, peerId: PeerId) -> MarkdownAttributeSet { - return MarkdownAttributeSet(font: titleBoldFont, textColor: primaryTextColor, additionalAttributes: [TelegramTextAttributes.PeerMention: TelegramPeerMention(peerId: peerId, mention: "")]) -} - -private func peerMentionsAttributes(primaryTextColor: UIColor, peerIds: [(Int, PeerId?)]) -> [Int: MarkdownAttributeSet] { - var result: [Int: MarkdownAttributeSet] = [:] - for (index, peerId) in peerIds { - if let peerId = peerId { - result[index] = peerMentionAttributes(primaryTextColor: primaryTextColor, peerId: peerId) - } - } - return result -} +import TelegramStringFormatting private func attributedServiceMessageString(theme: ChatPresentationThemeData, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message, accountPeerId: PeerId) -> NSAttributedString? { - return universalServiceMessageString(theme: theme, strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId) -} - -func plainServiceMessageString(strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message, accountPeerId: PeerId) -> String? { - return universalServiceMessageString(theme: nil, strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId)?.string -} - -private func universalServiceMessageString(theme: ChatPresentationThemeData?, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, message: Message, accountPeerId: PeerId) -> NSAttributedString? { - var attributedString: NSAttributedString? - - let primaryTextColor: UIColor - if let theme = theme { - primaryTextColor = serviceMessageColorComponents(theme: theme.theme, wallpaper: theme.wallpaper).primaryText - } else { - primaryTextColor = .black - } - - let bodyAttributes = MarkdownAttributeSet(font: titleFont, textColor: primaryTextColor, additionalAttributes: [:]) - - for media in message.media { - if let action = media as? TelegramMediaAction { - let authorName = message.author?.displayTitle(strings: strings, displayOrder: nameDisplayOrder) ?? "" - - var isChannel = false - if message.id.peerId.namespace == Namespaces.Peer.CloudChannel, let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { - isChannel = true - } - - switch action.action { - case let .groupCreated(title): - if isChannel { - attributedString = NSAttributedString(string: strings.Notification_CreatedChannel, font: titleFont, textColor: primaryTextColor) - } else { - attributedString = addAttributesToStringWithRanges(strings.Notification_CreatedChatWithTitle(authorName, title), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } - case let .addedMembers(peerIds): - if let peerId = peerIds.first, peerId == message.author?.id { - if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { - attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedChannel(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, peerId)])) - } else { - attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedChat(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, peerId)])) - } - } else { - var attributePeerIds: [(Int, PeerId?)] = [(0, message.author?.id)] - if peerIds.count == 1 { - attributePeerIds.append((1, peerIds.first)) - } - attributedString = addAttributesToStringWithRanges(strings.Notification_Invited(authorName, peerDebugDisplayTitles(peerIds, message.peers)), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds)) - } - case let .removedMembers(peerIds): - if peerIds.first == message.author?.id { - if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { - attributedString = addAttributesToStringWithRanges(strings.Notification_LeftChannel(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } else { - attributedString = addAttributesToStringWithRanges(strings.Notification_LeftChat(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } - } else { - var attributePeerIds: [(Int, PeerId?)] = [(0, message.author?.id)] - if peerIds.count == 1 { - attributePeerIds.append((1, peerIds.first)) - } - attributedString = addAttributesToStringWithRanges(strings.Notification_Kicked(authorName, peerDebugDisplayTitles(peerIds, message.peers)), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: attributePeerIds)) - } - case let .photoUpdated(image): - if authorName.isEmpty || isChannel { - if isChannel { - if image != nil { - attributedString = NSAttributedString(string: strings.Channel_MessagePhotoUpdated, font: titleFont, textColor: primaryTextColor) - } else { - attributedString = NSAttributedString(string: strings.Channel_MessagePhotoRemoved, font: titleFont, textColor: primaryTextColor) - } - } else { - if image != nil { - attributedString = NSAttributedString(string: strings.Group_MessagePhotoUpdated, font: titleFont, textColor: primaryTextColor) - } else { - attributedString = NSAttributedString(string: strings.Group_MessagePhotoRemoved, font: titleFont, textColor: primaryTextColor) - } - } - } else { - if image != nil { - attributedString = addAttributesToStringWithRanges(strings.Notification_ChangedGroupPhoto(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } else { - attributedString = addAttributesToStringWithRanges(strings.Notification_RemovedGroupPhoto(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } - } - case let .titleUpdated(title): - if authorName.isEmpty || isChannel { - attributedString = NSAttributedString(string: strings.Channel_MessageTitleUpdated(title).0, font: titleFont, textColor: primaryTextColor) - } else { - attributedString = addAttributesToStringWithRanges(strings.Notification_ChangedGroupName(authorName, title), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } - case .pinnedMessageUpdated: - enum PinnnedMediaType { - case text(String) - case game - case photo - case video - case round - case audio - case file - case gif - case sticker - case location - case contact - case poll - case deleted - } - - var pinnedMessage: Message? - for attribute in message.attributes { - if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { - pinnedMessage = message - } - } - - var type: PinnnedMediaType - if let pinnedMessage = pinnedMessage { - type = .text(pinnedMessage.text) - inner: for media in pinnedMessage.media { - if media is TelegramMediaGame { - type = .game - break inner - } - if let _ = media as? TelegramMediaImage { - type = .photo - } else if let file = media as? TelegramMediaFile { - type = .file - if file.isAnimated { - type = .gif - } else { - for attribute in file.attributes { - switch attribute { - case let .Video(_, _, flags): - if flags.contains(.instantRoundVideo) { - type = .round - } else { - type = .video - } - break inner - case let .Audio(isVoice, _, _, _, _): - if isVoice { - type = .audio - } else { - type = .file - } - break inner - case .Sticker: - type = .sticker - break inner - case .Animated: - break - default: - break - } - } - } - } else if let _ = media as? TelegramMediaMap { - type = .location - } else if let _ = media as? TelegramMediaContact { - type = .contact - } else if let _ = media as? TelegramMediaPoll { - type = .poll - } - } - } else { - type = .deleted - } - - switch type { - case let .text(text): - var clippedText = text.replacingOccurrences(of: "\n", with: " ") - if clippedText.count > 14 { - clippedText = "\(clippedText[...clippedText.index(clippedText.startIndex, offsetBy: 14)])..." - } - let textWithRanges: (String, [(Int, NSRange)]) - if clippedText.isEmpty { - textWithRanges = strings.PUSH_PINNED_NOTEXT(authorName) - } else { - textWithRanges = strings.Notification_PinnedTextMessage(authorName, clippedText) - } - attributedString = addAttributesToStringWithRanges(textWithRanges, body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .game: - attributedString = addAttributesToStringWithRanges(strings.Message_AuthorPinnedGame(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .photo: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedPhotoMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .video: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedVideoMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .round: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedRoundMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .audio: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedAudioMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .file: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedDocumentMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .gif: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedAnimationMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .sticker: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedStickerMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .location: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedLocationMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .contact: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedContactMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .poll: - attributedString = addAttributesToStringWithRanges(strings.Notification_PinnedPollMessage(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .deleted: - attributedString = addAttributesToStringWithRanges(strings.PUSH_PINNED_NOTEXT(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - } - case .joinedByLink: - attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedGroupByLink(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .channelMigratedFromGroup, .groupMigratedToChannel: - attributedString = NSAttributedString(string: "", font: titleFont, textColor: primaryTextColor) - case let .messageAutoremoveTimeoutUpdated(timeout): - if timeout > 0 { - let timeValue = timeIntervalString(strings: strings, value: timeout) - - let string: String - if message.author?.id == accountPeerId { - string = strings.Notification_MessageLifetimeChangedOutgoing(timeValue).0 - } else { - let authorString: String - if let author = messageMainPeer(message) { - authorString = author.compactDisplayTitle - } else { - authorString = "" - } - string = strings.Notification_MessageLifetimeChanged(authorString, timeValue).0 - } - attributedString = NSAttributedString(string: string, font: titleFont, textColor: primaryTextColor) - } else { - let string: String - if message.author?.id == accountPeerId { - string = strings.Notification_MessageLifetimeRemovedOutgoing - } else { - let authorString: String - if let author = messageMainPeer(message) { - authorString = author.compactDisplayTitle - } else { - authorString = "" - } - string = strings.Notification_MessageLifetimeRemoved(authorString).0 - } - attributedString = NSAttributedString(string: string, font: titleFont, textColor: primaryTextColor) - } - case .historyCleared: - break - case .historyScreenshot: - let text: String - if message.effectivelyIncoming(accountPeerId) { - text = strings.Notification_SecretChatMessageScreenshot(message.author?.compactDisplayTitle ?? "").0 - } else { - text = strings.Notification_SecretChatMessageScreenshotSelf - } - attributedString = NSAttributedString(string: text, font: titleFont, textColor: primaryTextColor) - case let .gameScore(gameId: _, score): - var gameTitle: String? - inner: for attribute in message.attributes { - if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { - for media in message.media { - if let game = media as? TelegramMediaGame { - gameTitle = game.title - break inner - } - } - } - } - - var baseString: String - if message.author?.id == accountPeerId { - if let _ = gameTitle { - baseString = strings.ServiceMessage_GameScoreSelfExtended(score) - } else { - baseString = strings.ServiceMessage_GameScoreSelfSimple(score) - } - } else { - if let _ = gameTitle { - baseString = strings.ServiceMessage_GameScoreExtended(score) - } else { - baseString = strings.ServiceMessage_GameScoreSimple(score) - } - } - let baseStringValue = baseString as NSString - var ranges: [(Int, NSRange)] = [] - if baseStringValue.range(of: "{name}").location != NSNotFound { - ranges.append((0, baseStringValue.range(of: "{name}"))) - } - if baseStringValue.range(of: "{game}").location != NSNotFound { - ranges.append((1, baseStringValue.range(of: "{game}"))) - } - ranges.sort(by: { $0.1.location < $1.1.location }) - - var argumentAttributes = peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)]) - argumentAttributes[1] = MarkdownAttributeSet(font: titleBoldFont, textColor: primaryTextColor, additionalAttributes: [:]) - attributedString = addAttributesToStringWithRanges(formatWithArgumentRanges(baseString, ranges, [authorName, gameTitle ?? ""]), body: bodyAttributes, argumentAttributes: argumentAttributes) - case let .paymentSent(currency, totalAmount): - var invoiceMessage: Message? - for attribute in message.attributes { - if let attribute = attribute as? ReplyMessageAttribute, let message = message.associatedMessages[attribute.messageId] { - invoiceMessage = message - } - } - - var invoiceTitle: String? - if let invoiceMessage = invoiceMessage { - for media in invoiceMessage.media { - if let invoice = media as? TelegramMediaInvoice { - invoiceTitle = invoice.title - } - } - } - - if let invoiceTitle = invoiceTitle { - let botString: String - if let peer = messageMainPeer(message) { - botString = peer.compactDisplayTitle - } else { - botString = "" - } - let mutableString = NSMutableAttributedString() - mutableString.append(NSAttributedString(string: strings.Notification_PaymentSent, font: titleFont, textColor: primaryTextColor)) - - var range = NSRange(location: NSNotFound, length: 0) - - range = (mutableString.string as NSString).range(of: "{amount}") - if range.location != NSNotFound { - mutableString.replaceCharacters(in: range, with: NSAttributedString(string: formatCurrencyAmount(totalAmount, currency: currency), font: titleBoldFont, textColor: primaryTextColor)) - } - range = (mutableString.string as NSString).range(of: "{name}") - if range.location != NSNotFound { - mutableString.replaceCharacters(in: range, with: NSAttributedString(string: botString, font: titleBoldFont, textColor: primaryTextColor)) - } - range = (mutableString.string as NSString).range(of: "{title}") - if range.location != NSNotFound { - mutableString.replaceCharacters(in: range, with: NSAttributedString(string: invoiceTitle, font: titleFont, textColor: primaryTextColor)) - } - attributedString = mutableString - } else { - attributedString = NSAttributedString(string: strings.Message_PaymentSent(formatCurrencyAmount(totalAmount, currency: currency)).0, font: titleFont, textColor: primaryTextColor) - } - case let .phoneCall(_, discardReason, _): - var titleString: String - let incoming: Bool - if message.flags.contains(.Incoming) { - titleString = strings.Notification_CallIncoming - incoming = true - } else { - titleString = strings.Notification_CallOutgoing - incoming = false - } - if let discardReason = discardReason { - switch discardReason { - case .busy, .disconnect: - titleString = strings.Notification_CallCanceled - case .missed: - titleString = incoming ? strings.Notification_CallMissed : strings.Notification_CallCanceled - case .hangup: - break - } - } - attributedString = NSAttributedString(string: titleString, font: titleFont, textColor: primaryTextColor) - case let .customText(text, entities): - attributedString = stringWithAppliedEntities(text, entities: entities, baseColor: primaryTextColor, linkColor: primaryTextColor, baseFont: titleFont, linkFont: titleBoldFont, boldFont: titleBoldFont, italicFont: titleFont, boldItalicFont: titleBoldFont, fixedFont: titleFont, blockQuoteFont: titleFont, underlineLinks: false) - case let .botDomainAccessGranted(domain): - attributedString = NSAttributedString(string: strings.AuthSessions_Message(domain).0, font: titleFont, textColor: primaryTextColor) - case let .botSentSecureValues(types): - var typesString = "" - var hasIdentity = false - var hasAddress = false - for type in types { - if !typesString.isEmpty { - typesString.append(", ") - } - switch type { - case .personalDetails: - typesString.append(strings.Notification_PassportValuePersonalDetails) - case .passport, .internalPassport, .driversLicense, .idCard: - if !hasIdentity { - typesString.append(strings.Notification_PassportValueProofOfIdentity) - hasIdentity = true - } - case .address: - typesString.append(strings.Notification_PassportValueAddress) - case .bankStatement, .utilityBill, .rentalAgreement, .passportRegistration, .temporaryRegistration: - if !hasAddress { - typesString.append(strings.Notification_PassportValueProofOfAddress) - hasAddress = true - } - case .phone: - typesString.append(strings.Notification_PassportValuePhone) - case .email: - typesString.append(strings.Notification_PassportValueEmail) - } - } - attributedString = NSAttributedString(string: strings.Notification_PassportValuesSentMessage(message.peers[message.id.peerId]?.compactDisplayTitle ?? "", typesString).0, font: titleFont, textColor: primaryTextColor) - case .peerJoined: - attributedString = addAttributesToStringWithRanges(strings.Notification_Joined(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) - case .phoneNumberRequest: - attributedString = nil - case .unknown: - attributedString = nil - } - - break - } else if let expiredMedia = media as? TelegramMediaExpiredContent { - switch expiredMedia.data { - case .image: - attributedString = NSAttributedString(string: strings.Message_ImageExpired, font: titleFont, textColor: primaryTextColor) - case .file: - attributedString = NSAttributedString(string: strings.Message_VideoExpired, font: titleFont, textColor: primaryTextColor) - } - } - } - - return attributedString + return universalServiceMessageString(presentationData: (theme.theme, theme.wallpaper), strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId) } class ChatMessageActionBubbleContentNode: ChatMessageBubbleContentNode { diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 01dfdd07ff..dc2f9fce4e 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -11,6 +11,7 @@ import AccountContext import TemporaryCachedPeerDataManager import LocalizedPeerData import ContextUI +import TelegramUniversalVideoContent private func contentNodeMessagesAndClassesForItem(_ item: ChatMessageItem) -> [(Message, AnyClass)] { var result: [(Message, AnyClass)] = [] diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift index 7c3b78467c..740746abae 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import AccountContext import RadialStatusNode import PhotoResources +import TelegramStringFormatting private struct FetchControls { let fetch: () -> Void diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveInstantVideoNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveInstantVideoNode.swift index 38fc887aab..8f5fe2d7bb 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveInstantVideoNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveInstantVideoNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import AccountContext import RadialStatusNode import PhotoResources +import TelegramUniversalVideoContent struct ChatMessageInstantVideoItemLayoutResult { let contentSize: CGSize diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift index f92661e87c..9129113bcf 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveMediaNode.swift @@ -13,6 +13,9 @@ import AccountContext import RadialStatusNode import StickerResources import PhotoResources +import TelegramUniversalVideoContent +import TelegramStringFormatting +import GalleryUI private struct FetchControls { let fetch: (Bool) -> Void @@ -27,6 +30,15 @@ enum InteractiveMediaNodeSizeCalculation { enum InteractiveMediaNodeContentMode { case aspectFit case aspectFill + + var bubbleVideoDecorationContentMode: ChatBubbleVideoDecorationContentMode { + switch self { + case .aspectFit: + return .aspectFit + case .aspectFill: + return .aspectFill + } + } } enum InteractiveMediaNodeActivateContent { @@ -46,7 +58,7 @@ enum InteractiveMediaNodePlayWithSoundMode { case loop } -final class ChatMessageInteractiveMediaNode: ASDisplayNode { +final class ChatMessageInteractiveMediaNode: ASDisplayNode, GalleryItemTransitionNode { private let imageNode: TransformImageNode private var currentImageArguments: TransformImageArguments? private var videoNode: UniversalVideoNode? @@ -54,6 +66,9 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode { private var animatedStickerNode: AnimatedStickerNode? private var statusNode: RadialStatusNode? var videoNodeDecoration: ChatBubbleVideoDecoration? + var decoration: UniversalVideoDecoration? { + return self.videoNodeDecoration + } private var badgeNode: ChatMessageInteractiveMediaBadge? private var tapRecognizer: UITapGestureRecognizer? @@ -131,6 +146,10 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode { self.secretTimer?.invalidate() } + func isAvailableForGalleryTransition() -> Bool { + return self.automaticPlayback ?? false + } + override func didLoad() { super.didLoad() @@ -646,7 +665,7 @@ final class ChatMessageInteractiveMediaNode: ASDisplayNode { } if currentReplaceVideoNode, let updatedVideoFile = updateVideoFile { - let decoration = ChatBubbleVideoDecoration(corners: arguments.corners, nativeSize: nativeSize, contentMode: contentMode, backgroundColor: arguments.emptyColor ?? .black) + let decoration = ChatBubbleVideoDecoration(corners: arguments.corners, nativeSize: nativeSize, contentMode: contentMode.bubbleVideoDecorationContentMode, backgroundColor: arguments.emptyColor ?? .black) strongSelf.videoNodeDecoration = decoration let mediaManager = context.sharedContext.mediaManager diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift index bd7c636445..3cda6cfff0 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageInvoiceBubbleContentNode.swift @@ -6,6 +6,7 @@ import AsyncDisplayKit import SwiftSignalKit import TelegramCore import TelegramUIPreferences +import TelegramStringFormatting private let titleFont: UIFont = Font.semibold(15.0) private let textFont: UIFont = Font.regular(15.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift b/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift index 1ec6417a4f..0baa0eac9b 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageNotificationItem.swift @@ -12,6 +12,7 @@ import AccountContext import LocalizedPeerData import StickerResources import PhotoResources +import TelegramStringFormatting public final class ChatMessageNotificationItem: NotificationItem { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift index eaa7e7e7ce..17ba4bbad9 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageReplyInfoNode.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import AccountContext import LocalizedPeerData import PhotoResources +import TelegramStringFormatting private let titleFont = Font.medium(14.0) private let textFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageSelectionInputPanelNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageSelectionInputPanelNode.swift index bbb17d3b03..673045d211 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageSelectionInputPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageSelectionInputPanelNode.swift @@ -6,6 +6,7 @@ import Postbox import TelegramCore import SwiftSignalKit import TelegramPresentationData +import AccountContext final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { private let deleteButton: HighlightableButtonNode @@ -33,7 +34,7 @@ final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { } self.canDeleteMessagesDisposable.set(nil) } else if let context = self.context { - self.canDeleteMessagesDisposable.set((chatAvailableMessageActions(postbox: context.account.postbox, accountPeerId: context.account.peerId, messageIds: self.selectedMessages) + self.canDeleteMessagesDisposable.set((context.sharedContext.chatAvailableMessageActions(postbox: context.account.postbox, accountPeerId: context.account.peerId, messageIds: self.selectedMessages) |> deliverOnMainQueue).start(next: { [weak self] actions in if let strongSelf = self { strongSelf.actions = actions diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift index 8551c08d08..5b18ac9aa0 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageTextBubbleContentNode.swift @@ -6,6 +6,7 @@ import TelegramCore import Postbox import TextFormat import UrlEscaping +import TelegramUniversalVideoContent private final class CachedChatMessageText { let text: String diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift index 5f12057862..a5c625329c 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageWebpageBubbleContentNode.swift @@ -8,23 +8,7 @@ import TelegramCore import TelegramUIPreferences import TextFormat import AccountContext - -enum WebsiteType { - case generic - case twitter - case instagram -} - -func websiteType(of webpage: TelegramMediaWebpageLoadedContent) -> WebsiteType { - if let websiteName = webpage.websiteName?.lowercased() { - if websiteName == "twitter" { - return .twitter - } else if websiteName == "instagram" { - return .instagram - } - } - return .generic -} +import WebsiteType enum InstantPageType { case generic @@ -36,7 +20,7 @@ func instantPageType(of webpage: TelegramMediaWebpageLoadedContent) -> InstantPa return .album } - switch websiteType(of: webpage) { + switch websiteType(of: webpage.websiteName) { case .instagram, .twitter: return .album default: @@ -206,7 +190,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { var actionTitle: String? if let webpage = webPageContent { - let type = websiteType(of: webpage) + let type = websiteType(of: webpage.websiteName) if let websiteName = webpage.websiteName, !websiteName.isEmpty { title = websiteName @@ -390,7 +374,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { if mention.hasPrefix("@") { mention = String(mention[mention.index(after: mention.startIndex)...]) } - switch websiteType(of: content) { + switch websiteType(of: content.websiteName) { case .twitter: return .url(url: "https://twitter.com/\(mention)", concealed: false) case .instagram: @@ -405,7 +389,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { if hashtag.hasPrefix("#") { hashtag = String(hashtag[hashtag.index(after: hashtag.startIndex)...]) } - switch websiteType(of: content) { + switch websiteType(of: content.websiteName) { case .twitter: return .url(url: "https://twitter.com/hashtag/\(hashtag)", concealed: false) case .instagram: @@ -420,7 +404,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { if let webPage = self.webPage, case let .Loaded(content) = webPage.content { if content.instantPage != nil { - switch websiteType(of: content) { + switch websiteType(of: content.websiteName) { case .instagram, .twitter: return .none default: diff --git a/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift b/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift index c89c2c2981..73727d4f0e 100644 --- a/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatPinnedMessageTitlePanelNode.swift @@ -10,6 +10,7 @@ import TelegramUIPreferences import AccountContext import StickerResources import PhotoResources +import TelegramStringFormatting final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift index daf69c7266..13fd1e3037 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift @@ -11,6 +11,7 @@ import SafariServices import AccountContext import TemporaryCachedPeerDataManager import AlertUI +import OpenInExternalAppUI private final class ChatRecentActionsListOpaqueState { let entries: [ChatRecentActionsEntry] @@ -656,7 +657,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { if peer is TelegramChannel, let navigationController = strongSelf.getNavigationController() { navigateToChatController(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer.id), animated: true) } else { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { strongSelf.pushController(infoController) } } @@ -678,7 +679,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { |> deliverOnMainQueue).start(next: { [weak self] peer in if let strongSelf = self { if let peer = peer { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { strongSelf.pushController(infoController) } } @@ -760,7 +761,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { switch result { case let .externalUrl(url): if let navigationController = strongSelf.getNavigationController() { - openExternalUrl(context: strongSelf.context, url: url, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { self?.view.endEditing(true) }) } diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsSearchNavigationContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsSearchNavigationContentNode.swift index ea9d1339ec..5d85b5ad79 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsSearchNavigationContentNode.swift @@ -5,6 +5,7 @@ import Display import Postbox import TelegramCore import TelegramPresentationData +import SearchBarNode private let searchBarFont = Font.regular(17.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatSearchNavigationContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatSearchNavigationContentNode.swift index 65cc4cfa0a..17f3743ca1 100644 --- a/submodules/TelegramUI/TelegramUI/ChatSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatSearchNavigationContentNode.swift @@ -5,6 +5,7 @@ import Display import Postbox import TelegramCore import TelegramPresentationData +import SearchBarNode private let searchBarFont = Font.regular(17.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatSlowmodeHintController.swift b/submodules/TelegramUI/TelegramUI/ChatSlowmodeHintController.swift index 5c671f62f2..fad91ee725 100644 --- a/submodules/TelegramUI/TelegramUI/ChatSlowmodeHintController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatSlowmodeHintController.swift @@ -2,6 +2,7 @@ import Foundation import Display import TelegramPresentationData import SwiftSignalKit +import TelegramStringFormatting private func timeoutValue(strings: PresentationStrings, slowmodeState: ChatSlowmodeState) -> String { switch slowmodeState.variant { diff --git a/submodules/TelegramUI/TelegramUI/ChatTextInputSlowmodePlaceholderNode.swift b/submodules/TelegramUI/TelegramUI/ChatTextInputSlowmodePlaceholderNode.swift index 116aae2055..4dbdd5f730 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTextInputSlowmodePlaceholderNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTextInputSlowmodePlaceholderNode.swift @@ -2,6 +2,7 @@ import Foundation import Display import SwiftSignalKit import TelegramPresentationData +import TelegramStringFormatting final class ChatTextInputSlowmodePlaceholderNode: ASDisplayNode { private var theme: PresentationTheme diff --git a/submodules/TelegramUI/TelegramUI/ComposeControllerNode.swift b/submodules/TelegramUI/TelegramUI/ComposeControllerNode.swift index 3439974240..dd4d116f79 100644 --- a/submodules/TelegramUI/TelegramUI/ComposeControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ComposeControllerNode.swift @@ -6,6 +6,7 @@ import TelegramCore import SwiftSignalKit import TelegramPresentationData import AccountContext +import SearchBarNode final class ComposeControllerNode: ASDisplayNode { let contactListNode: ContactListNode diff --git a/submodules/TelegramUI/TelegramUI/ContactSelectionControllerNode.swift b/submodules/TelegramUI/TelegramUI/ContactSelectionControllerNode.swift index 08a17a1356..2801ca1793 100644 --- a/submodules/TelegramUI/TelegramUI/ContactSelectionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ContactSelectionControllerNode.swift @@ -6,6 +6,7 @@ import TelegramCore import SwiftSignalKit import TelegramPresentationData import AccountContext +import SearchBarNode final class ContactSelectionControllerNode: ASDisplayNode { var displayProgress: Bool = false { diff --git a/submodules/TelegramUI/TelegramUI/ContactsController.swift b/submodules/TelegramUI/TelegramUI/ContactsController.swift index 28a26e95ad..ace886deb4 100644 --- a/submodules/TelegramUI/TelegramUI/ContactsController.swift +++ b/submodules/TelegramUI/TelegramUI/ContactsController.swift @@ -253,7 +253,7 @@ public class ContactsController: ViewController { self.contactsNode.contactListNode.openPrivacyPolicy = { [weak self] in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, urlContext: .generic, url: "https://telegram.org/privacy", forceExternal: true, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: "https://telegram.org/privacy", forceExternal: true, presentationData: strongSelf.presentationData, navigationController: strongSelf.navigationController as? NavigationController, dismissInput: {}) } } @@ -527,7 +527,7 @@ public class ContactsController: ViewController { return } if let peer = peer { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } } else { diff --git a/submodules/TelegramUI/TelegramUI/ContactsControllerNode.swift b/submodules/TelegramUI/TelegramUI/ContactsControllerNode.swift index bb1a44cf79..5844b4d194 100644 --- a/submodules/TelegramUI/TelegramUI/ContactsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ContactsControllerNode.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import TelegramUIPreferences import DeviceAccess import AccountContext +import SearchBarNode private final class ContactsControllerNodeView: UITracingLayerView, PreviewingHostView { var previewingDelegate: PreviewingHostViewDelegate? { diff --git a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift index d2681f9b47..5b50078d8b 100644 --- a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift @@ -9,6 +9,7 @@ import LegacyComponents import ItemListUI import AccountContext import AlertUI +import LegacyUI private struct CreateChannelArguments { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift index e34acc7312..092362ef85 100644 --- a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift @@ -12,6 +12,7 @@ import AccountContext import AlertUI import MediaResources import PhotoResources +import LegacyUI public enum CreateGroupMode { case generic diff --git a/submodules/TelegramUI/TelegramUI/CustomWallpaperPicker.swift b/submodules/TelegramUI/TelegramUI/CustomWallpaperPicker.swift index b6c9fe9ca1..6a8203e108 100644 --- a/submodules/TelegramUI/TelegramUI/CustomWallpaperPicker.swift +++ b/submodules/TelegramUI/TelegramUI/CustomWallpaperPicker.swift @@ -8,6 +8,7 @@ import LegacyComponents import TelegramUIPreferences import MediaResources import AccountContext +import LegacyUI func presentCustomWallpaperPicker(context: AccountContext, present: @escaping (ViewController) -> Void) { let presentationData = context.sharedContext.currentPresentationData.with { $0 } diff --git a/submodules/TelegramUI/TelegramUI/DeviceContactInfoController.swift b/submodules/TelegramUI/TelegramUI/DeviceContactInfoController.swift index 43f5a69b7e..74f636f99d 100644 --- a/submodules/TelegramUI/TelegramUI/DeviceContactInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/DeviceContactInfoController.swift @@ -1277,7 +1277,7 @@ public func deviceContactInfoController(context: AccountContext, subject: Device guard let controller = controller else { return } - openExternalUrl(context: context, url: url, presentationData: context.sharedContext.currentPresentationData.with { $0 }, navigationController: controller.navigationController as? NavigationController, dismissInput: { [weak controller] in + context.sharedContext.openExternalUrl(context: context, urlContext: .generic, url: url, forceExternal: false, presentationData: context.sharedContext.currentPresentationData.with { $0 }, navigationController: controller.navigationController as? NavigationController, dismissInput: { [weak controller] in controller?.view.endEditing(true) }) } diff --git a/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift b/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift index 3793b55ae8..7cf219a885 100644 --- a/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/EditAccessoryPanelNode.swift @@ -11,6 +11,7 @@ import ActivityIndicator import AccountContext import RadialStatusNode import PhotoResources +import TelegramStringFormatting final class EditAccessoryPanelNode: AccessoryPanelNode { let messageId: MessageId diff --git a/submodules/TelegramUI/TelegramUI/EditSettingsController.swift b/submodules/TelegramUI/TelegramUI/EditSettingsController.swift index cbb9c6cca9..1c82330411 100644 --- a/submodules/TelegramUI/TelegramUI/EditSettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/EditSettingsController.swift @@ -9,6 +9,8 @@ import LegacyComponents import TelegramPresentationData import ItemListUI import AccountContext +import GalleryUI +import LegacyUI private struct EditSettingsItemArguments { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/FetchPhotoLibraryImageResource.swift b/submodules/TelegramUI/TelegramUI/FetchPhotoLibraryImageResource.swift index 62601bdc58..f8c647d057 100644 --- a/submodules/TelegramUI/TelegramUI/FetchPhotoLibraryImageResource.swift +++ b/submodules/TelegramUI/TelegramUI/FetchPhotoLibraryImageResource.swift @@ -3,6 +3,7 @@ import UIKit import Photos import Postbox import SwiftSignalKit +import ImageCompression private final class RequestId { var id: PHImageRequestID? diff --git a/submodules/TelegramUI/TelegramUI/GalleryControllerPresentationState.swift b/submodules/TelegramUI/TelegramUI/GalleryControllerPresentationState.swift deleted file mode 100644 index 9a99a73551..0000000000 --- a/submodules/TelegramUI/TelegramUI/GalleryControllerPresentationState.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -final class GalleryControllerPresentationState { - let footerContentNode: GalleryFooterContentNode? - - init() { - self.footerContentNode = nil - } - - init(footerContentNode: GalleryFooterContentNode?) { - self.footerContentNode = footerContentNode - } - - func withUpdatedFooterContentNode(_ footerContentNode: GalleryFooterContentNode?) -> GalleryControllerPresentationState { - return GalleryControllerPresentationState(footerContentNode: footerContentNode) - } -} diff --git a/submodules/TelegramUI/TelegramUI/GalleryFooterContentNode.swift b/submodules/TelegramUI/TelegramUI/GalleryFooterContentNode.swift deleted file mode 100644 index 7e8b79232d..0000000000 --- a/submodules/TelegramUI/TelegramUI/GalleryFooterContentNode.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import UIKit -import AsyncDisplayKit -import Display -import SwiftSignalKit - -final class GalleryControllerInteraction { - let presentController: (ViewController, ViewControllerPresentationArguments?) -> Void - let dismissController: () -> Void - let replaceRootController: (ViewController, ValuePromise?) -> Void - - init(presentController: @escaping (ViewController, ViewControllerPresentationArguments?) -> Void, dismissController: @escaping () -> Void, replaceRootController: @escaping (ViewController, ValuePromise?) -> Void) { - self.presentController = presentController - self.dismissController = dismissController - self.replaceRootController = replaceRootController - } -} - -open class GalleryFooterContentNode: ASDisplayNode { - var requestLayout: ((ContainedViewLayoutTransition) -> Void)? - var controllerInteraction: GalleryControllerInteraction? - - func updateLayout(size: CGSize, metrics: LayoutMetrics, leftInset: CGFloat, rightInset: CGFloat, bottomInset: CGFloat, contentInset: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat { - return 0.0 - } - - func animateIn(fromHeight: CGFloat, previousContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition) { - } - - func animateOut(toHeight: CGFloat, nextContentNode: GalleryFooterContentNode, transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) { - completion() - } -} diff --git a/submodules/TelegramUI/TelegramUI/GalleryItem.swift b/submodules/TelegramUI/TelegramUI/GalleryItem.swift deleted file mode 100644 index 5782d35642..0000000000 --- a/submodules/TelegramUI/TelegramUI/GalleryItem.swift +++ /dev/null @@ -1,25 +0,0 @@ -import Foundation - -struct GalleryItemOriginData: Equatable { - let title: String? - let timestamp: Int32? - - static func ==(lhs: GalleryItemOriginData, rhs: GalleryItemOriginData) -> Bool { - return lhs.title == rhs.title && lhs.timestamp == rhs.timestamp - } -} - -struct GalleryItemIndexData: Equatable { - let position: Int32 - let totalCount: Int32 - - static func ==(lhs: GalleryItemIndexData, rhs: GalleryItemIndexData) -> Bool { - return lhs.position == rhs.position && lhs.totalCount == rhs.totalCount - } -} - -protocol GalleryItem { - func node() -> GalleryItemNode - func updateNode(node: GalleryItemNode) - func thumbnailItem() -> (Int64, GalleryThumbnailItem)? -} diff --git a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift index 682f55cb73..290c0f3420 100644 --- a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift @@ -18,6 +18,8 @@ import ShareController import AlertUI import MediaResources import PhotoResources +import GalleryUI +import LegacyUI private final class GroupInfoArguments { let context: AccountContext @@ -564,7 +566,7 @@ private enum GroupInfoEntry: ItemListNodeEntry { })) } return ItemListPeerItem(theme: theme, strings: strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: nameDisplayOrder, account: arguments.context.account, peer: peer, presence: presence, text: .presence, label: label == nil ? .none : .text(label!), editing: editing, revealOptions: ItemListPeerItemRevealOptions(options: options), switchValue: nil, enabled: enabled, selectable: selectable, sectionId: self.section, action: { - if let infoController = peerInfoController(context: arguments.context, peer: peer), selectable { + if let infoController = arguments.context.sharedContext.makePeerInfoController(context: arguments.context, peer: peer), selectable { arguments.pushController(infoController) } }, setPeerIdWithRevealedOptions: { peerId, fromPeerId in @@ -2238,7 +2240,7 @@ public func groupInfoController(context: AccountContext, peerId originalPeerId: return state.withUpdatedSearchingMembers(false) } }, openPeer: { peer, _ in - if let infoController = peerInfoController(context: context, peer: peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: peer) { arguments.pushController(infoController) } }, present: { c, a in diff --git a/submodules/TelegramUI/TelegramUI/GroupInfoSearchNavigationContentNode.swift b/submodules/TelegramUI/TelegramUI/GroupInfoSearchNavigationContentNode.swift index b9969d598e..d611b6ca0d 100644 --- a/submodules/TelegramUI/TelegramUI/GroupInfoSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/GroupInfoSearchNavigationContentNode.swift @@ -6,6 +6,7 @@ import Postbox import TelegramCore import TelegramPresentationData import ItemListUI +import SearchBarNode private let searchBarFont = Font.regular(17.0) diff --git a/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift b/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift index 5364e290e0..bc29ecdd14 100755 --- a/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/HorizontalStickerGridItem.swift @@ -6,6 +6,7 @@ import SwiftSignalKit import AsyncDisplayKit import Postbox import StickerResources +import AccountContext final class HorizontalStickerGridItem: GridItem { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/InstantImageGalleryItem.swift b/submodules/TelegramUI/TelegramUI/InstantImageGalleryItem.swift index c9068f18ac..2f7527fe8e 100644 --- a/submodules/TelegramUI/TelegramUI/InstantImageGalleryItem.swift +++ b/submodules/TelegramUI/TelegramUI/InstantImageGalleryItem.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramPresentationData import AccountContext import PhotoResources +import GalleryUI private struct InstantImageGalleryThumbnailItem: GalleryThumbnailItem { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/InstantPageControllerNode.swift b/submodules/TelegramUI/TelegramUI/InstantPageControllerNode.swift index 8ab4935618..1ed0447a06 100644 --- a/submodules/TelegramUI/TelegramUI/InstantPageControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/InstantPageControllerNode.swift @@ -11,6 +11,8 @@ import TelegramUIPreferences import AccountContext import ShareController import SaveToCameraRoll +import GalleryUI +import OpenInExternalAppUI final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate { private let context: AccountContext @@ -1187,7 +1189,7 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate { })) } else { strongSelf.loadProgress.set(1.0) - openExternalUrl(context: strongSelf.context, url: externalUrl, presentationData: strongSelf.context.sharedContext.currentPresentationData.with { $0 }, navigationController: strongSelf.getNavigationController(), dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: externalUrl, forceExternal: false, presentationData: strongSelf.context.sharedContext.currentPresentationData.with { $0 }, navigationController: strongSelf.getNavigationController(), dismissInput: { self?.view.endEditing(true) }) } @@ -1207,7 +1209,7 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate { let _ = (strongSelf.context.account.postbox.loadedPeerWithId(peerId) |> deliverOnMainQueue).start(next: { peer in if let strongSelf = self { - if let controller = peerInfoController(context: strongSelf.context, peer: peer) { + if let controller = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { strongSelf.getNavigationController()?.pushViewController(controller) } } @@ -1229,7 +1231,7 @@ final class InstantPageControllerNode: ASDisplayNode, UIScrollViewDelegate { let presentationData = self.context.sharedContext.currentPresentationData.with { $0 } let actionSheet = OpenInActionSheetController(context: self.context, item: .url(url: url.url), openUrl: { [weak self] url in if let strongSelf = self, let navigationController = strongSelf.getNavigationController() { - openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: presentationData, navigationController: navigationController, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: presentationData, navigationController: navigationController, dismissInput: {}) } }) self.present(actionSheet, nil) diff --git a/submodules/TelegramUI/TelegramUI/InstantPageGalleryController.swift b/submodules/TelegramUI/TelegramUI/InstantPageGalleryController.swift index 4e153fac20..064b2f212f 100644 --- a/submodules/TelegramUI/TelegramUI/InstantPageGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/InstantPageGalleryController.swift @@ -9,6 +9,9 @@ import TelegramCore import SafariServices import TelegramPresentationData import AccountContext +import GalleryUI +import TelegramUniversalVideoContent +import OpenInExternalAppUI struct InstantPageGalleryEntryLocation: Equatable { let position: Int32 diff --git a/submodules/TelegramUI/TelegramUI/InstantPageGalleryFooterContentNode.swift b/submodules/TelegramUI/TelegramUI/InstantPageGalleryFooterContentNode.swift index c1acf31c41..1f075d89c6 100644 --- a/submodules/TelegramUI/TelegramUI/InstantPageGalleryFooterContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/InstantPageGalleryFooterContentNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import TextFormat import AccountContext import ShareController +import GalleryUI private let actionImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Accessory Panels/MessageSelectionAction"), color: .white) diff --git a/submodules/TelegramUI/TelegramUI/InstantPagePlayableVideoNode.swift b/submodules/TelegramUI/TelegramUI/InstantPagePlayableVideoNode.swift index b5baba74a5..a96cb1c688 100644 --- a/submodules/TelegramUI/TelegramUI/InstantPagePlayableVideoNode.swift +++ b/submodules/TelegramUI/TelegramUI/InstantPagePlayableVideoNode.swift @@ -8,13 +8,15 @@ import SwiftSignalKit import TelegramPresentationData import AccountContext import RadialStatusNode +import GalleryUI +import TelegramUniversalVideoContent private struct FetchControls { let fetch: (Bool) -> Void let cancel: () -> Void } -final class InstantPagePlayableVideoNode: ASDisplayNode, InstantPageNode { +final class InstantPagePlayableVideoNode: ASDisplayNode, InstantPageNode, GalleryItemTransitionNode { private let context: AccountContext let media: InstantPageMedia private let interactive: Bool @@ -32,6 +34,10 @@ final class InstantPagePlayableVideoNode: ASDisplayNode, InstantPageNode { private var localIsVisible = false + public var decoration: UniversalVideoDecoration? { + return nil + } + init(context: AccountContext, webPage: TelegramMediaWebpage, theme: InstantPageTheme, media: InstantPageMedia, interactive: Bool, openMedia: @escaping (InstantPageMedia) -> Void) { self.context = context self.media = media @@ -76,6 +82,10 @@ final class InstantPagePlayableVideoNode: ASDisplayNode, InstantPageNode { self.fetchedDisposable.dispose() } + func isAvailableForGalleryTransition() -> Bool { + return true + } + override func didLoad() { super.didLoad() diff --git a/submodules/TelegramUI/TelegramUI/InstantPageReferenceControllerNode.swift b/submodules/TelegramUI/TelegramUI/InstantPageReferenceControllerNode.swift index e0902973ce..4443054da7 100644 --- a/submodules/TelegramUI/TelegramUI/InstantPageReferenceControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/InstantPageReferenceControllerNode.swift @@ -8,6 +8,7 @@ import SafariServices import TelegramPresentationData import AccountContext import ShareController +import OpenInExternalAppUI class InstantPageReferenceControllerNode: ViewControllerTracingNode, UIScrollViewDelegate { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/InviteContactsControllerNode.swift b/submodules/TelegramUI/TelegramUI/InviteContactsControllerNode.swift index 1fec2d2e38..50f925ad1d 100644 --- a/submodules/TelegramUI/TelegramUI/InviteContactsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/InviteContactsControllerNode.swift @@ -10,6 +10,7 @@ import TelegramUIPreferences import MergeLists import ActivityIndicator import AccountContext +import SearchBarNode private enum InviteContactsEntryId: Hashable { case option(index: Int) diff --git a/submodules/TelegramUI/TelegramUI/LanguageLinkPreviewController.swift b/submodules/TelegramUI/TelegramUI/LanguageLinkPreviewController.swift index c5d23fae62..ad210a0ce0 100644 --- a/submodules/TelegramUI/TelegramUI/LanguageLinkPreviewController.swift +++ b/submodules/TelegramUI/TelegramUI/LanguageLinkPreviewController.swift @@ -47,7 +47,7 @@ public final class LanguageLinkPreviewController: ViewController { guard let strongSelf = self else { return } - openExternalUrl(context: strongSelf.context, url: url, presentationData: strongSelf.presentationData, navigationController: nil, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: false, presentationData: strongSelf.presentationData, navigationController: nil, dismissInput: { }) }) self.controllerNode.dismiss = { [weak self] in diff --git a/submodules/TelegramUI/TelegramUI/LegacyAttachmentMenu.swift b/submodules/TelegramUI/TelegramUI/LegacyAttachmentMenu.swift index f8b4642a63..1a473abec0 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyAttachmentMenu.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyAttachmentMenu.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramPresentationData import DeviceAccess import AccountContext +import LegacyUI func legacyAttachmentMenu(context: AccountContext, peer: Peer, editMediaOptions: MessageMediaEditingOptions?, saveEditedPhotos: Bool, allowGrouping: Bool, theme: PresentationTheme, strings: PresentationStrings, parentController: LegacyController, recentlyUsedInlineBots: [Peer], initialCaption: String, openGallery: @escaping () -> Void, openCamera: @escaping (TGAttachmentCameraView?, TGMenuSheetController?) -> Void, openFileGallery: @escaping () -> Void, openWebSearch: @escaping () -> Void, openMap: @escaping () -> Void, openContacts: @escaping () -> Void, openPoll: @escaping () -> Void, presentSelectionLimitExceeded: @escaping () -> Void, presentCantSendMultipleFiles: @escaping () -> Void, sendMessagesWithSignals: @escaping ([Any]?, Bool) -> Void, selectRecentlyUsedInlineBot: @escaping (Peer) -> Void) -> TGMenuSheetController { let isSecretChat = peer.id.namespace == Namespaces.Peer.SecretChat diff --git a/submodules/TelegramUI/TelegramUI/LegacyAvatarPicker.swift b/submodules/TelegramUI/TelegramUI/LegacyAvatarPicker.swift index 51f508e795..af833eaf22 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyAvatarPicker.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyAvatarPicker.swift @@ -4,6 +4,7 @@ import Display import SwiftSignalKit import LegacyComponents import TelegramPresentationData +import LegacyUI func presentLegacyAvatarPicker(holder: Atomic, signup: Bool, theme: PresentationTheme, present: (ViewController, Any?) -> Void, openCurrent: (() -> Void)?, completion: @escaping (UIImage) -> Void) { let legacyController = LegacyController(presentation: .custom, theme: theme) diff --git a/submodules/TelegramUI/TelegramUI/LegacyCamera.swift b/submodules/TelegramUI/TelegramUI/LegacyCamera.swift index 629f579189..36a3f2b5bc 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyCamera.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyCamera.swift @@ -7,6 +7,7 @@ import Postbox import SwiftSignalKit import AccountContext import ShareController +import LegacyUI func presentedLegacyCamera(context: AccountContext, peer: Peer, cameraView: TGAttachmentCameraView?, menuController: TGMenuSheetController?, parentController: ViewController, editingMedia: Bool, saveCapturedPhotos: Bool, mediaGrouping: Bool, initialCaption: String, sendMessagesWithSignals: @escaping ([Any]?) -> Void, recognizedQRCode: @escaping (String) -> Void = { _ in }) { let presentationData = context.sharedContext.currentPresentationData.with { $0 } diff --git a/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift b/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift index 925b959177..512b845626 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift @@ -2,6 +2,7 @@ import Foundation import UIKit import Display import TelegramPresentationData +import LegacyUI private final class LegacyICloudFileController: LegacyController, UIDocumentPickerDelegate { let completion: ([URL]) -> Void diff --git a/submodules/TelegramUI/TelegramUI/LegacyImagePicker.swift b/submodules/TelegramUI/TelegramUI/LegacyImagePicker.swift index 34a1b38046..c2ec39a117 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyImagePicker.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyImagePicker.swift @@ -3,6 +3,7 @@ import UIKit import Display import LegacyComponents import TelegramPresentationData +import LegacyUI private final class LegacyImagePickerController: LegacyController, TGLegacyCameraControllerDelegate, TGImagePickerControllerDelegate { private let completion: (UIImage?) -> Void diff --git a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift index e99adc036e..2b85f9d3bf 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift @@ -8,6 +8,8 @@ import TelegramPresentationData import MediaResources import LegacyComponents import AccountContext +import LegacyUI +import ImageCompression final class InstantVideoControllerRecordingStatus { let micLevel: Signal diff --git a/submodules/TelegramUI/TelegramUI/LegacyLocationController.swift b/submodules/TelegramUI/TelegramUI/LegacyLocationController.swift index c9c4541122..9984f2f175 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyLocationController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyLocationController.swift @@ -7,6 +7,8 @@ import Postbox import TelegramPresentationData import AccountContext import ShareController +import LegacyUI +import OpenInExternalAppUI private func generateClearIcon(color: UIColor) -> UIImage? { return generateTintedImage(image: UIImage(bundleImageName: "Components/Search Bar/Clear"), color: color) diff --git a/submodules/TelegramUI/TelegramUI/LegacyLocationPicker.swift b/submodules/TelegramUI/TelegramUI/LegacyLocationPicker.swift index 06965af4f6..1ea8ad789f 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyLocationPicker.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyLocationPicker.swift @@ -7,6 +7,7 @@ import Postbox import SwiftSignalKit import TelegramPresentationData import AccountContext +import LegacyUI private func generateClearIcon(color: UIColor) -> UIImage? { return generateTintedImage(image: UIImage(bundleImageName: "Components/Search Bar/Clear"), color: color) diff --git a/submodules/TelegramUI/TelegramUI/LegacyMediaPickers.swift b/submodules/TelegramUI/TelegramUI/LegacyMediaPickers.swift index 050471558f..64089839c0 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyMediaPickers.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyMediaPickers.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import TelegramUIPrivateModule import DeviceAccess import AccountContext +import ImageCompression func guessMimeTypeByFileExtension(_ ext: String) -> String { return TGMimeTypeMap.mimeType(forExtension: ext) ?? "application/binary" diff --git a/submodules/TelegramUI/TelegramUI/LegacySuggestionContext.swift b/submodules/TelegramUI/TelegramUI/LegacySuggestionContext.swift index 882996a9b8..7f973a7a44 100644 --- a/submodules/TelegramUI/TelegramUI/LegacySuggestionContext.swift +++ b/submodules/TelegramUI/TelegramUI/LegacySuggestionContext.swift @@ -6,6 +6,7 @@ import SwiftSignalKit import TelegramUIPrivateModule import LegacyComponents +import LegacyUI func legacySuggestionContext(account: Account, peerId: PeerId) -> TGSuggestionContext { let context = TGSuggestionContext() diff --git a/submodules/TelegramUI/TelegramUI/LegacyWebSearchEditor.swift b/submodules/TelegramUI/TelegramUI/LegacyWebSearchEditor.swift index 30d9d6b59d..a27dea3ff7 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyWebSearchEditor.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyWebSearchEditor.swift @@ -8,6 +8,7 @@ import SSignalKit import Display import TelegramPresentationData import AccountContext +import LegacyUI func presentLegacyWebSearchEditor(context: AccountContext, theme: PresentationTheme, result: ChatContextResult, initialLayout: ContainerViewLayout?, updateHiddenMedia: @escaping (String?) -> Void, transitionHostView: @escaping () -> UIView?, transitionView: @escaping (ChatContextResult) -> UIView?, completed: @escaping (UIImage) -> Void, present: @escaping (ViewController, Any?) -> Void) { guard let item = legacyWebSearchItem(account: context.account, result: result) else { diff --git a/submodules/TelegramUI/TelegramUI/LegacyWebSearchGallery.swift b/submodules/TelegramUI/TelegramUI/LegacyWebSearchGallery.swift index 579644a68b..f74bab466d 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyWebSearchGallery.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyWebSearchGallery.swift @@ -10,6 +10,7 @@ import Display import TelegramPresentationData import AccountContext import PhotoResources +import LegacyUI class LegacyWebSearchItem: NSObject, TGMediaEditableItem, TGMediaSelectableItem { var isVideo: Bool { diff --git a/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift b/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift index 1a59f61e28..1e0d5259ef 100644 --- a/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ListMessageSnippetItemNode.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import ItemListUI import TextFormat import PhotoResources +import WebsiteType private let titleFont = Font.medium(16.0) private let descriptionFont = Font.regular(14.0) @@ -487,7 +488,7 @@ final class ListMessageSnippetItemNode: ListMessageNode { if let item = self.item, let currentPrimaryUrl = self.currentPrimaryUrl { if let webpage = self.currentMedia as? TelegramMediaWebpage, case let .Loaded(content) = webpage.content { if content.instantPage != nil { - if websiteType(of: content) == .instagram { + if websiteType(of: content.websiteName) == .instagram { if !item.controllerInteraction.openMessage(item.message, .default) { item.controllerInteraction.openInstantPage(item.message, nil) } diff --git a/submodules/TelegramUI/TelegramUI/LocalizationListControllerNode.swift b/submodules/TelegramUI/TelegramUI/LocalizationListControllerNode.swift index 4812ec5537..03250155d7 100644 --- a/submodules/TelegramUI/TelegramUI/LocalizationListControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/LocalizationListControllerNode.swift @@ -10,6 +10,7 @@ import MergeLists import ItemListUI import AccountContext import ShareController +import SearchBarNode private enum LanguageListSection: ItemListSectionId { case official diff --git a/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift b/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift index 6eceadb467..46d4e54d00 100644 --- a/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift +++ b/submodules/TelegramUI/TelegramUI/MediaInputPaneTrendingItem.swift @@ -7,6 +7,7 @@ import Postbox import TelegramCore import TelegramPresentationData import StickerResources +import AccountContext class MediaInputPaneTrendingItem: ListViewItem { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/MediaManager.swift b/submodules/TelegramUI/TelegramUI/MediaManager.swift index c5e4f2be30..7a1f1c7358 100644 --- a/submodules/TelegramUI/TelegramUI/MediaManager.swift +++ b/submodules/TelegramUI/TelegramUI/MediaManager.swift @@ -10,6 +10,7 @@ import TelegramUIPrivateModule import UniversalMediaPlayer import TelegramUIPreferences import AccountContext +import TelegramUniversalVideoContent enum SharedMediaPlayerGroup: Int { case music = 0 diff --git a/submodules/TelegramUI/TelegramUI/MessageContentKind.swift b/submodules/TelegramUI/TelegramUI/MessageContentKind.swift deleted file mode 100644 index e29710d0d2..0000000000 --- a/submodules/TelegramUI/TelegramUI/MessageContentKind.swift +++ /dev/null @@ -1,207 +0,0 @@ -import Foundation -import Postbox -import TelegramCore -import TelegramPresentationData -import TelegramUIPreferences - -public enum MessageContentKindKey { - case text - case image - case video - case videoMessage - case audioMessage - case sticker - case animation - case file - case contact - case game - case location - case liveLocation - case expiredImage - case expiredVideo - case poll -} - -public enum MessageContentKind: Equatable { - case text(String) - case image - case video - case videoMessage - case audioMessage - case sticker(String) - case animation - case file(String) - case contact - case game(String) - case location - case liveLocation - case expiredImage - case expiredVideo - case poll(String) - - public var key: MessageContentKindKey { - switch self { - case .text: - return .text - case .image: - return .image - case .video: - return .video - case .videoMessage: - return .videoMessage - case .audioMessage: - return .audioMessage - case .sticker: - return .sticker - case .animation: - return .animation - case .file: - return .file - case .contact: - return .contact - case .game: - return .game - case .location: - return .location - case .liveLocation: - return .liveLocation - case .expiredImage: - return .expiredImage - case .expiredVideo: - return .expiredVideo - case .poll: - return .poll - } - } -} - -public func messageContentKind(_ message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> MessageContentKind { - for media in message.media { - if let kind = mediaContentKind(media, message: message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId) { - return kind - } - } - return .text(message.text) -} - -public func mediaContentKind(_ media: Media, message: Message? = nil, strings: PresentationStrings? = nil, nameDisplayOrder: PresentationPersonNameOrder? = nil, accountPeerId: PeerId? = nil) -> MessageContentKind? { - switch media { - case let expiredMedia as TelegramMediaExpiredContent: - switch expiredMedia.data { - case .image: - return .expiredImage - case .file: - return .expiredVideo - } - case _ as TelegramMediaImage: - return .image - case let file as TelegramMediaFile: - var fileName: String = "" - for attribute in file.attributes { - switch attribute { - case let .Sticker(text, _, _): - return .sticker(text) - case let .FileName(name): - fileName = name - case let .Audio(isVoice, _, title, performer, _): - if isVoice { - return .audioMessage - } else { - if let title = title, let performer = performer, !title.isEmpty, !performer.isEmpty { - return .file(title + " — " + performer) - } else if let title = title, !title.isEmpty { - return .file(title) - } else if let performer = performer, !performer.isEmpty { - return .file(performer) - } - } - case let .Video(_, _, flags): - if file.isAnimated { - return .animation - } else { - if flags.contains(.instantRoundVideo) { - return .videoMessage - } else { - return .video - } - } - default: - break - } - } - if file.isAnimatedSticker { - return .sticker("") - } - return .file(fileName) - case _ as TelegramMediaContact: - return .contact - case let game as TelegramMediaGame: - return .game(game.title) - case let location as TelegramMediaMap: - if location.liveBroadcastingTimeout != nil { - return .liveLocation - } else { - return .location - } - case _ as TelegramMediaAction: - if let message = message, let strings = strings, let nameDisplayOrder = nameDisplayOrder, let accountPeerId = accountPeerId { - return .text(plainServiceMessageString(strings: strings, nameDisplayOrder: nameDisplayOrder, message: message, accountPeerId: accountPeerId) ?? "") - } else { - return nil - } - case let poll as TelegramMediaPoll: - return .poll(poll.text) - default: - return nil - } -} - -func stringForMediaKind(_ kind: MessageContentKind, strings: PresentationStrings) -> (String, Bool) { - switch kind { - case let .text(text): - return (text, false) - case .image: - return (strings.Message_Photo, true) - case .video: - return (strings.Message_Video, true) - case .videoMessage: - return (strings.Message_VideoMessage, true) - case .audioMessage: - return (strings.Message_Audio, true) - case let .sticker(text): - if text.isEmpty { - return (strings.Message_Sticker, true) - } else { - return (strings.Message_StickerText(text).0, true) - } - case .animation: - return (strings.Message_Animation, true) - case let .file(text): - if text.isEmpty { - return (strings.Message_File, true) - } else { - return (text, true) - } - case .contact: - return (strings.Message_Contact, true) - case let .game(text): - return (text, true) - case .location: - return (strings.Message_Location, true) - case .liveLocation: - return (strings.Message_LiveLocation, true) - case .expiredImage: - return (strings.Message_ImageExpired, true) - case .expiredVideo: - return (strings.Message_VideoExpired, true) - case let .poll(text): - return ("📊 \(text)", false) - } -} - -func descriptionStringForMessage(_ message: Message, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId) -> (String, Bool) { - if !message.text.isEmpty { - return (message.text, false) - } - return stringForMediaKind(messageContentKind(message, strings: strings, nameDisplayOrder: nameDisplayOrder, accountPeerId: accountPeerId), strings: strings) -} diff --git a/submodules/TelegramUI/TelegramUI/MessageUtils.swift b/submodules/TelegramUI/TelegramUI/MessageUtils.swift deleted file mode 100644 index 8d2bc2bd1d..0000000000 --- a/submodules/TelegramUI/TelegramUI/MessageUtils.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation -import Postbox -import TelegramCore - -extension Message { - func effectivelyIncoming(_ accountPeerId: PeerId) -> Bool { - if self.id.peerId == accountPeerId { - if self.forwardInfo != nil { - return true - } else { - return false - } - } else if self.flags.contains(.Incoming) { - return true - } else if let channel = self.peers[self.id.peerId] as? TelegramChannel, case .broadcast = channel.info { - return true - } else { - return false - } - } -} diff --git a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift index 23ad480261..6b0720f497 100644 --- a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift +++ b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift @@ -4,6 +4,7 @@ import Display import TelegramCore import Postbox import AccountContext +import GalleryUI public enum NavigateToChatKeepStack { case `default` diff --git a/submodules/TelegramUI/TelegramUI/NavigationBarSearchContentNode.swift b/submodules/TelegramUI/TelegramUI/NavigationBarSearchContentNode.swift index f36c919d82..4eff481e10 100644 --- a/submodules/TelegramUI/TelegramUI/NavigationBarSearchContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/NavigationBarSearchContentNode.swift @@ -3,6 +3,7 @@ import UIKit import AsyncDisplayKit import Display import TelegramPresentationData +import SearchBarNode private let searchBarFont = Font.regular(17.0) let navigationBarSearchContentHeight: CGFloat = 54.0 diff --git a/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift b/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift index 40f89db61d..a3d06b1dc0 100644 --- a/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift @@ -10,6 +10,7 @@ import TelegramUIPreferences import ItemListUI import MergeLists import AccountContext +import SearchBarNode private final class NotificationExceptionState : Equatable { let mode:NotificationExceptionMode diff --git a/submodules/TelegramUI/TelegramUI/NotificationSearchItem.swift b/submodules/TelegramUI/TelegramUI/NotificationSearchItem.swift index 52b1397a1f..8044b888fa 100644 --- a/submodules/TelegramUI/TelegramUI/NotificationSearchItem.swift +++ b/submodules/TelegramUI/TelegramUI/NotificationSearchItem.swift @@ -6,6 +6,7 @@ import Display import SwiftSignalKit import TelegramPresentationData import ItemListUI +import SearchBarNode private let searchBarFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/TelegramUI/OpenAddContact.swift b/submodules/TelegramUI/TelegramUI/OpenAddContact.swift index 8006231b41..be5fa409a8 100644 --- a/submodules/TelegramUI/TelegramUI/OpenAddContact.swift +++ b/submodules/TelegramUI/TelegramUI/OpenAddContact.swift @@ -15,7 +15,7 @@ func openAddContact(context: AccountContext, firstName: String = "", lastName: S let contactData = DeviceContactExtendedData(basicData: DeviceContactBasicData(firstName: firstName, lastName: lastName, phoneNumbers: [DeviceContactPhoneNumberData(label: label, value: phoneNumber)]), middleName: "", prefix: "", suffix: "", organization: "", jobTitle: "", department: "", emailAddresses: [], urls: [], addresses: [], birthdayDate: nil, socialProfiles: [], instantMessagingProfiles: []) present(deviceContactInfoController(context: context, subject: .create(peer: nil, contactData: contactData, isSharing: false, shareViaException: false, completion: { peer, stableId, contactData in if let peer = peer { - if let infoController = peerInfoController(context: context, peer: peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: peer) { pushController(infoController) } } else { diff --git a/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift b/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift index 7cdc91857c..4ea81106bd 100644 --- a/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift +++ b/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift @@ -9,6 +9,7 @@ import Lottie import TelegramUIPreferences import TelegramPresentationData import AccountContext +import GalleryUI private enum ChatMessageGalleryControllerData { case url(String) diff --git a/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift b/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift index 7c04933a35..d3be4c5613 100644 --- a/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift +++ b/submodules/TelegramUI/TelegramUI/OpenResolvedUrl.swift @@ -8,6 +8,7 @@ import TelegramUIPreferences import AccountContext import OverlayStatusController import AlertUI +import PassportUI private func defaultNavigationForPeerId(_ peerId: PeerId?, navigation: ChatControllerInteractionNavigateToPeer) -> ChatControllerInteractionNavigateToPeer { if case .default = navigation { @@ -29,7 +30,7 @@ func openResolvedUrl(_ resolvedUrl: ResolvedUrl, context: AccountContext, urlCon let presentationData = context.sharedContext.currentPresentationData.with { $0 } switch resolvedUrl { case let .externalUrl(url): - openExternalUrl(context: context, urlContext: urlContext, url: url, presentationData: context.sharedContext.currentPresentationData.with { $0 }, navigationController: navigationController, dismissInput: dismissInput) + context.sharedContext.openExternalUrl(context: context, urlContext: urlContext, url: url, forceExternal: false, presentationData: context.sharedContext.currentPresentationData.with { $0 }, navigationController: navigationController, dismissInput: dismissInput) case let .peer(peerId, navigation): if let peerId = peerId { openPeer(peerId, defaultNavigationForPeerId(peerId, navigation: navigation)) diff --git a/submodules/TelegramUI/TelegramUI/OpenUrl.swift b/submodules/TelegramUI/TelegramUI/OpenUrl.swift index b2ffe26ff3..08467d2db7 100644 --- a/submodules/TelegramUI/TelegramUI/OpenUrl.swift +++ b/submodules/TelegramUI/TelegramUI/OpenUrl.swift @@ -12,6 +12,7 @@ import MtProtoKitDynamic import TelegramPresentationData import AccountContext import UrlEscaping +import PassportUI public struct ParsedSecureIdUrl { public let peerId: PeerId @@ -136,12 +137,7 @@ func formattedConfirmationCode(_ code: Int) -> String { return result } -public enum OpenURLContext { - case generic - case chat -} - -public func openExternalUrl(context: AccountContext, urlContext: OpenURLContext = .generic, url: String, forceExternal: Bool = false, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void) { +func openExternalUrlImpl(context: AccountContext, urlContext: OpenURLContext, url: String, forceExternal: Bool, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void) { if forceExternal || url.lowercased().hasPrefix("tel:") || url.lowercased().hasPrefix("calshow:") { context.sharedContext.applicationBindings.openUrl(url) return @@ -197,7 +193,7 @@ public func openExternalUrl(context: AccountContext, urlContext: OpenURLContext case .info: let _ = (context.account.postbox.loadedPeerWithId(peerId) |> deliverOnMainQueue).start(next: { peer in - if let infoController = peerInfoController(context: context, peer: peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: peer) { context.sharedContext.applicationBindings.dismissNativeController() navigationController?.pushViewController(infoController) } @@ -476,7 +472,7 @@ public func openExternalUrl(context: AccountContext, urlContext: OpenURLContext return transaction.getPeer(PeerId(namespace: Namespaces.Peer.CloudUser, id: idValue)) } |> deliverOnMainQueue).start(next: { peer in - if let peer = peer, let controller = peerInfoController(context: context, peer: peer) { + if let peer = peer, let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer) { navigationController?.pushViewController(controller) } }) diff --git a/submodules/TelegramUI/TelegramUI/PeerAvatarImageGalleryItem.swift b/submodules/TelegramUI/TelegramUI/PeerAvatarImageGalleryItem.swift index 36a18c254f..24f4c11fce 100644 --- a/submodules/TelegramUI/TelegramUI/PeerAvatarImageGalleryItem.swift +++ b/submodules/TelegramUI/TelegramUI/PeerAvatarImageGalleryItem.swift @@ -10,6 +10,7 @@ import AccountContext import RadialStatusNode import ShareController import PhotoResources +import GalleryUI private struct PeerAvatarImageGalleryThumbnailItem: GalleryThumbnailItem { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/PeerInfoController.swift b/submodules/TelegramUI/TelegramUI/PeerInfoController.swift index f841fceaa1..3787ed9c6f 100644 --- a/submodules/TelegramUI/TelegramUI/PeerInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerInfoController.swift @@ -6,7 +6,7 @@ import SwiftSignalKit import TelegramCore import AccountContext -func peerInfoController(context: AccountContext, peer: Peer) -> ViewController? { +func peerInfoControllerImpl(context: AccountContext, peer: Peer) -> ViewController? { if let _ = peer as? TelegramGroup { return groupInfoController(context: context, peerId: peer.id) } else if let channel = peer as? TelegramChannel { diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift index a815b0c166..c92c645e14 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift @@ -12,6 +12,7 @@ import TelegramBaseController import OverlayStatusController import AccountContext import ShareController +import OpenInExternalAppUI public class PeerMediaCollectionController: TelegramBaseController { private var validLayout: ContainerViewLayout? @@ -232,7 +233,7 @@ public class PeerMediaCollectionController: TelegramBaseController { if canOpenIn { let actionSheet = OpenInActionSheetController(context: strongSelf.context, item: .url(url: url), openUrl: { [weak self] url in if let strongSelf = self, let navigationController = strongSelf.navigationController as? NavigationController { - openExternalUrl(context: strongSelf.context, url: url, forceExternal: true, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: url, forceExternal: true, presentationData: strongSelf.presentationData, navigationController: navigationController, dismissInput: { }) } }) @@ -607,7 +608,7 @@ public class PeerMediaCollectionController: TelegramBaseController { |> take(1) |> deliverOnMainQueue).start(next: { [weak self] peer in if let strongSelf = self, peer.restrictionText == nil { - if let infoController = peerInfoController(context: strongSelf.context, peer: peer) { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, peer: peer) { (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) } } @@ -717,7 +718,7 @@ public class PeerMediaCollectionController: TelegramBaseController { func deleteMessages(_ messageIds: Set) { if !messageIds.isEmpty { - self.messageContextDisposable.set((combineLatest(chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: messageIds), self.peer.get() |> take(1)) |> deliverOnMainQueue).start(next: { [weak self] actions, peer in + self.messageContextDisposable.set((combineLatest(self.context.sharedContext.chatAvailableMessageActions(postbox: self.context.account.postbox, accountPeerId: self.context.account.peerId, messageIds: messageIds), self.peer.get() |> take(1)) |> deliverOnMainQueue).start(next: { [weak self] actions, peer in if let strongSelf = self, let peer = peer, !actions.options.isEmpty { let actionSheet = ActionSheetController(presentationTheme: strongSelf.presentationData.theme) var items: [ActionSheetItem] = [] diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift index 4b2a3167c4..d01baaa5e7 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift @@ -7,6 +7,7 @@ import Display import TelegramCore import TelegramPresentationData import AccountContext +import SearchBarNode struct PeerMediaCollectionMessageForGallery { let message: Message diff --git a/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift b/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift index e82e551e23..998ee97a60 100644 --- a/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift @@ -7,6 +7,7 @@ import TelegramCore import SwiftSignalKit import TelegramPresentationData import AccountContext +import SearchBarNode final class PeerSelectionControllerNode: ASDisplayNode { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/PermissionController.swift b/submodules/TelegramUI/TelegramUI/PermissionController.swift index 2e08f837c3..7620502820 100644 --- a/submodules/TelegramUI/TelegramUI/PermissionController.swift +++ b/submodules/TelegramUI/TelegramUI/PermissionController.swift @@ -223,7 +223,7 @@ public final class PermissionController : ViewController { } self.controllerNode.openPrivacyPolicy = { [weak self] in if let strongSelf = self { - openExternalUrl(context: strongSelf.context, urlContext: .generic, url: "https://telegram.org/privacy", forceExternal: true, presentationData: strongSelf.context.sharedContext.currentPresentationData.with { $0 }, navigationController: nil, dismissInput: {}) + strongSelf.context.sharedContext.openExternalUrl(context: strongSelf.context, urlContext: .generic, url: "https://telegram.org/privacy", forceExternal: true, presentationData: strongSelf.context.sharedContext.currentPresentationData.with { $0 }, navigationController: nil, dismissInput: {}) } } } diff --git a/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift b/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift index f07719d5b3..76cd02a9ea 100644 --- a/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/ReplyAccessoryPanelNode.swift @@ -10,6 +10,7 @@ import TelegramUIPreferences import AccountContext import LocalizedPeerData import PhotoResources +import TelegramStringFormatting final class ReplyAccessoryPanelNode: AccessoryPanelNode { private let messageDisposable = MetaDisposable() diff --git a/submodules/TelegramUI/TelegramUI/SearchDisplayController.swift b/submodules/TelegramUI/TelegramUI/SearchDisplayController.swift index 47650157b9..7a4764ec10 100644 --- a/submodules/TelegramUI/TelegramUI/SearchDisplayController.swift +++ b/submodules/TelegramUI/TelegramUI/SearchDisplayController.swift @@ -4,6 +4,7 @@ import AsyncDisplayKit import SwiftSignalKit import Display import TelegramPresentationData +import SearchBarNode enum SearchDisplayControllerMode { case list diff --git a/submodules/TelegramUI/TelegramUI/SecretChatKeyControllerNode.swift b/submodules/TelegramUI/TelegramUI/SecretChatKeyControllerNode.swift index c926a102f9..534623a394 100644 --- a/submodules/TelegramUI/TelegramUI/SecretChatKeyControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/SecretChatKeyControllerNode.swift @@ -156,7 +156,7 @@ final class SecretChatKeyControllerNode: ViewControllerTracingNode { let point = recognizer.location(in: recognizer.view) if let attributes = self.infoNode.attributesAtPoint(point)?.1 { if let url = attributes[NSAttributedString.Key(rawValue: TelegramTextAttributes.URL)] as? String { - openExternalUrl(context: self.context, url: url, presentationData: self.presentationData, navigationController: self.getNavigationController(), dismissInput: { [weak self] in + self.context.sharedContext.openExternalUrl(context: self.context, urlContext: .generic, url: url, forceExternal: false, presentationData: self.presentationData, navigationController: self.getNavigationController(), dismissInput: { [weak self] in self?.view.endEditing(true) }) } diff --git a/submodules/TelegramUI/TelegramUI/SelectivePrivacySettingsPeersController.swift b/submodules/TelegramUI/TelegramUI/SelectivePrivacySettingsPeersController.swift index ab5a8dc6d4..07c54117cc 100644 --- a/submodules/TelegramUI/TelegramUI/SelectivePrivacySettingsPeersController.swift +++ b/submodules/TelegramUI/TelegramUI/SelectivePrivacySettingsPeersController.swift @@ -336,7 +336,7 @@ public func selectivePrivacyPeersController(context: AccountContext, title: Stri return transaction.getPeer(peerId) } |> deliverOnMainQueue).start(next: { peer in - guard let peer = peer, let controller = peerInfoController(context: context, peer: peer) else { + guard let peer = peer, let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer) else { return } pushControllerImpl?(controller) diff --git a/submodules/TelegramUI/TelegramUI/SettingsController.swift b/submodules/TelegramUI/TelegramUI/SettingsController.swift index 91759383a2..6998a136b5 100644 --- a/submodules/TelegramUI/TelegramUI/SettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/SettingsController.swift @@ -20,6 +20,9 @@ import OverlayStatusController import AvatarNode import AlertUI import TelegramNotices +import GalleryUI +import LegacyUI +import PassportUI private let maximumNumberOfAccounts = 3 diff --git a/submodules/TelegramUI/TelegramUI/SettingsSearchItem.swift b/submodules/TelegramUI/TelegramUI/SettingsSearchItem.swift index 5fb47c6429..452de70689 100644 --- a/submodules/TelegramUI/TelegramUI/SettingsSearchItem.swift +++ b/submodules/TelegramUI/TelegramUI/SettingsSearchItem.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import MergeLists import ItemListUI import AccountContext +import SearchBarNode extension NavigationBarSearchContentNode: ItemListControllerSearchNavigationContentNode { func activate() { diff --git a/submodules/TelegramUI/TelegramUI/SettingsSearchableItems.swift b/submodules/TelegramUI/TelegramUI/SettingsSearchableItems.swift index b9a1018b38..96a14ffe95 100644 --- a/submodules/TelegramUI/TelegramUI/SettingsSearchableItems.swift +++ b/submodules/TelegramUI/TelegramUI/SettingsSearchableItems.swift @@ -8,6 +8,7 @@ import TelegramUIPreferences import TelegramCallsUI import OverlayStatusController import AccountContext +import PassportUI private let maximumNumberOfAccounts = 3 diff --git a/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift b/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift index b4863bc731..02c0183a92 100644 --- a/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift +++ b/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift @@ -8,6 +8,7 @@ import TelegramUIPreferences import TelegramUIPrivateModule import AccountContext import ShareController +import LegacyUI private let inForeground = ValuePromise(false, ignoreRepeated: true) diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift index 11cf03d2bb..6edd03df78 100644 --- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift +++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift @@ -8,6 +8,7 @@ import TelegramCallsUI import TelegramUIPreferences import AccountContext import DeviceLocationManager +import LegacyUI private enum CallStatusText: Equatable { case none @@ -932,6 +933,18 @@ public final class SharedAccountContextImpl: SharedAccountContext { } public func handleTextLinkAction(context: AccountContext, peerId: PeerId?, navigateDisposable: MetaDisposable, controller: ViewController, action: TextLinkItemActionType, itemLink: TextLinkItem) { - handleTextLinkActionImpl(context: context as! AccountContext, peerId: peerId, navigateDisposable: navigateDisposable, controller: controller, action: action, itemLink: itemLink) + handleTextLinkActionImpl(context: context, peerId: peerId, navigateDisposable: navigateDisposable, controller: controller, action: action, itemLink: itemLink) + } + + public func makePeerInfoController(context: AccountContext, peer: Peer) -> ViewController? { + return peerInfoControllerImpl(context: context, peer: peer) + } + + public func openExternalUrl(context: AccountContext, urlContext: OpenURLContext, url: String, forceExternal: Bool, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void) { + openExternalUrlImpl(context: context, urlContext: urlContext, url: url, forceExternal: forceExternal, presentationData: presentationData, navigationController: navigationController, dismissInput: dismissInput) + } + + public func chatAvailableMessageActions(postbox: Postbox, accountPeerId: PeerId, messageIds: Set) -> Signal { + return chatAvailableMessageActionsImpl(postbox: postbox, accountPeerId: accountPeerId, messageIds: messageIds) } } diff --git a/submodules/TelegramUI/TelegramUI/SharedMediaPlayer.swift b/submodules/TelegramUI/TelegramUI/SharedMediaPlayer.swift index bae5036426..3bc2b93d30 100644 --- a/submodules/TelegramUI/TelegramUI/SharedMediaPlayer.swift +++ b/submodules/TelegramUI/TelegramUI/SharedMediaPlayer.swift @@ -8,6 +8,7 @@ import TelegramUIPrivateModule import UniversalMediaPlayer import TelegramAudio import AccountContext +import TelegramUniversalVideoContent private enum SharedMediaPlaybackItem: Equatable { case audio(MediaPlayer) diff --git a/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift b/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift index 2273ee3733..b36ba0efa4 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift @@ -6,6 +6,7 @@ import SwiftSignalKit import AsyncDisplayKit import Postbox import StickerResources +import AccountContext final class StickerPackPreviewInteraction { var previewedItem: StickerPreviewPeekItem? diff --git a/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift b/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift index 52b4a044ac..bf7412d1ed 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPaneSearchStickerItem.swift @@ -7,6 +7,7 @@ import AsyncDisplayKit import Postbox import TelegramPresentationData import StickerResources +import AccountContext final class StickerPaneSearchStickerSection: GridSection { let code: String diff --git a/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift b/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift index 02be966b82..87302c1b54 100644 --- a/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickersChatInputContextPanelItem.swift @@ -7,6 +7,7 @@ import SwiftSignalKit import Postbox import TelegramPresentationData import StickerResources +import AccountContext final class StickersChatInputContextPanelItem: ListViewItem { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift b/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift index 8a64dcf7f5..b9b8f61373 100644 --- a/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift +++ b/submodules/TelegramUI/TelegramUI/TelegramAccountAuxiliaryMethods.swift @@ -2,6 +2,8 @@ import Foundation import TelegramCore import Postbox import MediaResources +import PassportUI +import OpenInExternalAppUI public let telegramAccountAuxiliaryMethods = AccountAuxiliaryMethods(updatePeerChatInputState: { interfaceState, inputState -> PeerChatInterfaceState? in if interfaceState == nil { diff --git a/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift b/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift index 439a06f2b5..ef4a9718ae 100644 --- a/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift +++ b/submodules/TelegramUI/TelegramUI/TextLinkHandling.swift @@ -8,6 +8,7 @@ import TelegramUIPreferences import AccountContext import AccountContext import SafariServices +import OpenInExternalAppUI func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigateDisposable: MetaDisposable, controller: ViewController, action: TextLinkItemActionType, itemLink: TextLinkItem) { let presentImpl: (ViewController, Any?) -> Void = { controllerToPresent, _ in @@ -26,7 +27,7 @@ func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigate peerSignal = context.account.postbox.loadedPeerWithId(peerId) |> map(Optional.init) navigateDisposable.set((peerSignal |> take(1) |> deliverOnMainQueue).start(next: { peer in if let controller = controller, let peer = peer { - if let infoController = peerInfoController(context: context, peer: peer) { + if let infoController = context.sharedContext.makePeerInfoController(context: context, peer: peer) { (controller.navigationController as? NavigationController)?.pushViewController(infoController) } } diff --git a/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift b/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift index 217d295ab0..b3cb8b4198 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift @@ -11,6 +11,7 @@ import TelegramUIPreferences import MergeLists import ItemListUI import AccountContext +import SearchBarNode private func areWallpapersEqual(_ lhs: TelegramWallpaper, _ rhs: TelegramWallpaper) -> Bool { switch lhs { diff --git a/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift b/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift index 57a1613f0d..ac7c45df45 100644 --- a/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift +++ b/submodules/TelegramUI/TelegramUI/TransformOutgoingMessageMedia.swift @@ -5,6 +5,7 @@ import Postbox import SwiftSignalKit import Display import PhotoResources +import ImageCompression public func transformOutgoingMessageMedia(postbox: Postbox, network: Network, media: AnyMediaReference, opportunistic: Bool) -> Signal { switch media.media { diff --git a/submodules/TelegramUI/TelegramUI/TwoStepVerificationUnlockController.swift b/submodules/TelegramUI/TelegramUI/TwoStepVerificationUnlockController.swift index a70fcdaafd..e3bb7edafd 100644 --- a/submodules/TelegramUI/TelegramUI/TwoStepVerificationUnlockController.swift +++ b/submodules/TelegramUI/TelegramUI/TwoStepVerificationUnlockController.swift @@ -10,6 +10,7 @@ import TextFormat import OverlayStatusController import AccountContext import AlertUI +import PasswordSetupUI private final class TwoStepVerificationUnlockSettingsControllerArguments { let updatePasswordText: (String) -> Void diff --git a/submodules/TelegramUI/TelegramUI/UserInfoController.swift b/submodules/TelegramUI/TelegramUI/UserInfoController.swift index eb78e9fccb..0b3304f731 100644 --- a/submodules/TelegramUI/TelegramUI/UserInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/UserInfoController.swift @@ -16,6 +16,7 @@ import AccountContext import ShareController import AlertUI import TelegramNotices +import GalleryUI private final class UserInfoControllerArguments { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift index d872bea902..7611d47d9d 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift @@ -12,6 +12,7 @@ import TelegramUIPreferences import MediaResources import AccountContext import ShareController +import GalleryUI enum WallpaperListType { case wallpapers(WallpaperPresentationOptions?) diff --git a/submodules/TelegramUI/TelegramUI/WallpaperGalleryItem.swift b/submodules/TelegramUI/TelegramUI/WallpaperGalleryItem.swift index b8e5f9feb3..c5c0cbc0a2 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperGalleryItem.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperGalleryItem.swift @@ -13,6 +13,7 @@ import MediaResources import AccountContext import RadialStatusNode import PhotoResources +import GalleryUI struct WallpaperGalleryItemArguments { let colorPreview: Bool diff --git a/submodules/TelegramUI/TelegramUI/WatchBridge.swift b/submodules/TelegramUI/TelegramUI/WatchBridge.swift index 2f00e639d0..cbde428415 100644 --- a/submodules/TelegramUI/TelegramUI/WatchBridge.swift +++ b/submodules/TelegramUI/TelegramUI/WatchBridge.swift @@ -3,6 +3,7 @@ import Postbox import TelegramCore import WatchCommon import TelegramPresentationData +import LegacyUI func makePeerIdFromBridgeIdentifier(_ identifier: Int64) -> PeerId? { if identifier < 0 && identifier > Int32.min { diff --git a/submodules/TelegramUI/TelegramUI/WatchRequestHandlers.swift b/submodules/TelegramUI/TelegramUI/WatchRequestHandlers.swift index 75e6277cc9..37c148ee5f 100644 --- a/submodules/TelegramUI/TelegramUI/WatchRequestHandlers.swift +++ b/submodules/TelegramUI/TelegramUI/WatchRequestHandlers.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import AvatarNode import StickerResources import PhotoResources +import AccountContext let allWatchRequestHandlers: [AnyClass] = [ WatchChatListHandler.self, diff --git a/submodules/TelegramUI/TelegramUI/WebSearchControllerNode.swift b/submodules/TelegramUI/TelegramUI/WebSearchControllerNode.swift index f84d5b2caf..b13f794ad2 100644 --- a/submodules/TelegramUI/TelegramUI/WebSearchControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/WebSearchControllerNode.swift @@ -10,12 +10,13 @@ import TelegramPresentationData import TelegramUIPreferences import MergeLists import AccountContext +import GalleryUI private struct WebSearchContextResultStableId: Hashable { let result: ChatContextResult - var hashValue: Int { - return result.id.hashValue + func hash(into hasher: inout Hasher) { + hasher.combine(result.id) } static func ==(lhs: WebSearchContextResultStableId, rhs: WebSearchContextResultStableId) -> Bool { diff --git a/submodules/TelegramUI/TelegramUI/WebSearchGalleryController.swift b/submodules/TelegramUI/TelegramUI/WebSearchGalleryController.swift index 5a71aa03b7..776a41727b 100644 --- a/submodules/TelegramUI/TelegramUI/WebSearchGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/WebSearchGalleryController.swift @@ -9,6 +9,8 @@ import TelegramCore import LegacyComponents import TelegramPresentationData import AccountContext +import GalleryUI +import TelegramUniversalVideoContent final class WebSearchGalleryControllerInteraction { let dismiss: (Bool) -> Void diff --git a/submodules/TelegramUI/TelegramUI/WebSearchGalleryFooterContentNode.swift b/submodules/TelegramUI/TelegramUI/WebSearchGalleryFooterContentNode.swift index 2537b2658f..7ae115385e 100644 --- a/submodules/TelegramUI/TelegramUI/WebSearchGalleryFooterContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/WebSearchGalleryFooterContentNode.swift @@ -8,6 +8,7 @@ import SwiftSignalKit import LegacyComponents import TelegramPresentationData import AccountContext +import GalleryUI final class WebSearchGalleryFooterContentNode: GalleryFooterContentNode { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/WebSearchNavigationContentNode.swift b/submodules/TelegramUI/TelegramUI/WebSearchNavigationContentNode.swift index 61478a8857..0b59b3bada 100644 --- a/submodules/TelegramUI/TelegramUI/WebSearchNavigationContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/WebSearchNavigationContentNode.swift @@ -5,6 +5,7 @@ import Display import Postbox import TelegramCore import TelegramPresentationData +import SearchBarNode private let searchBarFont = Font.regular(17.0) diff --git a/submodules/TelegramUI/TelegramUI/WebSearchVideoGalleryItem.swift b/submodules/TelegramUI/TelegramUI/WebSearchVideoGalleryItem.swift index 0e2dfea1b3..f6b3fdb528 100644 --- a/submodules/TelegramUI/TelegramUI/WebSearchVideoGalleryItem.swift +++ b/submodules/TelegramUI/TelegramUI/WebSearchVideoGalleryItem.swift @@ -8,6 +8,9 @@ import Postbox import TelegramPresentationData import AccountContext import RadialStatusNode +import GalleryUI +import TelegramUniversalVideoContent +import GalleryUI class WebSearchVideoGalleryItem: GalleryItem { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/WebpagePreviewAccessoryPanelNode.swift b/submodules/TelegramUI/TelegramUI/WebpagePreviewAccessoryPanelNode.swift index 7a6d1c6272..c573482058 100644 --- a/submodules/TelegramUI/TelegramUI/WebpagePreviewAccessoryPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/WebpagePreviewAccessoryPanelNode.swift @@ -7,6 +7,7 @@ import SwiftSignalKit import Display import TelegramPresentationData import AccountContext +import TelegramStringFormatting final class WebpagePreviewAccessoryPanelNode: AccessoryPanelNode { private let webpageDisposable = MetaDisposable() diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index 81293cc7d4..7588fe409a 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 0900678D21ED5EA800530762 /* WallpaperColorPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0900678C21ED5EA800530762 /* WallpaperColorPanelNode.swift */; }; 0900678F21ED8E0E00530762 /* HexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0900678E21ED8E0E00530762 /* HexColor.swift */; }; 0902838821931D960067EFBD /* LanguageSuggestionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0902838721931D960067EFBD /* LanguageSuggestionController.swift */; }; - 090A22172273713000694CB0 /* ChatAnimationGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090A22162273713000694CB0 /* ChatAnimationGalleryItem.swift */; }; 090B48C82200BCA8005083FA /* WallpaperUploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090B48C72200BCA8005083FA /* WallpaperUploadManager.swift */; }; 090E63E62195880F00E3C035 /* ContactAddItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E63E52195880F00E3C035 /* ContactAddItem.swift */; }; 090E63EE2196FE3A00E3C035 /* OpenAddContact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 090E63ED2196FE3A00E3C035 /* OpenAddContact.swift */; }; @@ -38,9 +37,6 @@ 09310D33213ED5FC0020033A /* anim_group.json in Resources */ = {isa = PBXBuildFile; fileRef = 09310D1B213BC5DE0020033A /* anim_group.json */; }; 0940932422E73DFB003846A3 /* ChatSendMessageActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0940932322E73DFB003846A3 /* ChatSendMessageActionSheetController.swift */; }; 0940932622E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0940932522E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift */; }; - 0941A9A0210B057200EBE194 /* OpenInActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0941A99F210B057200EBE194 /* OpenInActionSheetController.swift */; }; - 0941A9A4210B0E2E00EBE194 /* OpenInAppIconResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0941A9A3210B0E2E00EBE194 /* OpenInAppIconResources.swift */; }; - 0941A9A6210B822D00EBE194 /* OpenInOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0941A9A5210B822D00EBE194 /* OpenInOptions.swift */; }; 094735032275B62B00EA2312 /* PasscodeLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094735022275B62B00EA2312 /* PasscodeLayout.swift */; }; 0947350E2275D72100EA2312 /* anim_hide.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735042275D71F00EA2312 /* anim_hide.json */; }; 0947350F2275D72100EA2312 /* anim_unread.json in Resources */ = {isa = PBXBuildFile; fileRef = 094735052275D72000EA2312 /* anim_unread.json */; }; @@ -78,8 +74,6 @@ 09749BCD21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09749BCC21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift */; }; 09749BCF21F236F2008FDDE9 /* ModernCheckNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09749BCE21F236F2008FDDE9 /* ModernCheckNode.swift */; }; 09797873210633CD0077D77F /* InstantPageSettingsButtonItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09797872210633CD0077D77F /* InstantPageSettingsButtonItemNode.swift */; }; - 0979787C210642CB0077D77F /* WebEmbedPlayerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0979787B210642CB0077D77F /* WebEmbedPlayerNode.swift */; }; - 0979787E210646C00077D77F /* YoutubeEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0979787D210646C00077D77F /* YoutubeEmbedImplementation.swift */; }; 09874E4F21078FA100E190B8 /* Generic.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788321065F8C0077D77F /* Generic.html */; }; 09874E5021078FA100E190B8 /* GenericUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788821065F8C0077D77F /* GenericUserScript.js */; }; 09874E5121078FA100E190B8 /* Instagram.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788421065F8C0077D77F /* Instagram.html */; }; @@ -89,8 +83,6 @@ 09874E5521078FA100E190B8 /* VimeoUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788021065F8B0077D77F /* VimeoUserScript.js */; }; 09874E5621078FA100E190B8 /* Youtube.html in Resources */ = {isa = PBXBuildFile; fileRef = 0979788721065F8C0077D77F /* Youtube.html */; }; 09874E5721078FA100E190B8 /* YoutubeUserScript.js in Resources */ = {isa = PBXBuildFile; fileRef = 0979788121065F8B0077D77F /* YoutubeUserScript.js */; }; - 09874E582107A4C300E190B8 /* VimeoEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09874E3A21075BF400E190B8 /* VimeoEmbedImplementation.swift */; }; - 09874E592107BD4100E190B8 /* GenericEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09874E4021075C1700E190B8 /* GenericEmbedImplementation.swift */; }; 098CF79222B924E200AF6134 /* ThemeSettingsAccentColorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 098CF79122B924E200AF6134 /* ThemeSettingsAccentColorItem.swift */; }; 099529AA21CDB27900805E13 /* ShareProxyServerActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529A921CDB27900805E13 /* ShareProxyServerActionSheetController.swift */; }; 099529AC21CDBBB200805E13 /* QRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099529AB21CDBBB200805E13 /* QRCode.swift */; }; @@ -100,7 +92,6 @@ 09A218D9229EE1B600DE6898 /* HorizontalStickerGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09A218D7229EE1B500DE6898 /* HorizontalStickerGridItem.swift */; }; 09A218DA229EE1B600DE6898 /* HorizontalStickersChatContextPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09A218D8229EE1B500DE6898 /* HorizontalStickersChatContextPanelNode.swift */; }; 09A218F522A15F1400DE6898 /* ThemeSettingsAppIconItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09A218F422A15F1400DE6898 /* ThemeSettingsAppIconItem.swift */; }; - 09AE3823214C110900850BFD /* LegacySecureIdScanController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09AE3822214C110800850BFD /* LegacySecureIdScanController.swift */; }; 09B4EE4721A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE4621A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift */; }; 09B4EE4D21A7B73800847FA6 /* PermissionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE4C21A7B73800847FA6 /* PermissionController.swift */; }; 09B4EE4F21A7B75D00847FA6 /* PermissionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE4E21A7B75D00847FA6 /* PermissionControllerNode.swift */; }; @@ -110,7 +101,6 @@ 09B4EE6021AD4A0E00847FA6 /* InstantPageContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE5F21AD4A0E00847FA6 /* InstantPageContentNode.swift */; }; 09B4EE6221AD791600847FA6 /* InstantPageStoredState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B4EE6121AD791600847FA6 /* InstantPageStoredState.swift */; }; 09C500242142BA6400EF253E /* ItemListWebsiteItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09C500232142BA6400EF253E /* ItemListWebsiteItem.swift */; }; - 09C9EA3821A044B500E90146 /* StringForDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09C9EA3721A044B500E90146 /* StringForDuration.swift */; }; 09CE95002232729A00A7D2C3 /* StickerPaneSearchContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CE94FF2232729A00A7D2C3 /* StickerPaneSearchContentNode.swift */; }; 09CE9502223272B700A7D2C3 /* GifPaneSearchContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CE9501223272B700A7D2C3 /* GifPaneSearchContentNode.swift */; }; 09CE95042236C6B300A7D2C3 /* CachedInstantPages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CE95032236C6B300A7D2C3 /* CachedInstantPages.swift */; }; @@ -133,7 +123,6 @@ 09DD5D5021ECC3C400D7007A /* SuppressContactsWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */; }; 09DD5D5221ED175300D7007A /* WallpaperColorPickerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD5D5121ED175300D7007A /* WallpaperColorPickerNode.swift */; }; 09DD88E921BAF65E000766BC /* ItemListAddressItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88E821BAF65E000766BC /* ItemListAddressItem.swift */; }; - 09DD88ED21BDC8B7000766BC /* FormEditableBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88EC21BDC8B7000766BC /* FormEditableBlockItemNode.swift */; }; 09DD88EF21BDDE2B000766BC /* Geocoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88EE21BDDE2B000766BC /* Geocoding.swift */; }; 09DD88F321BF907C000766BC /* WebSearchRecentQueryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88F221BF907C000766BC /* WebSearchRecentQueryItem.swift */; }; 09DD88F521BF9730000766BC /* WebSearchRecentQueries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88F421BF9730000766BC /* WebSearchRecentQueries.swift */; }; @@ -177,8 +166,6 @@ 09F799FC21C3FF3000820234 /* WebSearchGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F799FB21C3FF3000820234 /* WebSearchGalleryController.swift */; }; 09F79A0121C8116C00820234 /* WebSearchBadgeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0021C8116C00820234 /* WebSearchBadgeNode.swift */; }; 09F79A0321C8225600820234 /* WebSearchVideoGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0221C8225600820234 /* WebSearchVideoGalleryItem.swift */; }; - 09F79A0721C829BC00820234 /* GalleryNavigationCheckNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0621C829BC00820234 /* GalleryNavigationCheckNode.swift */; }; - 09F79A0921C829C700820234 /* GalleryNavigationRecipientNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0821C829C700820234 /* GalleryNavigationRecipientNode.swift */; }; 09F79A0B21C832F400820234 /* WebSearchGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0A21C832F400820234 /* WebSearchGalleryFooterContentNode.swift */; }; 09F79A0D21C88E8900820234 /* LegacyWebSearchEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F79A0C21C88E8900820234 /* LegacyWebSearchEditor.swift */; }; 09F85BA521E7821500D73170 /* ThemeGridSelectionPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F85BA421E7821500D73170 /* ThemeGridSelectionPanelNode.swift */; }; @@ -238,13 +225,7 @@ D0104F281F47171F004E4881 /* InstantPageGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0104F271F47171F004E4881 /* InstantPageGalleryController.swift */; }; D0104F2A1F471DA6004E4881 /* InstantImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0104F291F471DA6004E4881 /* InstantImageGalleryItem.swift */; }; D0104F2C1F471EEB004E4881 /* InstantPageGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0104F2B1F471EEB004E4881 /* InstantPageGalleryFooterContentNode.swift */; }; - D0105D682182680E007C04A7 /* IsMediaStreamable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0105D672182680E007C04A7 /* IsMediaStreamable.swift */; }; D010E17D22C238BC009324D4 /* RLottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D010E17C22C238BC009324D4 /* RLottie.framework */; }; - D0119CD020CAE75F00895300 /* LegacySecureIdAttachmentMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0119CCF20CAE75F00895300 /* LegacySecureIdAttachmentMenu.swift */; }; - D013630C208FA62400EB3653 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D013630B208FA62400EB3653 /* SecureIdDocumentGalleryFooterContentNode.swift */; }; - D0147BA7206E8B4F00E40378 /* SecureIdAuthAcceptNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0147BA6206E8B4F00E40378 /* SecureIdAuthAcceptNode.swift */; }; - D0147BA9206EA35000E40378 /* SecureIdDocumentGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0147BA8206EA35000E40378 /* SecureIdDocumentGalleryController.swift */; }; - D0147BAB206EA6C100E40378 /* SecureIdDocumentImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0147BAA206EA6C100E40378 /* SecureIdDocumentImageGalleryItem.swift */; }; D01590A622BD460C0017C33E /* MetalAnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590A522BD460C0017C33E /* MetalAnimationRenderer.swift */; }; D01590A822BD462C0017C33E /* SoftwareAnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590A722BD462C0017C33E /* SoftwareAnimationRenderer.swift */; }; D01590AB22BD467B0017C33E /* AnimationRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01590AA22BD467B0017C33E /* AnimationRenderer.swift */; }; @@ -281,13 +262,11 @@ D01BAA1E1ECC931D00295217 /* CallListNodeEntries.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA1D1ECC931D00295217 /* CallListNodeEntries.swift */; }; D01BAA201ECC9A2500295217 /* CallListNodeLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA1F1ECC9A2500295217 /* CallListNodeLocation.swift */; }; D01BAA221ECE076100295217 /* CallListCallItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA211ECE076100295217 /* CallListCallItem.swift */; }; - D01BAA581ED3283D00295217 /* AddFormatToStringWithRanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01BAA571ED3283D00295217 /* AddFormatToStringWithRanges.swift */; }; D01C06AF1FBB461E001561AB /* JoinLinkPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06AE1FBB461E001561AB /* JoinLinkPreviewController.swift */; }; D01C06B11FBB4643001561AB /* JoinLinkPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B01FBB4643001561AB /* JoinLinkPreviewControllerNode.swift */; }; D01C06B31FBB49A5001561AB /* JoinLinkPreviewPeerContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B21FBB49A5001561AB /* JoinLinkPreviewPeerContentNode.swift */; }; D01C06B51FBB7720001561AB /* ChatMediaInputSettingsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06B41FBB7720001561AB /* ChatMediaInputSettingsItem.swift */; }; D01C06BE1FBCAF06001561AB /* ChatMessageBubbleMosaicLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06BD1FBCAF06001561AB /* ChatMessageBubbleMosaicLayout.swift */; }; - D01C06C01FBF118A001561AB /* MessageUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C06BF1FBF118A001561AB /* MessageUtils.swift */; }; D01C99781F4F382C00DCFAF6 /* InstantPageSettingsItemTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01C99771F4F382C00DCFAF6 /* InstantPageSettingsItemTheme.swift */; }; D01DBA9B209CC6AD00C64E64 /* ChatLinkPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01DBA9A209CC6AD00C64E64 /* ChatLinkPreview.swift */; }; D01FB437217CEC62009C6134 /* FetchVideoThumbnail.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01FB436217CEC62009C6134 /* FetchVideoThumbnail.swift */; }; @@ -304,28 +283,19 @@ D025402922E1F7F500AC0195 /* ChatTextInputSlowmodePlaceholderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D025402822E1F7F500AC0195 /* ChatTextInputSlowmodePlaceholderNode.swift */; }; D025A4231F79344500563950 /* FetchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D025A4221F79344500563950 /* FetchManager.swift */; }; D025A4261F79428E00563950 /* FetchManagerLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D025A4251F79428E00563950 /* FetchManagerLocation.swift */; }; - D02660941F34CE5C000E2DC5 /* LegacyLocationVenueIconDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02660931F34CE5C000E2DC5 /* LegacyLocationVenueIconDataSource.swift */; }; D02B198A21F1DA9E0094A764 /* SharedAccountContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02B198921F1DA9E0094A764 /* SharedAccountContext.swift */; }; D02B2B9820810DA00062476B /* StickerPaneSearchStickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02B2B9720810DA00062476B /* StickerPaneSearchStickerItem.swift */; }; D02B676320800A00001A864A /* PaneSearchBarPlaceholderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02B676220800A00001A864A /* PaneSearchBarPlaceholderItem.swift */; }; D02C81712177729000CD1006 /* NotificationExceptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02C81702177729000CD1006 /* NotificationExceptions.swift */; }; D02C81732177AC5900CD1006 /* NotificationSearchItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02C81722177AC5900CD1006 /* NotificationSearchItem.swift */; }; - D02D60AE206BD47300FEFE1E /* SecureIdDocumentTypeSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60AD206BD47300FEFE1E /* SecureIdDocumentTypeSelectionController.swift */; }; - D02D60B1206C189900FEFE1E /* SecureIdPlaintextFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60B0206C189900FEFE1E /* SecureIdPlaintextFormController.swift */; }; - D02D60B3206C18A600FEFE1E /* SecureIdPlaintextFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60B2206C18A600FEFE1E /* SecureIdPlaintextFormControllerNode.swift */; }; - D02D60C8206E705D00FEFE1E /* SecureIdValueFormPhoneItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02D60C7206E705D00FEFE1E /* SecureIdValueFormPhoneItem.swift */; }; D02D634A22B85B94006BE519 /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02D634922B85B94006BE519 /* PushKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; D02F4AE91FCF370B004DFBAE /* ChatMessageInteractiveMediaBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02F4AE81FCF370B004DFBAE /* ChatMessageInteractiveMediaBadge.swift */; }; - D02F4AF01FD4C46D004DFBAE /* SystemVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D02F4AEF1FD4C46D004DFBAE /* SystemVideoContent.swift */; }; D035734B22B5CCCA00F0920D /* LegacyBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D035734A22B5CCCA00F0920D /* LegacyBuffer.swift */; }; - D0380DA9204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0380DA8204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift */; }; D0380DAD204ED434000414AB /* LegacyLiveUploadInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0380DAC204ED434000414AB /* LegacyLiveUploadInterface.swift */; }; D0380DB8204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0380DB7204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift */; }; - D0383ED4207CFBB900C45548 /* GalleryThumbnailContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383ED3207CFBB900C45548 /* GalleryThumbnailContainerNode.swift */; }; D0383EE4207D292800C45548 /* EmojisChatInputContextPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383EE3207D292800C45548 /* EmojisChatInputContextPanelNode.swift */; }; D0383EE6207D299600C45548 /* EmojisChatInputPanelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383EE5207D299600C45548 /* EmojisChatInputPanelItem.swift */; }; D038AC5322F88A3600320981 /* ImageBlur.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038AC5222F88A3600320981 /* ImageBlur.framework */; }; - D039FB1921711B5D00BD1BAD /* PlatformVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB1821711B5D00BD1BAD /* PlatformVideoContent.swift */; }; D03AA4DF202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4DE202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift */; }; D03AA4E5202DF8840056C405 /* StickerPreviewPeekContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */; }; D03AE67322B9459C0078411C /* HockeySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03AE67222B9459C0078411C /* HockeySDK.framework */; }; @@ -339,14 +309,11 @@ D04281FC200E61BC009DDE36 /* ChatRecentActionsInteraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FB200E61BC009DDE36 /* ChatRecentActionsInteraction.swift */; }; D04281FE200E639A009DDE36 /* ChatRecentActionsTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FD200E639A009DDE36 /* ChatRecentActionsTitleView.swift */; }; D0428200200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04281FF200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift */; }; - D0430B001FF4570500A35ADD /* WebController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0430AFF1FF4570500A35ADD /* WebController.swift */; }; - D0430B021FF4584100A35ADD /* WebControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0430B011FF4584100A35ADD /* WebControllerNode.swift */; }; D0439B5B228EC4A00067E026 /* ChatMessagePhoneNumberRequestContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0439B5A228EC4A00067E026 /* ChatMessagePhoneNumberRequestContentNode.swift */; }; D04554A421B42982007A6DD9 /* ConfirmPhoneNumberController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04554A321B42982007A6DD9 /* ConfirmPhoneNumberController.swift */; }; D0471B491EFD59170074D609 /* BotCheckoutControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B481EFD59170074D609 /* BotCheckoutControllerNode.swift */; }; D0471B4B1EFD64AC0074D609 /* BotCheckoutHeaderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B4A1EFD64AC0074D609 /* BotCheckoutHeaderItem.swift */; }; D0471B4F1EFD84600074D609 /* BotCheckoutPriceItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B4E1EFD84600074D609 /* BotCheckoutPriceItem.swift */; }; - D0471B511EFD872F0074D609 /* CurrencyFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B501EFD872F0074D609 /* CurrencyFormat.swift */; }; D0471B541EFD8ECA0074D609 /* currencies.json in Resources */ = {isa = PBXBuildFile; fileRef = D0471B531EFD8ECA0074D609 /* currencies.json */; }; D0471B561EFDB40F0074D609 /* BotCheckoutActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B551EFDB40F0074D609 /* BotCheckoutActionButton.swift */; }; D0471B581EFE6D020074D609 /* BotCheckoutInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B571EFE6D020074D609 /* BotCheckoutInfoController.swift */; }; @@ -356,9 +323,6 @@ D0471B601EFEB5A70074D609 /* BotPaymentTextItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B5F1EFEB5A70074D609 /* BotPaymentTextItemNode.swift */; }; D0471B621EFEB5B70074D609 /* BotPaymentSwitchItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B611EFEB5B70074D609 /* BotPaymentSwitchItemNode.swift */; }; D0471B641EFEB5CB0074D609 /* BotPaymentItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0471B631EFEB5CB0074D609 /* BotPaymentItemNode.swift */; }; - D0477D1D1F617E8900412B44 /* NativeVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0477D1C1F617E8900412B44 /* NativeVideoContent.swift */; }; - D0477D1F1F619E0700412B44 /* GalleryVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0477D1E1F619E0700412B44 /* GalleryVideoDecoration.swift */; }; - D0477D211F61A47600412B44 /* UniversalVideoContentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0477D201F61A47600412B44 /* UniversalVideoContentManager.swift */; }; D048B339203C532800038D05 /* ChatMediaInputPane.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048B338203C532800038D05 /* ChatMediaInputPane.swift */; }; D048EA851F4F295300188713 /* InstantPageSettingsBacklightItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048EA841F4F295300188713 /* InstantPageSettingsBacklightItemNode.swift */; }; D048EA871F4F296400188713 /* InstantPageSettingsFontSizeItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D048EA861F4F296400188713 /* InstantPageSettingsFontSizeItemNode.swift */; }; @@ -384,9 +348,6 @@ D05D8B3A2192FC460064586F /* LocalizationListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B392192FC460064586F /* LocalizationListController.swift */; }; D05D8B3F2192FC6E0064586F /* LocalizationListControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B3E2192FC6E0064586F /* LocalizationListControllerNode.swift */; }; D05D8B412192FC8A0064586F /* LocalizationListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B402192FC8A0064586F /* LocalizationListItem.swift */; }; - D05D8B742195CD890064586F /* SetupTwoStepVerificationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B732195CD890064586F /* SetupTwoStepVerificationController.swift */; }; - D05D8B762195CD930064586F /* SetupTwoStepVerificationControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B752195CD930064586F /* SetupTwoStepVerificationControllerNode.swift */; }; - D05D8B782195E0050064586F /* SetupTwoStepVerificationContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05D8B772195E0050064586F /* SetupTwoStepVerificationContentNode.swift */; }; D060184022F35D1C00796784 /* MergeLists.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D060183F22F35D1C00796784 /* MergeLists.framework */; }; D060184222F35D2000796784 /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D060184122F35D2000796784 /* ActivityIndicator.framework */; }; D060184422F35D2400796784 /* ProgressNavigationButtonNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D060184322F35D2400796784 /* ProgressNavigationButtonNode.framework */; }; @@ -394,16 +355,10 @@ D06018B522F3659900796784 /* ChatTextFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06018B422F3659900796784 /* ChatTextFormat.swift */; }; D06350AE2229A7F800FA2B32 /* InChatPrefetchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06350AD2229A7F800FA2B32 /* InChatPrefetchManager.swift */; }; D0642EFC1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0642EFB1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift */; }; - D064EF871F69A06F00AC0398 /* MessageContentKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = D064EF861F69A06F00AC0398 /* MessageContentKind.swift */; }; D0671F2D2145AB28000A8AE7 /* LegacyAvatarPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0671F2C2145AB28000A8AE7 /* LegacyAvatarPicker.swift */; }; D0684A041F6C3AD50059F570 /* ChatListTypingNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0684A031F6C3AD50059F570 /* ChatListTypingNode.swift */; }; D069F5D0212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D069F5CF212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift */; }; D06BB8821F58994B0084FC30 /* LegacyInstantVideoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06BB8811F58994B0084FC30 /* LegacyInstantVideoController.swift */; }; - D06BEC771F62F68B0035A545 /* OverlayUniversalVideoNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06BEC761F62F68B0035A545 /* OverlayUniversalVideoNode.swift */; }; - D06BEC8A1F6597A80035A545 /* OverlayVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06BEC891F6597A80035A545 /* OverlayVideoDecoration.swift */; }; - D06BEC8C1F65E30A0035A545 /* WebEmbedVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06BEC8B1F65E30A0035A545 /* WebEmbedVideoContent.swift */; }; - D06CF82720D0080200AC4CFF /* SecureIdAuthListContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CF82620D0080200AC4CFF /* SecureIdAuthListContentNode.swift */; }; - D06CF82920D0119500AC4CFF /* SecureIdAuthListFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06CF82820D0119500AC4CFF /* SecureIdAuthListFieldNode.swift */; }; D06E0F8E1F79ABFB003CF3DD /* ChatLoadingNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E0F8D1F79ABFB003CF3DD /* ChatLoadingNode.swift */; }; D06E4C312134910400088087 /* ChatListEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E4C302134910400088087 /* ChatListEmptyNode.swift */; }; D06E4C332134A59700088087 /* ThemeAccentColorActionSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E4C322134A59700088087 /* ThemeAccentColorActionSheet.swift */; }; @@ -459,22 +414,11 @@ D08984F02114AE0C00918162 /* DataPrivacySettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08984EF2114AE0C00918162 /* DataPrivacySettingsController.swift */; }; D08BDF641FA37BEA009D08E1 /* ChatRecordingPreviewInputPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08BDF631FA37BEA009D08E1 /* ChatRecordingPreviewInputPanelNode.swift */; }; D08BDF661FA8CB10009D08E1 /* EditSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08BDF651FA8CB10009D08E1 /* EditSettingsController.swift */; }; - D08D7E79209FA2930005D80C /* SecureIdValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08D7E78209FA2930005D80C /* SecureIdValues.swift */; }; D091C7A41F8EBB1E00D7DE13 /* ChatPresentationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D091C7A31F8EBB1E00D7DE13 /* ChatPresentationData.swift */; }; D091C7A61F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */; }; D09250061FE5371D003F693F /* GlobalExperimentalSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09250051FE5371D003F693F /* GlobalExperimentalSettings.swift */; }; - D093D7D92062A9CA00BC3599 /* SecureIdAuthControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7D82062A9CA00BC3599 /* SecureIdAuthControllerState.swift */; }; - D093D7DB2062CFF500BC3599 /* SecureIdAuthFormContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7DA2062CFF500BC3599 /* SecureIdAuthFormContentNode.swift */; }; - D093D7DD2062D09A00BC3599 /* SecureIdAuthFormFieldNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7DC2062D09A00BC3599 /* SecureIdAuthFormFieldNode.swift */; }; - D093D7DF2062F3F000BC3599 /* SecureIdDocumentFormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7DE2062F3F000BC3599 /* SecureIdDocumentFormController.swift */; }; - D093D7E22062F40100BC3599 /* SecureIdDocumentFormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7E12062F40100BC3599 /* SecureIdDocumentFormControllerNode.swift */; }; D093D7E72063E57F00BC3599 /* BotPaymentActionItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D7E62063E57F00BC3599 /* BotPaymentActionItemNode.swift */; }; D093D80820654A2900BC3599 /* BotPaymentDateItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D80720654A2900BC3599 /* BotPaymentDateItemNode.swift */; }; - D093D81D206994FD00BC3599 /* FindSecureIdValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D81C206994FD00BC3599 /* FindSecureIdValue.swift */; }; - D093D82020699A7300BC3599 /* FormController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D81F20699A7300BC3599 /* FormController.swift */; }; - D093D82220699A7C00BC3599 /* FormControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D82120699A7C00BC3599 /* FormControllerNode.swift */; }; - D093D8242069A06600BC3599 /* FormControllerScrollerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D8232069A06600BC3599 /* FormControllerScrollerNode.swift */; }; - D093D8262069A31700BC3599 /* FormControllerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D093D8252069A31700BC3599 /* FormControllerItem.swift */; }; D0943AF61FDAAE7E001522CC /* MultipleAvatarsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */; }; D0943AFE1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AFD1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift */; }; D0943B001FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943AFF1FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift */; }; @@ -482,15 +426,10 @@ D0943B071FDEC529001522CC /* InstantVideoRadialStatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0943B061FDEC528001522CC /* InstantVideoRadialStatusNode.swift */; }; D0955FB521912B6000F89427 /* PresentationStrings.mapping in Resources */ = {isa = PBXBuildFile; fileRef = D0955FB32191278C00F89427 /* PresentationStrings.mapping */; }; D097C26820DD0A1D007BB4B8 /* PeerReportController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D097C26720DD0A1D007BB4B8 /* PeerReportController.swift */; }; - D099D74D1EEFEE1500A3128C /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D74C1EEFEE1500A3128C /* GameController.swift */; }; - D099D74F1EEFEE6A00A3128C /* GameControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D74E1EEFEE6A00A3128C /* GameControllerNode.swift */; }; - D099D7511EEFF91E00A3128C /* GameControllerTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099D7501EEFF91E00A3128C /* GameControllerTitleView.swift */; }; D099E220229405BB00561B75 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = D099E21F229405BB00561B75 /* Weak.swift */; }; - D09D88711F86D36700BEB4C9 /* CountryList.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09D88701F86D36700BEB4C9 /* CountryList.swift */; }; D09D88731F86D56B00BEB4C9 /* AuthorizationLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09D88721F86D56B00BEB4C9 /* AuthorizationLayout.swift */; }; D09E637C1F0E7C28003444CD /* SharedMediaPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09E637B1F0E7C28003444CD /* SharedMediaPlayer.swift */; }; D09E637F1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09E637E1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift */; }; - D09E63AA1F0FC681003444CD /* PictureInPictureVideoControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09E63A91F0FC681003444CD /* PictureInPictureVideoControlsNode.swift */; }; D09E63B01F1010FE003444CD /* Contacts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E63AF1F1010FE003444CD /* Contacts.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; D09E63B21F11289A003444CD /* PassKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E63B11F11289A003444CD /* PassKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; D09E778722F8E9ED00B9CCA7 /* ContextUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E778622F8E9ED00B9CCA7 /* ContextUI.framework */; }; @@ -511,9 +450,7 @@ D09E77A922FA5CEA00B9CCA7 /* TextFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */; }; D09E77AB22FA5CEA00B9CCA7 /* Tuples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */; }; D09E77AD22FA5CEA00B9CCA7 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */; }; - D09F9DCF20768DAF00DB4DE1 /* SecureIdLocalResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09F9DCE20768DAF00DB4DE1 /* SecureIdLocalResource.swift */; }; D0A8998D217A294100759EE6 /* SaveIncomingMediaController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A8998C217A294100759EE6 /* SaveIncomingMediaController.swift */; }; - D0A8BBA11F61EE83000F03FD /* UniversalVideoGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A8BBA01F61EE83000F03FD /* UniversalVideoGalleryItem.swift */; }; D0AA29AE1F72770D00C050AC /* ChatListItemStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA29AD1F72770D00C050AC /* ChatListItemStrings.swift */; }; D0AA840C1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */; }; D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */; }; @@ -586,7 +523,6 @@ D0B37C5C1F8D22AE004252DF /* ThemeSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B37C5B1F8D22AE004252DF /* ThemeSettingsController.swift */; }; D0B37C5E1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B37C5D1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift */; }; D0B37C601F8D286E004252DF /* ThemeSettingsFontSizeItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B37C5F1F8D286E004252DF /* ThemeSettingsFontSizeItem.swift */; }; - D0B3AC802142E2E900CD1374 /* ResetPasswordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B3AC7F2142E2E900CD1374 /* ResetPasswordController.swift */; }; D0B4AF861EC111FA00D51FF6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D0AB0BBA1D6719B5002C78E7 /* Images.xcassets */; }; D0B4AF881EC112EE00D51FF6 /* CallKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0B4AF871EC112ED00D51FF6 /* CallKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; D0B69C3920EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B69C3820EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift */; }; @@ -597,12 +533,6 @@ D0BCC3D2203F0A6C008126C2 /* StringForMessageTimestampStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC3D1203F0A6C008126C2 /* StringForMessageTimestampStatus.swift */; }; D0BCC3D420404CC7008126C2 /* ChatMessageActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC3D320404CC7008126C2 /* ChatMessageActionSheetController.swift */; }; D0BCC3D620404CD8008126C2 /* ChatMessageActionSheetControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC3D520404CD8008126C2 /* ChatMessageActionSheetControllerNode.swift */; }; - D0BE3037206139F500FBE6D8 /* ImageCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE3036206139F500FBE6D8 /* ImageCompression.swift */; }; - D0BE30412061B80100FBE6D8 /* SecureIdAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE30402061B80100FBE6D8 /* SecureIdAuthController.swift */; }; - D0BE30432061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE30422061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift */; }; - D0BE30452061C09000FBE6D8 /* SecureIdAuthContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE30442061C09000FBE6D8 /* SecureIdAuthContentNode.swift */; }; - D0BE30472061C0BC00FBE6D8 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE30462061C0BC00FBE6D8 /* SecureIdAuthPasswordOptionContentNode.swift */; }; - D0BE30492061C0F500FBE6D8 /* SecureIdAuthHeaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE30482061C0F500FBE6D8 /* SecureIdAuthHeaderNode.swift */; }; D0BFAE4620AB04FB00793CF2 /* ChatRestrictedInputPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE4520AB04FB00793CF2 /* ChatRestrictedInputPanelNode.swift */; }; D0BFAE4E20AB1D7B00793CF2 /* DisabledContextResultsChatInputContextPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE4D20AB1D7B00793CF2 /* DisabledContextResultsChatInputContextPanelNode.swift */; }; D0BFAE5020AB2A1300793CF2 /* PeerBanTimeoutController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BFAE4F20AB2A1300793CF2 /* PeerBanTimeoutController.swift */; }; @@ -628,40 +558,40 @@ D0C9C12122FE40BE00FAB518 /* ImageTransparency.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C12022FE40BE00FAB518 /* ImageTransparency.framework */; }; D0C9C14D22FE439B00FAB518 /* TelegramNotices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C14C22FE439B00FAB518 /* TelegramNotices.framework */; }; D0C9C17722FEF22200FAB518 /* TelegramPermissions.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C17622FEF22200FAB518 /* TelegramPermissions.framework */; }; + D0C9C1B623001F6200FAB518 /* GameUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1B523001F6200FAB518 /* GameUI.framework */; }; + D0C9C1DC230020CA00FAB518 /* WebUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1DB230020CA00FAB518 /* WebUI.framework */; }; + D0C9C2572300238900FAB518 /* PassportUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2562300238900FAB518 /* PassportUI.framework */; }; + D0C9C2832300A05100FAB518 /* PhoneInputNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2822300A05100FAB518 /* PhoneInputNode.framework */; }; + D0C9C2B12300A1C400FAB518 /* CountrySelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2B02300A1C400FAB518 /* CountrySelectionUI.framework */; }; + D0C9C2D22300A2DB00FAB518 /* SearchBarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C2D12300A2DB00FAB518 /* SearchBarNode.framework */; }; + D0C9C3352300AA0B00FAB518 /* GalleryUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3342300AA0B00FAB518 /* GalleryUI.framework */; }; + D0C9C3982300B46200FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3972300B46200FAB518 /* TelegramUniversalVideoContent.framework */; }; + D0C9C3C52300B73A00FAB518 /* WebsiteType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3C42300B73A00FAB518 /* WebsiteType.framework */; }; + D0C9C3FF2300D5A200FAB518 /* ScreenCaptureDetection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3FE2300D5A200FAB518 /* ScreenCaptureDetection.framework */; }; + D0C9C43D2300D6E700FAB518 /* OpenInExternalAppUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C43C2300D6E700FAB518 /* OpenInExternalAppUI.framework */; }; + D0C9C47F2300E31F00FAB518 /* LegacyUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C47E2300E31F00FAB518 /* LegacyUI.framework */; }; + D0C9C4C12300E5BB00FAB518 /* ImageCompression.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4C02300E5BB00FAB518 /* ImageCompression.framework */; }; + D0C9C4DC2300E67900FAB518 /* DateSelectionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C4DB2300E67900FAB518 /* DateSelectionUI.framework */; }; + D0C9C52B2300EFA800FAB518 /* PasswordSetupUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C52A2300EFA800FAB518 /* PasswordSetupUI.framework */; }; D0CAD90120AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CAD90020AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift */; }; D0CB27CF20C17A4A001ACF93 /* TermsOfServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CB27CE20C17A4A001ACF93 /* TermsOfServiceController.swift */; }; D0CB27D220C17A7F001ACF93 /* TermsOfServiceControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CB27D120C17A7F001ACF93 /* TermsOfServiceControllerNode.swift */; }; D0CCD61B222E8B4500EE1E08 /* TimeBasedVideoPreload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CCD61A222E8B4500EE1E08 /* TimeBasedVideoPreload.swift */; }; D0CE67941F7DB45100FFB557 /* ChatMessageContactBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE67931F7DB45100FFB557 /* ChatMessageContactBubbleContentNode.swift */; }; - D0CE6F6E213EDF8800BCD44B /* SecureIdAuthPasswordSetupContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE6F6D213EDF8800BCD44B /* SecureIdAuthPasswordSetupContentNode.swift */; }; D0CE6F70213EEE5000BCD44B /* CreatePasswordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE6F6F213EEE5000BCD44B /* CreatePasswordController.swift */; }; D0CE8CE51F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CE41F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift */; }; D0CE8CE71F6F35A300AA2DB0 /* ChatTextInputPanelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CE8CE61F6F35A300AA2DB0 /* ChatTextInputPanelState.swift */; }; - D0CFBB861FD715E700B65C0D /* LegacyHTTPOperationImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CFBB851FD715E700B65C0D /* LegacyHTTPOperationImpl.swift */; }; D0CFBB911FD881A600B65C0D /* AudioRecordningToneData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CFBB901FD881A600B65C0D /* AudioRecordningToneData.swift */; }; D0CFBB951FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CFBB941FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift */; }; - D0CFBB971FD8B0F700B65C0D /* ChatBubbleInstantVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CFBB961FD8B0F700B65C0D /* ChatBubbleInstantVideoDecoration.swift */; }; D0D3281422F31B3000D07EE2 /* TelegramUpdateUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D3281322F31B3000D07EE2 /* TelegramUpdateUI.framework */; }; D0D4345C1F97CEAA00CC1806 /* ProxyServerSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D4345B1F97CEAA00CC1806 /* ProxyServerSettingsController.swift */; }; D0D9DE0D20EFEA2E00F20B06 /* InstantPageMediaPlaylist.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D9DE0C20EFEA2E00F20B06 /* InstantPageMediaPlaylist.swift */; }; - D0DE5805205B202500C356A8 /* ScreenCaptureDetection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DE5804205B202500C356A8 /* ScreenCaptureDetection.swift */; }; D0DE66061F9A51E200EF4AE9 /* GalleryHiddenMediaManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DE66051F9A51E200EF4AE9 /* GalleryHiddenMediaManager.swift */; }; D0DFD5E21FCE2BA50039B3B1 /* CalculatingCacheSizeItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DFD5E11FCE2BA50039B3B1 /* CalculatingCacheSizeItem.swift */; }; D0E1199A2297F9C6008CAE3A /* ChannelDiscussionGroupSetupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E119992297F9C6008CAE3A /* ChannelDiscussionGroupSetupController.swift */; }; D0E1199C229808B8008CAE3A /* ChannelDiscussionGroupSetupHeaderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1199B229808B8008CAE3A /* ChannelDiscussionGroupSetupHeaderItem.swift */; }; D0E1199E229809B6008CAE3A /* ChannelDiscussionGroupActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E1199D229809B6008CAE3A /* ChannelDiscussionGroupActionSheetItem.swift */; }; - D0E266FD1F66706500BFC79F /* ChatBubbleVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E266FC1F66706500BFC79F /* ChatBubbleVideoDecoration.swift */; }; D0E2CE6C222930540084E3DD /* PrefetchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E2CE6B222930540084E3DD /* PrefetchManager.swift */; }; - D0E412C62069B60600BEE4A2 /* FormControllerHeaderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412C52069B60600BEE4A2 /* FormControllerHeaderItem.swift */; }; - D0E412C8206A537600BEE4A2 /* FormBlockItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412C7206A537600BEE4A2 /* FormBlockItemNode.swift */; }; - D0E412CA206A5B0B00BEE4A2 /* FormControllerTextInputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412C9206A5B0B00BEE4A2 /* FormControllerTextInputItem.swift */; }; - D0E412CC206A6B2300BEE4A2 /* FormControllerActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412CB206A6B2300BEE4A2 /* FormControllerActionItem.swift */; }; - D0E412CE206A707400BEE4A2 /* FormControllerTextItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412CD206A707400BEE4A2 /* FormControllerTextItem.swift */; }; - D0E412D0206A75B200BEE4A2 /* FormControllerDetailActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412CF206A75B200BEE4A2 /* FormControllerDetailActionItem.swift */; }; - D0E412D3206A7DC100BEE4A2 /* DateSelectionActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412D2206A7DC100BEE4A2 /* DateSelectionActionSheetController.swift */; }; - D0E412D5206A842900BEE4A2 /* SecureIdVerificationDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412D4206A842900BEE4A2 /* SecureIdVerificationDocument.swift */; }; - D0E412DA206A894800BEE4A2 /* SecureIdValueFormFileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412D9206A894800BEE4A2 /* SecureIdValueFormFileItem.swift */; }; - D0E412DF206AA00500BEE4A2 /* SecureIdVerificationDocumentsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E412DE206AA00500BEE4A2 /* SecureIdVerificationDocumentsContext.swift */; }; D0E8174C2011F8A300B82BBB /* ChatMessageEventLogPreviousMessageContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8174B2011F8A300B82BBB /* ChatMessageEventLogPreviousMessageContentNode.swift */; }; D0E8174E2011FC3800B82BBB /* ChatMessageEventLogPreviousDescriptionContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8174D2011FC3800B82BBB /* ChatMessageEventLogPreviousDescriptionContentNode.swift */; }; D0E817502012027900B82BBB /* ChatMessageEventLogPreviousLinkContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E8174F2012027900B82BBB /* ChatMessageEventLogPreviousLinkContentNode.swift */; }; @@ -787,24 +717,15 @@ D0E9BAE41F0574D800F079A4 /* STPBankAccountParams.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E9BADB1F0574D800F079A4 /* STPBankAccountParams.m */; }; D0E9BAE71F0574FF00F079A4 /* STPCustomer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E9BAE51F0574FF00F079A4 /* STPCustomer.h */; }; D0E9BAE81F0574FF00F079A4 /* STPCustomer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0E9BAE61F0574FF00F079A4 /* STPCustomer.m */; }; - D0EB41F31F2FEAB800838FE6 /* LegacyComponentsStickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41F21F2FEAB800838FE6 /* LegacyComponentsStickers.swift */; }; D0EB41F51F30D26A00838FE6 /* LegacySuggestionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41F41F30D26A00838FE6 /* LegacySuggestionContext.swift */; }; - D0EB41F71F30D4A800838FE6 /* LegacyMediaLocations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41F61F30D4A800838FE6 /* LegacyMediaLocations.swift */; }; - D0EB41F91F30E5B700838FE6 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41F81F30E5B700838FE6 /* LegacyPeerAvatarPlaceholderDataSource.swift */; }; - D0EB41FB1F30E75000838FE6 /* LegacyImageDownloadActor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41FA1F30E75000838FE6 /* LegacyImageDownloadActor.swift */; }; D0EB42001F30ED4F00838FE6 /* LegacyImageProcessors.h in Headers */ = {isa = PBXBuildFile; fileRef = D0EB41FE1F30ED4F00838FE6 /* LegacyImageProcessors.h */; }; D0EB42011F30ED4F00838FE6 /* LegacyImageProcessors.m in Sources */ = {isa = PBXBuildFile; fileRef = D0EB41FF1F30ED4F00838FE6 /* LegacyImageProcessors.m */; }; D0EB42051F3143AB00838FE6 /* LegacyComponentsResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D0EB42041F3143AB00838FE6 /* LegacyComponentsResources.bundle */; }; D0EB5ADF1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EB5ADE1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift */; }; D0EC55A3210231D600D1992C /* SearchPeerMembers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EC55A2210231D600D1992C /* SearchPeerMembers.swift */; }; - D0EC6CBC1EB9F58800EBF1C3 /* LegacyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D075518A1DDA4D7D0073E051 /* LegacyController.swift */; }; - D0EC6CBD1EB9F58800EBF1C3 /* LegacyControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D075518C1DDA4E0B0073E051 /* LegacyControllerNode.swift */; }; - D0EC6CBE1EB9F58800EBF1C3 /* TelegramInitializeLegacyComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07551921DDA540F0073E051 /* TelegramInitializeLegacyComponents.swift */; }; D0EC6CBF1EB9F58800EBF1C3 /* LegacyAttachmentMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023ED2D1DDB5BEC00BD496D /* LegacyAttachmentMenu.swift */; }; D0EC6CC01EB9F58800EBF1C3 /* LegacyMediaPickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023EBB11DDA800700BD496D /* LegacyMediaPickers.swift */; }; D0EC6CC11EB9F58800EBF1C3 /* LegacyCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00E15251DDBD4E700ACF65C /* LegacyCamera.swift */; }; - D0EC6CC21EB9F58800EBF1C3 /* LegacyEmptyController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023ED2F1DDB605D00BD496D /* LegacyEmptyController.swift */; }; - D0EC6CC31EB9F58800EBF1C3 /* LegacyNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023ED311DDB60CF00BD496D /* LegacyNavigationController.swift */; }; D0EC6CC41EB9F58800EBF1C3 /* LegacyLocationPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EFD8951DDE8249009E508A /* LegacyLocationPicker.swift */; }; D0EC6CC51EB9F58800EBF1C3 /* TGDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D03B221DECB1AD00220C46 /* TGDataItem.m */; }; D0EC6CC71EB9F58800EBF1C3 /* PeerNotificationSoundStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08775081E3E59DE00A97350 /* PeerNotificationSoundStrings.swift */; }; @@ -848,13 +769,10 @@ D0EC6D301EB9F58800EBF1C3 /* RadialProgressNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DC41D6B89E10046BCD6 /* RadialProgressNode.swift */; }; D0EC6D311EB9F58800EBF1C3 /* RadialTimeoutNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CE51E378FD00080C3D5 /* RadialTimeoutNode.swift */; }; D0EC6D321EB9F58800EBF1C3 /* TextNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DC21D6B89DA0046BCD6 /* TextNode.swift */; }; - D0EC6D351EB9F58800EBF1C3 /* SearchBarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DCB1D6B8A0D0046BCD6 /* SearchBarNode.swift */; }; - D0EC6D361EB9F58800EBF1C3 /* SearchBarPlaceholderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DCC1D6B8A0D0046BCD6 /* SearchBarPlaceholderNode.swift */; }; D0EC6D371EB9F58800EBF1C3 /* SearchDisplayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DCD1D6B8A0D0046BCD6 /* SearchDisplayController.swift */; }; D0EC6D381EB9F58800EBF1C3 /* SearchDisplayControllerContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DCE1D6B8A0D0046BCD6 /* SearchDisplayControllerContentNode.swift */; }; D0EC6D3A1EB9F58800EBF1C3 /* AudioWaveformNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0568AAC1DF198130022E7DA /* AudioWaveformNode.swift */; }; D0EC6D3B1EB9F58800EBF1C3 /* EditableTokenListNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38621E3F9EFA0044D6FE /* EditableTokenListNode.swift */; }; - D0EC6D3C1EB9F58800EBF1C3 /* PhoneInputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F2121E48B61500988324 /* PhoneInputNode.swift */; }; D0EC6D4B1EB9F58800EBF1C3 /* ChatListNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF781DCA226F00761F81 /* ChatListNode.swift */; }; D0EC6D4D1EB9F58800EBF1C3 /* ChatListHoleItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DFB1D6B8A880046BCD6 /* ChatListHoleItem.swift */; }; D0EC6D4E1EB9F58800EBF1C3 /* ChatListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DFC1D6B8A880046BCD6 /* ChatListItem.swift */; }; @@ -885,8 +803,6 @@ D0EC6D681EB9F58800EBF1C3 /* AuthorizationSequenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAF21E44DE2500A2CD3A /* AuthorizationSequenceController.swift */; }; D0EC6D691EB9F58800EBF1C3 /* AuthorizationSequenceSplashController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04BB2B21E44E56200650E93 /* AuthorizationSequenceSplashController.swift */; }; D0EC6D6A1EB9F58800EBF1C3 /* AuthorizationSequenceSplashControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04BB2BA1E44EA2400650E93 /* AuthorizationSequenceSplashControllerNode.swift */; }; - D0EC6D6B1EB9F58800EBF1C3 /* AuthorizationSequenceCountrySelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F2151E48D9E000988324 /* AuthorizationSequenceCountrySelectionController.swift */; }; - D0EC6D6C1EB9F58800EBF1C3 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D050F2171E48D9EA00988324 /* AuthorizationSequenceCountrySelectionControllerNode.swift */; }; D0EC6D6D1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04BB2B41E44E58E00650E93 /* AuthorizationSequencePhoneEntryController.swift */; }; D0EC6D6E1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04BB2B81E44E5E400650E93 /* AuthorizationSequencePhoneEntryControllerNode.swift */; }; D0EC6D6F1EB9F58800EBF1C3 /* AuthorizationSequenceCodeEntryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04BB2BD1E44FD2600650E93 /* AuthorizationSequenceCodeEntryController.swift */; }; @@ -1014,21 +930,6 @@ D0EC6DF81EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DE77221D932043002B8809 /* PeerMediaCollectionInterfaceState.swift */; }; D0EC6DF91EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceStateButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0DE77241D93225E002B8809 /* PeerMediaCollectionInterfaceStateButtons.swift */; }; D0EC6DFB1EB9F58900EBF1C3 /* AvatarGalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AF91EA0FDA7006F2541 /* AvatarGalleryController.swift */; }; - D0EC6DFC1EB9F58900EBF1C3 /* GalleryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E501D6B8BDA0046BCD6 /* GalleryController.swift */; }; - D0EC6DFD1EB9F58900EBF1C3 /* GalleryControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E511D6B8BDA0046BCD6 /* GalleryControllerNode.swift */; }; - D0EC6DFE1EB9F58900EBF1C3 /* GalleryControllerPresentationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6871E8DA8C800C863B0 /* GalleryControllerPresentationState.swift */; }; - D0EC6DFF1EB9F58900EBF1C3 /* GalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E521D6B8BDA0046BCD6 /* GalleryItem.swift */; }; - D0EC6E001EB9F58900EBF1C3 /* GalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E531D6B8BDA0046BCD6 /* GalleryItemNode.swift */; }; - D0EC6E011EB9F58900EBF1C3 /* GalleryPagerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E541D6B8BDA0046BCD6 /* GalleryPagerNode.swift */; }; - D0EC6E021EB9F58900EBF1C3 /* GalleryFooterNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6801E8D9A6700C863B0 /* GalleryFooterNode.swift */; }; - D0EC6E031EB9F58900EBF1C3 /* GalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6851E8DA69D00C863B0 /* GalleryFooterContentNode.swift */; }; - D0EC6E041EB9F58900EBF1C3 /* SecretMediaPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CDB1E3776E50080C3D5 /* SecretMediaPreviewController.swift */; }; - D0EC6E061EB9F58900EBF1C3 /* ChatDocumentGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E5B1D6B8BF90046BCD6 /* ChatDocumentGalleryItem.swift */; }; - D0EC6E071EB9F58900EBF1C3 /* ChatExternalFileGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E5C1D6B8BF90046BCD6 /* ChatExternalFileGalleryItem.swift */; }; - D0EC6E081EB9F58900EBF1C3 /* ChatImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E5D1D6B8BF90046BCD6 /* ChatImageGalleryItem.swift */; }; - D0EC6E0A1EB9F58900EBF1C3 /* ChatVideoGalleryItemScrubberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E5F1D6B8BF90046BCD6 /* ChatVideoGalleryItemScrubberView.swift */; }; - D0EC6E0B1EB9F58900EBF1C3 /* ZoomableContentGalleryItemNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E601D6B8BF90046BCD6 /* ZoomableContentGalleryItemNode.swift */; }; - D0EC6E0C1EB9F58900EBF1C3 /* ChatItemGalleryFooterContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D042C6891E8DAAB000C863B0 /* ChatItemGalleryFooterContentNode.swift */; }; D0EC6E0E1EB9F58900EBF1C3 /* PeerAvatarImageGalleryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AFB1EA104A6006F2541 /* PeerAvatarImageGalleryItem.swift */; }; D0EC6E111EB9F58900EBF1C3 /* InstantPageNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0215D371E040F53001A0B1E /* InstantPageNode.swift */; }; D0EC6E121EB9F58900EBF1C3 /* InstantPageLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0215D391E041003001A0B1E /* InstantPageLayout.swift */; }; @@ -1147,7 +1048,6 @@ D0FA08C8204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C7204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift */; }; D0FA08CA2049BEAC00DD23FC /* ChatEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C92049BEAC00DD23FC /* ChatEmptyNode.swift */; }; D0FAB13E22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB13D22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift */; }; - D0FB87B21F7C4C19004DE005 /* FetchMediaUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FB87B11F7C4C19004DE005 /* FetchMediaUtils.swift */; }; D0FBE84F2273395C00B33B52 /* ChatListArchiveInfoItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FBE84E2273395C00B33B52 /* ChatListArchiveInfoItem.swift */; }; D0FC194D201F82A000FEDBB2 /* OpenResolvedUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC194C201F82A000FEDBB2 /* OpenResolvedUrl.swift */; }; D0FC408E1D5B8E7500261D9D /* TelegramUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC408D1D5B8E7500261D9D /* TelegramUITests.swift */; }; @@ -1160,7 +1060,6 @@ 0900678C21ED5EA800530762 /* WallpaperColorPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperColorPanelNode.swift; sourceTree = ""; }; 0900678E21ED8E0E00530762 /* HexColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HexColor.swift; sourceTree = ""; }; 0902838721931D960067EFBD /* LanguageSuggestionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSuggestionController.swift; sourceTree = ""; }; - 090A22162273713000694CB0 /* ChatAnimationGalleryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatAnimationGalleryItem.swift; sourceTree = ""; }; 090B48C72200BCA8005083FA /* WallpaperUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperUploadManager.swift; sourceTree = ""; }; 090E63E52195880F00E3C035 /* ContactAddItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactAddItem.swift; sourceTree = ""; }; 090E63ED2196FE3A00E3C035 /* OpenAddContact.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAddContact.swift; sourceTree = ""; }; @@ -1187,9 +1086,6 @@ 09310D1B213BC5DE0020033A /* anim_group.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_group.json; sourceTree = ""; }; 0940932322E73DFB003846A3 /* ChatSendMessageActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSendMessageActionSheetController.swift; sourceTree = ""; }; 0940932522E73E12003846A3 /* ChatSendMessageActionSheetControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSendMessageActionSheetControllerNode.swift; sourceTree = ""; }; - 0941A99F210B057200EBE194 /* OpenInActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInActionSheetController.swift; sourceTree = ""; }; - 0941A9A3210B0E2E00EBE194 /* OpenInAppIconResources.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInAppIconResources.swift; sourceTree = ""; }; - 0941A9A5210B822D00EBE194 /* OpenInOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInOptions.swift; sourceTree = ""; }; 094735022275B62B00EA2312 /* PasscodeLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasscodeLayout.swift; sourceTree = ""; }; 094735042275D71F00EA2312 /* anim_hide.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_hide.json; sourceTree = ""; }; 094735052275D72000EA2312 /* anim_unread.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_unread.json; sourceTree = ""; }; @@ -1227,8 +1123,6 @@ 09749BCC21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperGalleryDecorationNode.swift; sourceTree = ""; }; 09749BCE21F236F2008FDDE9 /* ModernCheckNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModernCheckNode.swift; sourceTree = ""; }; 09797872210633CD0077D77F /* InstantPageSettingsButtonItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageSettingsButtonItemNode.swift; sourceTree = ""; }; - 0979787B210642CB0077D77F /* WebEmbedPlayerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebEmbedPlayerNode.swift; sourceTree = ""; }; - 0979787D210646C00077D77F /* YoutubeEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YoutubeEmbedImplementation.swift; sourceTree = ""; }; 0979788021065F8B0077D77F /* VimeoUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = VimeoUserScript.js; sourceTree = ""; }; 0979788121065F8B0077D77F /* YoutubeUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = YoutubeUserScript.js; sourceTree = ""; }; 0979788221065F8C0077D77F /* Vimeo.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Vimeo.html; sourceTree = ""; }; @@ -1238,8 +1132,6 @@ 0979788621065F8C0077D77F /* TwitchUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwitchUserScript.js; sourceTree = ""; }; 0979788721065F8C0077D77F /* Youtube.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Youtube.html; sourceTree = ""; }; 0979788821065F8C0077D77F /* GenericUserScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = GenericUserScript.js; sourceTree = ""; }; - 09874E3A21075BF400E190B8 /* VimeoEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VimeoEmbedImplementation.swift; sourceTree = ""; }; - 09874E4021075C1700E190B8 /* GenericEmbedImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenericEmbedImplementation.swift; sourceTree = ""; }; 098CF79122B924E200AF6134 /* ThemeSettingsAccentColorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSettingsAccentColorItem.swift; sourceTree = ""; }; 099529A921CDB27900805E13 /* ShareProxyServerActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareProxyServerActionSheetController.swift; sourceTree = ""; }; 099529AB21CDBBB200805E13 /* QRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCode.swift; sourceTree = ""; }; @@ -1249,7 +1141,6 @@ 09A218D7229EE1B500DE6898 /* HorizontalStickerGridItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalStickerGridItem.swift; sourceTree = ""; }; 09A218D8229EE1B500DE6898 /* HorizontalStickersChatContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalStickersChatContextPanelNode.swift; sourceTree = ""; }; 09A218F422A15F1400DE6898 /* ThemeSettingsAppIconItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSettingsAppIconItem.swift; sourceTree = ""; }; - 09AE3822214C110800850BFD /* LegacySecureIdScanController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacySecureIdScanController.swift; sourceTree = ""; }; 09B4EE4621A6D33F00847FA6 /* RecentSessionsEmptyStateItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentSessionsEmptyStateItem.swift; sourceTree = ""; }; 09B4EE4C21A7B73800847FA6 /* PermissionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionController.swift; sourceTree = ""; }; 09B4EE4E21A7B75D00847FA6 /* PermissionControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionControllerNode.swift; sourceTree = ""; }; @@ -1259,7 +1150,6 @@ 09B4EE5F21AD4A0E00847FA6 /* InstantPageContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageContentNode.swift; sourceTree = ""; }; 09B4EE6121AD791600847FA6 /* InstantPageStoredState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageStoredState.swift; sourceTree = ""; }; 09C500232142BA6400EF253E /* ItemListWebsiteItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListWebsiteItem.swift; sourceTree = ""; }; - 09C9EA3721A044B500E90146 /* StringForDuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringForDuration.swift; sourceTree = ""; }; 09CE94FF2232729A00A7D2C3 /* StickerPaneSearchContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPaneSearchContentNode.swift; sourceTree = ""; }; 09CE9501223272B700A7D2C3 /* GifPaneSearchContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GifPaneSearchContentNode.swift; sourceTree = ""; }; 09CE95032236C6B300A7D2C3 /* CachedInstantPages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedInstantPages.swift; sourceTree = ""; }; @@ -1282,7 +1172,6 @@ 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuppressContactsWarning.swift; sourceTree = ""; }; 09DD5D5121ED175300D7007A /* WallpaperColorPickerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperColorPickerNode.swift; sourceTree = ""; }; 09DD88E821BAF65E000766BC /* ItemListAddressItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListAddressItem.swift; sourceTree = ""; }; - 09DD88EC21BDC8B7000766BC /* FormEditableBlockItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormEditableBlockItemNode.swift; sourceTree = ""; }; 09DD88EE21BDDE2B000766BC /* Geocoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Geocoding.swift; sourceTree = ""; }; 09DD88F221BF907C000766BC /* WebSearchRecentQueryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchRecentQueryItem.swift; sourceTree = ""; }; 09DD88F421BF9730000766BC /* WebSearchRecentQueries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchRecentQueries.swift; sourceTree = ""; }; @@ -1326,8 +1215,6 @@ 09F799FB21C3FF3000820234 /* WebSearchGalleryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchGalleryController.swift; sourceTree = ""; }; 09F79A0021C8116C00820234 /* WebSearchBadgeNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchBadgeNode.swift; sourceTree = ""; }; 09F79A0221C8225600820234 /* WebSearchVideoGalleryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchVideoGalleryItem.swift; sourceTree = ""; }; - 09F79A0621C829BC00820234 /* GalleryNavigationCheckNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryNavigationCheckNode.swift; sourceTree = ""; }; - 09F79A0821C829C700820234 /* GalleryNavigationRecipientNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryNavigationRecipientNode.swift; sourceTree = ""; }; 09F79A0A21C832F400820234 /* WebSearchGalleryFooterContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSearchGalleryFooterContentNode.swift; sourceTree = ""; }; 09F79A0C21C88E8900820234 /* LegacyWebSearchEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyWebSearchEditor.swift; sourceTree = ""; }; 09F85BA421E7821500D73170 /* ThemeGridSelectionPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeGridSelectionPanelNode.swift; sourceTree = ""; }; @@ -1391,7 +1278,6 @@ D00ACA592022897D0045D427 /* ProcessedPeerRestrictionText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProcessedPeerRestrictionText.swift; sourceTree = ""; }; D00BDA1E1EE5B69200C64C5E /* ChannelAdminController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChannelAdminController.swift; sourceTree = ""; }; D00C7CD81E36B2DB0080C3D5 /* ContactListNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactListNode.swift; sourceTree = ""; }; - D00C7CDB1E3776E50080C3D5 /* SecretMediaPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewController.swift; sourceTree = ""; }; D00C7CE51E378FD00080C3D5 /* RadialTimeoutNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadialTimeoutNode.swift; sourceTree = ""; }; D00C7CE81E379B820080C3D5 /* ChatSecretAutoremoveTimerActionSheet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatSecretAutoremoveTimerActionSheet.swift; sourceTree = ""; }; D00C7CF51E37BF680080C3D5 /* SecretChatKeyVisualization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecretChatKeyVisualization.h; sourceTree = ""; }; @@ -1404,14 +1290,8 @@ D0104F291F471DA6004E4881 /* InstantImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstantImageGalleryItem.swift; sourceTree = ""; }; D0104F2B1F471EEB004E4881 /* InstantPageGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstantPageGalleryFooterContentNode.swift; sourceTree = ""; }; D0105D591D80B957008755D8 /* ChatChannelSubscriberInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatChannelSubscriberInputPanelNode.swift; sourceTree = ""; }; - D0105D672182680E007C04A7 /* IsMediaStreamable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IsMediaStreamable.swift; sourceTree = ""; }; D010E17C22C238BC009324D4 /* RLottie.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RLottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D0119CCF20CAE75F00895300 /* LegacySecureIdAttachmentMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacySecureIdAttachmentMenu.swift; sourceTree = ""; }; D0127A0C1E6424AC003BFF2E /* ChatPinnedMessageTitlePanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatPinnedMessageTitlePanelNode.swift; sourceTree = ""; }; - D013630B208FA62400EB3653 /* SecureIdDocumentGalleryFooterContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryFooterContentNode.swift; sourceTree = ""; }; - D0147BA6206E8B4F00E40378 /* SecureIdAuthAcceptNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthAcceptNode.swift; sourceTree = ""; }; - D0147BA8206EA35000E40378 /* SecureIdDocumentGalleryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentGalleryController.swift; sourceTree = ""; }; - D0147BAA206EA6C100E40378 /* SecureIdDocumentImageGalleryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentImageGalleryItem.swift; sourceTree = ""; }; D01590A522BD460C0017C33E /* MetalAnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetalAnimationRenderer.swift; sourceTree = ""; }; D01590A722BD462C0017C33E /* SoftwareAnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftwareAnimationRenderer.swift; sourceTree = ""; }; D01590AA22BD467B0017C33E /* AnimationRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimationRenderer.swift; sourceTree = ""; }; @@ -1460,13 +1340,11 @@ D01BAA1D1ECC931D00295217 /* CallListNodeEntries.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallListNodeEntries.swift; sourceTree = ""; }; D01BAA1F1ECC9A2500295217 /* CallListNodeLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallListNodeLocation.swift; sourceTree = ""; }; D01BAA211ECE076100295217 /* CallListCallItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallListCallItem.swift; sourceTree = ""; }; - D01BAA571ED3283D00295217 /* AddFormatToStringWithRanges.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddFormatToStringWithRanges.swift; sourceTree = ""; }; D01C06AE1FBB461E001561AB /* JoinLinkPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinLinkPreviewController.swift; sourceTree = ""; }; D01C06B01FBB4643001561AB /* JoinLinkPreviewControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinLinkPreviewControllerNode.swift; sourceTree = ""; }; D01C06B21FBB49A5001561AB /* JoinLinkPreviewPeerContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinLinkPreviewPeerContentNode.swift; sourceTree = ""; }; D01C06B41FBB7720001561AB /* ChatMediaInputSettingsItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMediaInputSettingsItem.swift; sourceTree = ""; }; D01C06BD1FBCAF06001561AB /* ChatMessageBubbleMosaicLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageBubbleMosaicLayout.swift; sourceTree = ""; }; - D01C06BF1FBF118A001561AB /* MessageUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageUtils.swift; sourceTree = ""; }; D01C2AA01E758F90001F6F9A /* NavigateToChatController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NavigateToChatController.swift; sourceTree = ""; }; D01C2AAA1E75E010001F6F9A /* TwoStepVerificationUnlockController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoStepVerificationUnlockController.swift; sourceTree = ""; }; D01C99771F4F382C00DCFAF6 /* InstantPageSettingsItemTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageSettingsItemTheme.swift; sourceTree = ""; }; @@ -1515,15 +1393,12 @@ D02383831DDFA22C004018B6 /* ListMessageHoleItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListMessageHoleItem.swift; sourceTree = ""; }; D023EBB11DDA800700BD496D /* LegacyMediaPickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyMediaPickers.swift; sourceTree = ""; }; D023ED2D1DDB5BEC00BD496D /* LegacyAttachmentMenu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyAttachmentMenu.swift; sourceTree = ""; }; - D023ED2F1DDB605D00BD496D /* LegacyEmptyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyEmptyController.swift; sourceTree = ""; }; - D023ED311DDB60CF00BD496D /* LegacyNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyNavigationController.swift; sourceTree = ""; }; D025402222E1C92D00AC0195 /* ChatSlowmodeItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSlowmodeItem.swift; sourceTree = ""; }; D025402422E1E00100AC0195 /* ChatSlowmodeHintController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSlowmodeHintController.swift; sourceTree = ""; }; D025402622E1F23000AC0195 /* ChatSendButtonRadialStatusNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSendButtonRadialStatusNode.swift; sourceTree = ""; }; D025402822E1F7F500AC0195 /* ChatTextInputSlowmodePlaceholderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTextInputSlowmodePlaceholderNode.swift; sourceTree = ""; }; D025A4221F79344500563950 /* FetchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchManager.swift; sourceTree = ""; }; D025A4251F79428E00563950 /* FetchManagerLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchManagerLocation.swift; sourceTree = ""; }; - D02660931F34CE5C000E2DC5 /* LegacyLocationVenueIconDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyLocationVenueIconDataSource.swift; sourceTree = ""; }; D02B198921F1DA9E0094A764 /* SharedAccountContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedAccountContext.swift; sourceTree = ""; }; D02B2B9720810DA00062476B /* StickerPaneSearchStickerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPaneSearchStickerItem.swift; sourceTree = ""; }; D02B676220800A00001A864A /* PaneSearchBarPlaceholderItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaneSearchBarPlaceholderItem.swift; sourceTree = ""; }; @@ -1531,19 +1406,12 @@ D02BE0761D9190EF000889C2 /* GridMessageItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridMessageItem.swift; sourceTree = ""; }; D02C81702177729000CD1006 /* NotificationExceptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationExceptions.swift; sourceTree = ""; }; D02C81722177AC5900CD1006 /* NotificationSearchItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSearchItem.swift; sourceTree = ""; }; - D02D60AD206BD47300FEFE1E /* SecureIdDocumentTypeSelectionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentTypeSelectionController.swift; sourceTree = ""; }; - D02D60B0206C189900FEFE1E /* SecureIdPlaintextFormController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormController.swift; sourceTree = ""; }; - D02D60B2206C18A600FEFE1E /* SecureIdPlaintextFormControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdPlaintextFormControllerNode.swift; sourceTree = ""; }; - D02D60C7206E705D00FEFE1E /* SecureIdValueFormPhoneItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormPhoneItem.swift; sourceTree = ""; }; D02D634922B85B94006BE519 /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; }; D02DADBE2138D76F00116225 /* Vision.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vision.framework; path = System/Library/Frameworks/Vision.framework; sourceTree = SDKROOT; }; D02F4AE81FCF370B004DFBAE /* ChatMessageInteractiveMediaBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageInteractiveMediaBadge.swift; sourceTree = ""; }; - D02F4AEF1FD4C46D004DFBAE /* SystemVideoContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemVideoContent.swift; sourceTree = ""; }; D035734A22B5CCCA00F0920D /* LegacyBuffer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyBuffer.swift; sourceTree = ""; }; - D0380DA8204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretMediaPreviewFooterContentNode.swift; sourceTree = ""; }; D0380DAC204ED434000414AB /* LegacyLiveUploadInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyLiveUploadInterface.swift; sourceTree = ""; }; D0380DB7204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatInstantVideoMessageDurationNode.swift; sourceTree = ""; }; - D0383ED3207CFBB900C45548 /* GalleryThumbnailContainerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryThumbnailContainerNode.swift; sourceTree = ""; }; D0383EE3207D292800C45548 /* EmojisChatInputContextPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojisChatInputContextPanelNode.swift; sourceTree = ""; }; D0383EE5207D299600C45548 /* EmojisChatInputPanelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojisChatInputPanelItem.swift; sourceTree = ""; }; D038AC5222F88A3600320981 /* ImageBlur.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageBlur.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1551,7 +1419,6 @@ D039EB021DEAEFEE00886EBC /* ChatTextInputAudioRecordingOverlayButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingOverlayButton.swift; sourceTree = ""; }; D039EB071DEC725600886EBC /* ChatTextInputAudioRecordingTimeNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingTimeNode.swift; sourceTree = ""; }; D039EB091DEC7A8700886EBC /* ChatTextInputAudioRecordingCancelIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingCancelIndicator.swift; sourceTree = ""; }; - D039FB1821711B5D00BD1BAD /* PlatformVideoContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformVideoContent.swift; sourceTree = ""; }; D03AA4DE202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatContextResultPeekContentNode.swift; sourceTree = ""; }; D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPreviewPeekContent.swift; sourceTree = ""; }; D03ADB471D703268005A521C /* ChatInterfaceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatInterfaceState.swift; sourceTree = ""; }; @@ -1571,12 +1438,6 @@ D04281FB200E61BC009DDE36 /* ChatRecentActionsInteraction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsInteraction.swift; sourceTree = ""; }; D04281FD200E639A009DDE36 /* ChatRecentActionsTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsTitleView.swift; sourceTree = ""; }; D04281FF200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecentActionsHistoryTransition.swift; sourceTree = ""; }; - D042C6801E8D9A6700C863B0 /* GalleryFooterNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterNode.swift; sourceTree = ""; }; - D042C6851E8DA69D00C863B0 /* GalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryFooterContentNode.swift; sourceTree = ""; }; - D042C6871E8DA8C800C863B0 /* GalleryControllerPresentationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerPresentationState.swift; sourceTree = ""; }; - D042C6891E8DAAB000C863B0 /* ChatItemGalleryFooterContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatItemGalleryFooterContentNode.swift; sourceTree = ""; }; - D0430AFF1FF4570500A35ADD /* WebController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebController.swift; sourceTree = ""; }; - D0430B011FF4584100A35ADD /* WebControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebControllerNode.swift; sourceTree = ""; }; D0439B5A228EC4A00067E026 /* ChatMessagePhoneNumberRequestContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessagePhoneNumberRequestContentNode.swift; sourceTree = ""; }; D045549921B2F173007A6DD9 /* libturbojpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libturbojpeg.a; path = "third-party/libjpeg-turbo/libturbojpeg.a"; sourceTree = ""; }; D04554A321B42982007A6DD9 /* ConfirmPhoneNumberController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmPhoneNumberController.swift; sourceTree = ""; }; @@ -1584,7 +1445,6 @@ D0471B481EFD59170074D609 /* BotCheckoutControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutControllerNode.swift; sourceTree = ""; }; D0471B4A1EFD64AC0074D609 /* BotCheckoutHeaderItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutHeaderItem.swift; sourceTree = ""; }; D0471B4E1EFD84600074D609 /* BotCheckoutPriceItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutPriceItem.swift; sourceTree = ""; }; - D0471B501EFD872F0074D609 /* CurrencyFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrencyFormat.swift; sourceTree = ""; }; D0471B531EFD8ECA0074D609 /* currencies.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = currencies.json; path = TelegramUI/Resources/currencies.json; sourceTree = ""; }; D0471B551EFDB40F0074D609 /* BotCheckoutActionButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutActionButton.swift; sourceTree = ""; }; D0471B571EFE6D020074D609 /* BotCheckoutInfoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutInfoController.swift; sourceTree = ""; }; @@ -1594,9 +1454,6 @@ D0471B5F1EFEB5A70074D609 /* BotPaymentTextItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotPaymentTextItemNode.swift; sourceTree = ""; }; D0471B611EFEB5B70074D609 /* BotPaymentSwitchItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotPaymentSwitchItemNode.swift; sourceTree = ""; }; D0471B631EFEB5CB0074D609 /* BotPaymentItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotPaymentItemNode.swift; sourceTree = ""; }; - D0477D1C1F617E8900412B44 /* NativeVideoContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeVideoContent.swift; sourceTree = ""; }; - D0477D1E1F619E0700412B44 /* GalleryVideoDecoration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryVideoDecoration.swift; sourceTree = ""; }; - D0477D201F61A47600412B44 /* UniversalVideoContentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalVideoContentManager.swift; sourceTree = ""; }; D04791661E79A22000F18979 /* ItemListStickerPackItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListStickerPackItem.swift; sourceTree = ""; }; D0486F091E523C8500091F0C /* GroupInfoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupInfoController.swift; sourceTree = ""; }; D048B338203C532800038D05 /* ChatMediaInputPane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMediaInputPane.swift; sourceTree = ""; }; @@ -1623,9 +1480,6 @@ D04ECD711FFBF22B00DE9029 /* OpenUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenUrl.swift; sourceTree = ""; }; D050A463229C052A0044F11A /* ChannelDiscussionGroupSetupSearchItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelDiscussionGroupSetupSearchItem.swift; sourceTree = ""; }; D050A465229C06460044F11A /* ChannelDiscussionGroupSearchContainerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelDiscussionGroupSearchContainerNode.swift; sourceTree = ""; }; - D050F2121E48B61500988324 /* PhoneInputNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneInputNode.swift; sourceTree = ""; }; - D050F2151E48D9E000988324 /* AuthorizationSequenceCountrySelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionController.swift; sourceTree = ""; }; - D050F2171E48D9EA00988324 /* AuthorizationSequenceCountrySelectionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceCountrySelectionControllerNode.swift; sourceTree = ""; }; D05174AA1EAA5B4700A1BF36 /* WallpaperGalleryToolbarNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WallpaperGalleryToolbarNode.swift; sourceTree = ""; }; D05174C21EAE583800A1BF36 /* TelegramRootController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramRootController.swift; sourceTree = ""; }; D0528E551E65750600E2FEF5 /* SecretChatHandshakeStatusInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SecretChatHandshakeStatusInputPanelNode.swift; sourceTree = ""; }; @@ -1661,9 +1515,6 @@ D05D8B392192FC460064586F /* LocalizationListController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationListController.swift; sourceTree = ""; }; D05D8B3E2192FC6E0064586F /* LocalizationListControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationListControllerNode.swift; sourceTree = ""; }; D05D8B402192FC8A0064586F /* LocalizationListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationListItem.swift; sourceTree = ""; }; - D05D8B732195CD890064586F /* SetupTwoStepVerificationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationController.swift; sourceTree = ""; }; - D05D8B752195CD930064586F /* SetupTwoStepVerificationControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationControllerNode.swift; sourceTree = ""; }; - D05D8B772195E0050064586F /* SetupTwoStepVerificationContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupTwoStepVerificationContentNode.swift; sourceTree = ""; }; D060183F22F35D1C00796784 /* MergeLists.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MergeLists.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D060184122F35D2000796784 /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D060184322F35D2400796784 /* ProgressNavigationButtonNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ProgressNavigationButtonNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1674,17 +1525,11 @@ D0613FD41E6064D200202CDB /* ConvertToSupergroupController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvertToSupergroupController.swift; sourceTree = ""; }; D06350AD2229A7F800FA2B32 /* InChatPrefetchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InChatPrefetchManager.swift; sourceTree = ""; }; D0642EFB1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryNavigationButtons.swift; sourceTree = ""; }; - D064EF861F69A06F00AC0398 /* MessageContentKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageContentKind.swift; sourceTree = ""; }; D0671F2C2145AB28000A8AE7 /* LegacyAvatarPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyAvatarPicker.swift; sourceTree = ""; }; D0684A031F6C3AD50059F570 /* ChatListTypingNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListTypingNode.swift; sourceTree = ""; }; D06879561DB8F22200424BBD /* FetchCachedRepresentations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchCachedRepresentations.swift; sourceTree = ""; }; D069F5CF212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPanePeerSpecificSetupGridItem.swift; sourceTree = ""; }; D06BB8811F58994B0084FC30 /* LegacyInstantVideoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyInstantVideoController.swift; sourceTree = ""; }; - D06BEC761F62F68B0035A545 /* OverlayUniversalVideoNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayUniversalVideoNode.swift; sourceTree = ""; }; - D06BEC891F6597A80035A545 /* OverlayVideoDecoration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayVideoDecoration.swift; sourceTree = ""; }; - D06BEC8B1F65E30A0035A545 /* WebEmbedVideoContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebEmbedVideoContent.swift; sourceTree = ""; }; - D06CF82620D0080200AC4CFF /* SecureIdAuthListContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListContentNode.swift; sourceTree = ""; }; - D06CF82820D0119500AC4CFF /* SecureIdAuthListFieldNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthListFieldNode.swift; sourceTree = ""; }; D06E0F8D1F79ABFB003CF3DD /* ChatLoadingNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatLoadingNode.swift; sourceTree = ""; }; D06E4AC31E84806300627D1D /* FetchPhotoLibraryImageResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPhotoLibraryImageResource.swift; sourceTree = ""; }; D06E4C302134910400088087 /* ChatListEmptyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListEmptyNode.swift; sourceTree = ""; }; @@ -1709,11 +1554,8 @@ D0754D211EEDF89900884F6E /* ChatMessageInvoiceBubbleContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageInvoiceBubbleContentNode.swift; sourceTree = ""; }; D0754D261EEE10C800884F6E /* BotCheckoutController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BotCheckoutController.swift; sourceTree = ""; }; D07551871DDA4BB50073E051 /* TelegramLegacyComponents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TelegramLegacyComponents.framework; path = "../TelegramLegacyComponents/build/Debug-iphoneos/TelegramLegacyComponents.framework"; sourceTree = ""; }; - D075518A1DDA4D7D0073E051 /* LegacyController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyController.swift; sourceTree = ""; }; - D075518C1DDA4E0B0073E051 /* LegacyControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyControllerNode.swift; sourceTree = ""; }; D075518E1DDA4F9E0073E051 /* SSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SSignalKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/SSignalKit.framework"; sourceTree = ""; }; D07551901DDA4FC70073E051 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - D07551921DDA540F0073E051 /* TelegramInitializeLegacyComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TelegramInitializeLegacyComponents.swift; sourceTree = ""; }; D0760B231E9D015D00F1F3C4 /* PasscodeOptionsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasscodeOptionsController.swift; sourceTree = ""; }; D077C5C022B59A800097D617 /* ApplicationContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApplicationContext.swift; sourceTree = ""; }; D07827BC1E004A3400071108 /* ChatListSearchItemHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListSearchItemHeader.swift; sourceTree = ""; }; @@ -1777,22 +1619,11 @@ D08D452B1D5E340300A7428A /* Postbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Postbox.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/Postbox.framework"; sourceTree = ""; }; D08D452C1D5E340300A7428A /* SwiftSignalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftSignalKit.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/SwiftSignalKit.framework"; sourceTree = ""; }; D08D452D1D5E340300A7428A /* TelegramCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TelegramCore.framework; path = "../../../../Library/Developer/Xcode/DerivedData/Telegram-iOS-diblohvjozhgaifjcniwdlixlilx/Build/Products/Debug-iphonesimulator/TelegramCore.framework"; sourceTree = ""; }; - D08D7E78209FA2930005D80C /* SecureIdValues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValues.swift; sourceTree = ""; }; D091C7A31F8EBB1E00D7DE13 /* ChatPresentationData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatPresentationData.swift; sourceTree = ""; }; D091C7A51F8ECEA300D7DE13 /* SettingsThemeWallpaperNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsThemeWallpaperNode.swift; sourceTree = ""; }; D09250051FE5371D003F693F /* GlobalExperimentalSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalExperimentalSettings.swift; sourceTree = ""; }; - D093D7D82062A9CA00BC3599 /* SecureIdAuthControllerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerState.swift; sourceTree = ""; }; - D093D7DA2062CFF500BC3599 /* SecureIdAuthFormContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormContentNode.swift; sourceTree = ""; }; - D093D7DC2062D09A00BC3599 /* SecureIdAuthFormFieldNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthFormFieldNode.swift; sourceTree = ""; }; - D093D7DE2062F3F000BC3599 /* SecureIdDocumentFormController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormController.swift; sourceTree = ""; }; - D093D7E12062F40100BC3599 /* SecureIdDocumentFormControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdDocumentFormControllerNode.swift; sourceTree = ""; }; D093D7E62063E57F00BC3599 /* BotPaymentActionItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BotPaymentActionItemNode.swift; sourceTree = ""; }; D093D80720654A2900BC3599 /* BotPaymentDateItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BotPaymentDateItemNode.swift; sourceTree = ""; }; - D093D81C206994FD00BC3599 /* FindSecureIdValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindSecureIdValue.swift; sourceTree = ""; }; - D093D81F20699A7300BC3599 /* FormController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormController.swift; sourceTree = ""; }; - D093D82120699A7C00BC3599 /* FormControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerNode.swift; sourceTree = ""; }; - D093D8232069A06600BC3599 /* FormControllerScrollerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerScrollerNode.swift; sourceTree = ""; }; - D093D8252069A31700BC3599 /* FormControllerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerItem.swift; sourceTree = ""; }; D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleAvatarsNode.swift; sourceTree = ""; }; D0943AFD1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMultipleAvatarsNavigationNode.swift; sourceTree = ""; }; D0943AFF1FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatFeedNavigationInputPanelNode.swift; sourceTree = ""; }; @@ -1801,20 +1632,15 @@ D0955FB32191278C00F89427 /* PresentationStrings.mapping */ = {isa = PBXFileReference; lastKnownFileType = file; name = PresentationStrings.mapping; path = TelegramUI/Resources/PresentationStrings.mapping; sourceTree = ""; }; D097C26720DD0A1D007BB4B8 /* PeerReportController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeerReportController.swift; sourceTree = ""; }; D099261E1E69791E00D95539 /* GroupsInCommonController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupsInCommonController.swift; sourceTree = ""; }; - D099D74C1EEFEE1500A3128C /* GameController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; - D099D74E1EEFEE6A00A3128C /* GameControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerNode.swift; sourceTree = ""; }; - D099D7501EEFF91E00A3128C /* GameControllerTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameControllerTitleView.swift; sourceTree = ""; }; D099E21F229405BB00561B75 /* Weak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = ""; }; D099EA1E1DE7450B001AF5A8 /* HorizontalListContextResultsChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalListContextResultsChatInputContextPanelNode.swift; sourceTree = ""; }; D099EA201DE7451D001AF5A8 /* HorizontalListContextResultsChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalListContextResultsChatInputPanelItem.swift; sourceTree = ""; }; D099EA261DE765DB001AF5A8 /* ManagedMediaId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedMediaId.swift; sourceTree = ""; }; D099EA2C1DE76782001AF5A8 /* PeerMessageManagedMediaId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMessageManagedMediaId.swift; sourceTree = ""; }; D099EA2E1DE775BB001AF5A8 /* ChatContextResultManagedMediaId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatContextResultManagedMediaId.swift; sourceTree = ""; }; - D09D88701F86D36700BEB4C9 /* CountryList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryList.swift; sourceTree = ""; }; D09D88721F86D56B00BEB4C9 /* AuthorizationLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationLayout.swift; sourceTree = ""; }; D09E637B1F0E7C28003444CD /* SharedMediaPlayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedMediaPlayer.swift; sourceTree = ""; }; D09E637E1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMessagesMediaPlaylist.swift; sourceTree = ""; }; - D09E63A91F0FC681003444CD /* PictureInPictureVideoControlsNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PictureInPictureVideoControlsNode.swift; sourceTree = ""; }; D09E63AF1F1010FE003444CD /* Contacts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Contacts.framework; path = System/Library/Frameworks/Contacts.framework; sourceTree = SDKROOT; }; D09E63B11F11289A003444CD /* PassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PassKit.framework; path = System/Library/Frameworks/PassKit.framework; sourceTree = SDKROOT; }; D09E778622F8E9ED00B9CCA7 /* ContextUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ContextUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1835,13 +1661,11 @@ D09E77A822FA5CEA00B9CCA7 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Tuples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UrlEscaping.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D09F9DCE20768DAF00DB4DE1 /* SecureIdLocalResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdLocalResource.swift; sourceTree = ""; }; D0A11BF91E7836C20081CE03 /* ChangePhoneNumberIntroController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePhoneNumberIntroController.swift; sourceTree = ""; }; D0A11BFB1E7840750081CE03 /* ChangePhoneNumberController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePhoneNumberController.swift; sourceTree = ""; }; D0A11BFD1E7840A50081CE03 /* ChangePhoneNumberControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePhoneNumberControllerNode.swift; sourceTree = ""; }; D0A749961E3AA25200AD786E /* NotificationSoundSelection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationSoundSelection.swift; sourceTree = ""; }; D0A8998C217A294100759EE6 /* SaveIncomingMediaController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveIncomingMediaController.swift; sourceTree = ""; }; - D0A8BBA01F61EE83000F03FD /* UniversalVideoGalleryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalVideoGalleryItem.swift; sourceTree = ""; }; D0AA29AD1F72770D00C050AC /* ChatListItemStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListItemStrings.swift; sourceTree = ""; }; D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayPlayerControlsNode.swift; sourceTree = ""; }; D0AB0BB01D6718DA002C78E7 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; @@ -1920,7 +1744,6 @@ D0B37C5B1F8D22AE004252DF /* ThemeSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSettingsController.swift; sourceTree = ""; }; D0B37C5D1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSettingsChatPreviewItem.swift; sourceTree = ""; }; D0B37C5F1F8D286E004252DF /* ThemeSettingsFontSizeItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeSettingsFontSizeItem.swift; sourceTree = ""; }; - D0B3AC7F2142E2E900CD1374 /* ResetPasswordController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetPasswordController.swift; sourceTree = ""; }; D0B417C21D7DE54E004562A4 /* ChatPresentationInterfaceState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatPresentationInterfaceState.swift; sourceTree = ""; }; D0B4AF871EC112ED00D51FF6 /* CallKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CallKit.framework; path = System/Library/Frameworks/CallKit.framework; sourceTree = SDKROOT; }; D0B69C3820EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageInteractiveInstantVideoNode.swift; sourceTree = ""; }; @@ -1944,12 +1767,6 @@ D0BCC3D1203F0A6C008126C2 /* StringForMessageTimestampStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringForMessageTimestampStatus.swift; sourceTree = ""; }; D0BCC3D320404CC7008126C2 /* ChatMessageActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionSheetController.swift; sourceTree = ""; }; D0BCC3D520404CD8008126C2 /* ChatMessageActionSheetControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionSheetControllerNode.swift; sourceTree = ""; }; - D0BE3036206139F500FBE6D8 /* ImageCompression.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCompression.swift; sourceTree = ""; }; - D0BE30402061B80100FBE6D8 /* SecureIdAuthController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthController.swift; sourceTree = ""; }; - D0BE30422061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthControllerNode.swift; sourceTree = ""; }; - D0BE30442061C09000FBE6D8 /* SecureIdAuthContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthContentNode.swift; sourceTree = ""; }; - D0BE30462061C0BC00FBE6D8 /* SecureIdAuthPasswordOptionContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordOptionContentNode.swift; sourceTree = ""; }; - D0BE30482061C0F500FBE6D8 /* SecureIdAuthHeaderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthHeaderNode.swift; sourceTree = ""; }; D0BE383B1E7C3E51000079AF /* StickerPreviewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewController.swift; sourceTree = ""; }; D0BE931A1E92DFBA00DCC1E6 /* StickerPreviewControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickerPreviewControllerNode.swift; sourceTree = ""; }; D0BFAE4520AB04FB00793CF2 /* ChatRestrictedInputPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRestrictedInputPanelNode.swift; sourceTree = ""; }; @@ -1988,20 +1805,32 @@ D0C9C12022FE40BE00FAB518 /* ImageTransparency.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageTransparency.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0C9C14C22FE439B00FAB518 /* TelegramNotices.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramNotices.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0C9C17622FEF22200FAB518 /* TelegramPermissions.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPermissions.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1B523001F6200FAB518 /* GameUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GameUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1DB230020CA00FAB518 /* WebUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2562300238900FAB518 /* PassportUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PassportUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2822300A05100FAB518 /* PhoneInputNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PhoneInputNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2B02300A1C400FAB518 /* CountrySelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CountrySelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C2D12300A2DB00FAB518 /* SearchBarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SearchBarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3342300AA0B00FAB518 /* GalleryUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GalleryUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3972300B46200FAB518 /* TelegramUniversalVideoContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUniversalVideoContent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3C42300B73A00FAB518 /* WebsiteType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebsiteType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3FE2300D5A200FAB518 /* ScreenCaptureDetection.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ScreenCaptureDetection.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C43C2300D6E700FAB518 /* OpenInExternalAppUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OpenInExternalAppUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C47E2300E31F00FAB518 /* LegacyUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4C02300E5BB00FAB518 /* ImageCompression.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageCompression.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C4DB2300E67900FAB518 /* DateSelectionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DateSelectionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C52A2300EFA800FAB518 /* PasswordSetupUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PasswordSetupUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0CAD90020AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatEditInterfaceMessageState.swift; sourceTree = ""; }; D0CB27CE20C17A4A001ACF93 /* TermsOfServiceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceController.swift; sourceTree = ""; }; D0CB27D120C17A7F001ACF93 /* TermsOfServiceControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceControllerNode.swift; sourceTree = ""; }; D0CCD61A222E8B4500EE1E08 /* TimeBasedVideoPreload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeBasedVideoPreload.swift; sourceTree = ""; }; D0CE1BD21E51BC6100404327 /* DebugController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugController.swift; sourceTree = ""; }; D0CE67931F7DB45100FFB557 /* ChatMessageContactBubbleContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageContactBubbleContentNode.swift; sourceTree = ""; }; - D0CE6F6D213EDF8800BCD44B /* SecureIdAuthPasswordSetupContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdAuthPasswordSetupContentNode.swift; sourceTree = ""; }; D0CE6F6F213EEE5000BCD44B /* CreatePasswordController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatePasswordController.swift; sourceTree = ""; }; D0CE8CE41F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTextInputAccessoryItem.swift; sourceTree = ""; }; D0CE8CE61F6F35A300AA2DB0 /* ChatTextInputPanelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTextInputPanelState.swift; sourceTree = ""; }; - D0CFBB851FD715E700B65C0D /* LegacyHTTPOperationImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyHTTPOperationImpl.swift; sourceTree = ""; }; D0CFBB901FD881A600B65C0D /* AudioRecordningToneData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecordningToneData.swift; sourceTree = ""; }; D0CFBB941FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayInstantVideoDecoration.swift; sourceTree = ""; }; - D0CFBB961FD8B0F700B65C0D /* ChatBubbleInstantVideoDecoration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatBubbleInstantVideoDecoration.swift; sourceTree = ""; }; D0D03AE41DECAE8900220C46 /* ManagedAudioRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedAudioRecorder.swift; sourceTree = ""; }; D0D03AE81DECB0FE00220C46 /* diag_range.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = diag_range.c; sourceTree = ""; }; D0D03AE91DECB0FE00220C46 /* diag_range.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diag_range.h; sourceTree = ""; }; @@ -2046,7 +1875,6 @@ D0DC35451DE35805000195EB /* MentionChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MentionChatInputPanelItem.swift; sourceTree = ""; }; D0DC35491DE366CD000195EB /* CommandChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandChatInputContextPanelNode.swift; sourceTree = ""; }; D0DC354B1DE366DE000195EB /* CommandChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandChatInputPanelItem.swift; sourceTree = ""; }; - D0DE5804205B202500C356A8 /* ScreenCaptureDetection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenCaptureDetection.swift; sourceTree = ""; }; D0DE66051F9A51E200EF4AE9 /* GalleryHiddenMediaManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryHiddenMediaManager.swift; sourceTree = ""; }; D0DE76F61D91BA3D002B8809 /* GridHoleItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridHoleItem.swift; sourceTree = ""; }; D0DE76FF1D92F1EB002B8809 /* ChatTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTitleView.swift; sourceTree = ""; }; @@ -2069,21 +1897,10 @@ D0E1199D229809B6008CAE3A /* ChannelDiscussionGroupActionSheetItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelDiscussionGroupActionSheetItem.swift; sourceTree = ""; }; D0E23DD71E805E2600B9B6D2 /* FeaturedStickerPacksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeaturedStickerPacksController.swift; sourceTree = ""; }; D0E23DDC1E8081A200B9B6D2 /* ArchivedStickerPacksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ArchivedStickerPacksController.swift; sourceTree = ""; }; - D0E266FC1F66706500BFC79F /* ChatBubbleVideoDecoration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatBubbleVideoDecoration.swift; sourceTree = ""; }; D0E2CE6B222930540084E3DD /* PrefetchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefetchManager.swift; sourceTree = ""; }; D0E305A41E5B2BFB00D7A3A2 /* ValidateAddressNameInteractive.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidateAddressNameInteractive.swift; sourceTree = ""; }; D0E35A061DE4803400BC6096 /* VerticalListContextResultsChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalListContextResultsChatInputContextPanelNode.swift; sourceTree = ""; }; D0E35A081DE4804900BC6096 /* VerticalListContextResultsChatInputPanelItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalListContextResultsChatInputPanelItem.swift; sourceTree = ""; }; - D0E412C52069B60600BEE4A2 /* FormControllerHeaderItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerHeaderItem.swift; sourceTree = ""; }; - D0E412C7206A537600BEE4A2 /* FormBlockItemNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormBlockItemNode.swift; sourceTree = ""; }; - D0E412C9206A5B0B00BEE4A2 /* FormControllerTextInputItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerTextInputItem.swift; sourceTree = ""; }; - D0E412CB206A6B2300BEE4A2 /* FormControllerActionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerActionItem.swift; sourceTree = ""; }; - D0E412CD206A707400BEE4A2 /* FormControllerTextItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerTextItem.swift; sourceTree = ""; }; - D0E412CF206A75B200BEE4A2 /* FormControllerDetailActionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormControllerDetailActionItem.swift; sourceTree = ""; }; - D0E412D2206A7DC100BEE4A2 /* DateSelectionActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateSelectionActionSheetController.swift; sourceTree = ""; }; - D0E412D4206A842900BEE4A2 /* SecureIdVerificationDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocument.swift; sourceTree = ""; }; - D0E412D9206A894800BEE4A2 /* SecureIdValueFormFileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdValueFormFileItem.swift; sourceTree = ""; }; - D0E412DE206AA00500BEE4A2 /* SecureIdVerificationDocumentsContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureIdVerificationDocumentsContext.swift; sourceTree = ""; }; D0E7A1BC1D8C246D00C37A6F /* ChatHistoryListNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryListNode.swift; sourceTree = ""; }; D0E7A1BE1D8C24B900C37A6F /* ChatHistoryViewForLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryViewForLocation.swift; sourceTree = ""; }; D0E7A1C01D8C258D00C37A6F /* ChatHistoryEntriesForView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryEntriesForView.swift; sourceTree = ""; }; @@ -2213,11 +2030,7 @@ D0E9BADB1F0574D800F079A4 /* STPBankAccountParams.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STPBankAccountParams.m; sourceTree = ""; }; D0E9BAE51F0574FF00F079A4 /* STPCustomer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STPCustomer.h; sourceTree = ""; }; D0E9BAE61F0574FF00F079A4 /* STPCustomer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = STPCustomer.m; sourceTree = ""; }; - D0EB41F21F2FEAB800838FE6 /* LegacyComponentsStickers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyComponentsStickers.swift; sourceTree = ""; }; D0EB41F41F30D26A00838FE6 /* LegacySuggestionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacySuggestionContext.swift; sourceTree = ""; }; - D0EB41F61F30D4A800838FE6 /* LegacyMediaLocations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyMediaLocations.swift; sourceTree = ""; }; - D0EB41F81F30E5B700838FE6 /* LegacyPeerAvatarPlaceholderDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyPeerAvatarPlaceholderDataSource.swift; sourceTree = ""; }; - D0EB41FA1F30E75000838FE6 /* LegacyImageDownloadActor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyImageDownloadActor.swift; sourceTree = ""; }; D0EB41FE1F30ED4F00838FE6 /* LegacyImageProcessors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyImageProcessors.h; sourceTree = ""; }; D0EB41FF1F30ED4F00838FE6 /* LegacyImageProcessors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LegacyImageProcessors.m; sourceTree = ""; }; D0EB42041F3143AB00838FE6 /* LegacyComponentsResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = LegacyComponentsResources.bundle; path = ../LegacyComponents/LegacyComponents/Resources/LegacyComponentsResources.bundle; sourceTree = ""; }; @@ -2259,8 +2072,6 @@ D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = TelegramUI.xcconfig; path = TelegramUI/Config/TelegramUI.xcconfig; sourceTree = ""; }; D0F69DC21D6B89DA0046BCD6 /* TextNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextNode.swift; sourceTree = ""; }; D0F69DC41D6B89E10046BCD6 /* RadialProgressNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadialProgressNode.swift; sourceTree = ""; }; - D0F69DCB1D6B8A0D0046BCD6 /* SearchBarNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBarNode.swift; sourceTree = ""; }; - D0F69DCC1D6B8A0D0046BCD6 /* SearchBarPlaceholderNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBarPlaceholderNode.swift; sourceTree = ""; }; D0F69DCD1D6B8A0D0046BCD6 /* SearchDisplayController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchDisplayController.swift; sourceTree = ""; }; D0F69DCE1D6B8A0D0046BCD6 /* SearchDisplayControllerContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchDisplayControllerContentNode.swift; sourceTree = ""; }; D0F69DF81D6B8A880046BCD6 /* ChatListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListController.swift; sourceTree = ""; }; @@ -2295,16 +2106,6 @@ D0F69E2C1D6B8B030046BCD6 /* ChatUnreadItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatUnreadItem.swift; sourceTree = ""; }; D0F69E401D6B8B7E0046BCD6 /* ChatTextInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputPanelNode.swift; sourceTree = ""; }; D0F69E451D6B8B950046BCD6 /* ChatHistoryNavigationButtonNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryNavigationButtonNode.swift; sourceTree = ""; }; - D0F69E501D6B8BDA0046BCD6 /* GalleryController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryController.swift; sourceTree = ""; }; - D0F69E511D6B8BDA0046BCD6 /* GalleryControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryControllerNode.swift; sourceTree = ""; }; - D0F69E521D6B8BDA0046BCD6 /* GalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItem.swift; sourceTree = ""; }; - D0F69E531D6B8BDA0046BCD6 /* GalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryItemNode.swift; sourceTree = ""; }; - D0F69E541D6B8BDA0046BCD6 /* GalleryPagerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GalleryPagerNode.swift; sourceTree = ""; }; - D0F69E5B1D6B8BF90046BCD6 /* ChatDocumentGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatDocumentGalleryItem.swift; sourceTree = ""; }; - D0F69E5C1D6B8BF90046BCD6 /* ChatExternalFileGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatExternalFileGalleryItem.swift; sourceTree = ""; }; - D0F69E5D1D6B8BF90046BCD6 /* ChatImageGalleryItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatImageGalleryItem.swift; sourceTree = ""; }; - D0F69E5F1D6B8BF90046BCD6 /* ChatVideoGalleryItemScrubberView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatVideoGalleryItemScrubberView.swift; sourceTree = ""; }; - D0F69E601D6B8BF90046BCD6 /* ZoomableContentGalleryItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZoomableContentGalleryItemNode.swift; sourceTree = ""; }; D0F69E6D1D6B8C340046BCD6 /* ContactsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsController.swift; sourceTree = ""; }; D0F69E6E1D6B8C340046BCD6 /* ContactsControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsControllerNode.swift; sourceTree = ""; }; D0F69E6F1D6B8C340046BCD6 /* ContactsPeerItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsPeerItem.swift; sourceTree = ""; }; @@ -2329,7 +2130,6 @@ D0FA0AC41E77431A005BB9B7 /* InstalledStickerPacksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstalledStickerPacksController.swift; sourceTree = ""; }; D0FA35001EA6127000E56FFA /* StorageUsageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageUsageController.swift; sourceTree = ""; }; D0FAB13D22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageBubbleBackdrop.swift; sourceTree = ""; }; - D0FB87B11F7C4C19004DE005 /* FetchMediaUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchMediaUtils.swift; sourceTree = ""; }; D0FBE84E2273395C00B33B52 /* ChatListArchiveInfoItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListArchiveInfoItem.swift; sourceTree = ""; }; D0FC194C201F82A000FEDBB2 /* OpenResolvedUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenResolvedUrl.swift; sourceTree = ""; }; D0FC40821D5B8E7400261D9D /* TelegramUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramUI.h; sourceTree = ""; }; @@ -2347,6 +2147,21 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D0C9C52B2300EFA800FAB518 /* PasswordSetupUI.framework in Frameworks */, + D0C9C4DC2300E67900FAB518 /* DateSelectionUI.framework in Frameworks */, + D0C9C4C12300E5BB00FAB518 /* ImageCompression.framework in Frameworks */, + D0C9C47F2300E31F00FAB518 /* LegacyUI.framework in Frameworks */, + D0C9C43D2300D6E700FAB518 /* OpenInExternalAppUI.framework in Frameworks */, + D0C9C3FF2300D5A200FAB518 /* ScreenCaptureDetection.framework in Frameworks */, + D0C9C3C52300B73A00FAB518 /* WebsiteType.framework in Frameworks */, + D0C9C3982300B46200FAB518 /* TelegramUniversalVideoContent.framework in Frameworks */, + D0C9C3352300AA0B00FAB518 /* GalleryUI.framework in Frameworks */, + D0C9C2D22300A2DB00FAB518 /* SearchBarNode.framework in Frameworks */, + D0C9C2B12300A1C400FAB518 /* CountrySelectionUI.framework in Frameworks */, + D0C9C2832300A05100FAB518 /* PhoneInputNode.framework in Frameworks */, + D0C9C2572300238900FAB518 /* PassportUI.framework in Frameworks */, + D0C9C1DC230020CA00FAB518 /* WebUI.framework in Frameworks */, + D0C9C1B623001F6200FAB518 /* GameUI.framework in Frameworks */, D0C9C17722FEF22200FAB518 /* TelegramPermissions.framework in Frameworks */, D0C9C14D22FE439B00FAB518 /* TelegramNotices.framework in Frameworks */, D0C9C12122FE40BE00FAB518 /* ImageTransparency.framework in Frameworks */, @@ -2503,15 +2318,6 @@ path = TelegramUI/Resources/Animations; sourceTree = ""; }; - 0941A99E210B053300EBE194 /* Open In */ = { - isa = PBXGroup; - children = ( - 0941A9A5210B822D00EBE194 /* OpenInOptions.swift */, - 0941A99F210B057200EBE194 /* OpenInActionSheetController.swift */, - ); - name = "Open In"; - sourceTree = ""; - }; 0962E65F21B3510800245FD9 /* Web Search */ = { isa = PBXGroup; children = ( @@ -2524,8 +2330,6 @@ 09DD88F421BF9730000766BC /* WebSearchRecentQueries.swift */, 09F799FB21C3FF3000820234 /* WebSearchGalleryController.swift */, 09F79A0021C8116C00820234 /* WebSearchBadgeNode.swift */, - 09F79A0621C829BC00820234 /* GalleryNavigationCheckNode.swift */, - 09F79A0821C829C700820234 /* GalleryNavigationRecipientNode.swift */, 09F79A0A21C832F400820234 /* WebSearchGalleryFooterContentNode.swift */, ); name = "Web Search"; @@ -2574,10 +2378,6 @@ 09CC52A7210615AA000578F8 /* Web Embed */ = { isa = PBXGroup; children = ( - 0979787B210642CB0077D77F /* WebEmbedPlayerNode.swift */, - 09874E4021075C1700E190B8 /* GenericEmbedImplementation.swift */, - 0979787D210646C00077D77F /* YoutubeEmbedImplementation.swift */, - 09874E3A21075BF400E190B8 /* VimeoEmbedImplementation.swift */, ); name = "Web Embed"; sourceTree = ""; @@ -2620,7 +2420,6 @@ isa = PBXGroup; children = ( 09F664CD21EBB3A100AB7E26 /* ImageBlur.swift */, - D0BE3036206139F500FBE6D8 /* ImageCompression.swift */, D000CABB21F158AD0011B15D /* PrepareSecretThumbnailData.swift */, D0F69E931D6B8C9B0046BCD6 /* ProgressiveImage.swift */, D0E8B8B8204477B600605593 /* SecretChatKeyVisualization.swift */, @@ -2650,7 +2449,6 @@ D01749541E1082770057C89A /* StoredMessageFromSearchPeer.swift */, D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */, D0EC55A2210231D600D1992C /* SearchPeerMembers.swift */, - D01C06BF1FBF118A001561AB /* MessageUtils.swift */, 09CE950D2237E45E00A7D2C3 /* CachedFaqInstantPage.swift */, ); name = Data; @@ -2731,15 +2529,6 @@ name = "Legacy Data Import"; sourceTree = ""; }; - D00C7CDA1E3776CA0080C3D5 /* Secret Preview */ = { - isa = PBXGroup; - children = ( - D00C7CDB1E3776E50080C3D5 /* SecretMediaPreviewController.swift */, - D0380DA8204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift */, - ); - name = "Secret Preview"; - sourceTree = ""; - }; D00DE6961E8E8E21003F0D76 /* Share */ = { isa = PBXGroup; children = ( @@ -2809,12 +2598,8 @@ children = ( D0BCC3D1203F0A6C008126C2 /* StringForMessageTimestampStatus.swift */, D00ACA592022897D0045D427 /* ProcessedPeerRestrictionText.swift */, - 09C9EA3721A044B500E90146 /* StringForDuration.swift */, D01D6BFB1E42AB3C006151C6 /* EmojiUtils.swift */, D08775081E3E59DE00A97350 /* PeerNotificationSoundStrings.swift */, - D01BAA571ED3283D00295217 /* AddFormatToStringWithRanges.swift */, - D064EF861F69A06F00AC0398 /* MessageContentKind.swift */, - D0471B501EFD872F0074D609 /* CurrencyFormat.swift */, 0900678E21ED8E0E00530762 /* HexColor.swift */, 0947FCAF224055990086741C /* StringHash.swift */, 09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */, @@ -2971,15 +2756,6 @@ name = Notifications; sourceTree = ""; }; - D02D60AF206C188000FEFE1E /* Plaintext Fields */ = { - isa = PBXGroup; - children = ( - D02D60B0206C189900FEFE1E /* SecureIdPlaintextFormController.swift */, - D02D60B2206C18A600FEFE1E /* SecureIdPlaintextFormControllerNode.swift */, - ); - name = "Plaintext Fields"; - sourceTree = ""; - }; D0383EE2207D291100C45548 /* Emojis */ = { isa = PBXGroup; children = ( @@ -3037,15 +2813,6 @@ name = "Chat Recent Actions"; sourceTree = ""; }; - D0430AFE1FF456F400A35ADD /* Web */ = { - isa = PBXGroup; - children = ( - D0430AFF1FF4570500A35ADD /* WebController.swift */, - D0430B011FF4584100A35ADD /* WebControllerNode.swift */, - ); - name = Web; - sourceTree = ""; - }; D04614352005093B00EC0EF2 /* Location */ = { isa = PBXGroup; children = ( @@ -3074,18 +2841,8 @@ isa = PBXGroup; children = ( 09CC52A7210615AA000578F8 /* Web Embed */, - D06BEC761F62F68B0035A545 /* OverlayUniversalVideoNode.swift */, D0943B041FDDFDA0001522CC /* OverlayInstantVideoNode.swift */, - D0477D1C1F617E8900412B44 /* NativeVideoContent.swift */, - D039FB1821711B5D00BD1BAD /* PlatformVideoContent.swift */, - D06BEC8B1F65E30A0035A545 /* WebEmbedVideoContent.swift */, - D02F4AEF1FD4C46D004DFBAE /* SystemVideoContent.swift */, - D0477D1E1F619E0700412B44 /* GalleryVideoDecoration.swift */, - D06BEC891F6597A80035A545 /* OverlayVideoDecoration.swift */, - D0E266FC1F66706500BFC79F /* ChatBubbleVideoDecoration.swift */, - D0477D201F61A47600412B44 /* UniversalVideoContentManager.swift */, D0CFBB941FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift */, - D0CFBB961FD8B0F700B65C0D /* ChatBubbleInstantVideoDecoration.swift */, D0943B061FDEC528001522CC /* InstantVideoRadialStatusNode.swift */, ); name = Video; @@ -3138,16 +2895,6 @@ name = "Password Entry"; sourceTree = ""; }; - D050F2141E48D9C200988324 /* Country Selection */ = { - isa = PBXGroup; - children = ( - D09D88701F86D36700BEB4C9 /* CountryList.swift */, - D050F2151E48D9E000988324 /* AuthorizationSequenceCountrySelectionController.swift */, - D050F2171E48D9EA00988324 /* AuthorizationSequenceCountrySelectionControllerNode.swift */, - ); - name = "Country Selection"; - sourceTree = ""; - }; D05174C11EAE582A00A1BF36 /* Root */ = { isa = PBXGroup; children = ( @@ -3218,9 +2965,6 @@ D05D8B792195E00C0064586F /* Setup Two Step Verification */ = { isa = PBXGroup; children = ( - D05D8B732195CD890064586F /* SetupTwoStepVerificationController.swift */, - D05D8B752195CD930064586F /* SetupTwoStepVerificationControllerNode.swift */, - D05D8B772195E0050064586F /* SetupTwoStepVerificationContentNode.swift */, ); name = "Setup Two Step Verification"; sourceTree = ""; @@ -3271,31 +3015,18 @@ isa = PBXGroup; children = ( D0AE2FDB22B1D3610058D3BC /* Bridge Audio */, - D075518A1DDA4D7D0073E051 /* LegacyController.swift */, - D075518C1DDA4E0B0073E051 /* LegacyControllerNode.swift */, - D07551921DDA540F0073E051 /* TelegramInitializeLegacyComponents.swift */, D023ED2D1DDB5BEC00BD496D /* LegacyAttachmentMenu.swift */, - D0119CCF20CAE75F00895300 /* LegacySecureIdAttachmentMenu.swift */, - 09AE3822214C110800850BFD /* LegacySecureIdScanController.swift */, D023EBB11DDA800700BD496D /* LegacyMediaPickers.swift */, D0671F2C2145AB28000A8AE7 /* LegacyAvatarPicker.swift */, D00E15251DDBD4E700ACF65C /* LegacyCamera.swift */, - D023ED2F1DDB605D00BD496D /* LegacyEmptyController.swift */, - D023ED311DDB60CF00BD496D /* LegacyNavigationController.swift */, D0EFD8951DDE8249009E508A /* LegacyLocationPicker.swift */, D04B4D651EEA993A00711AF6 /* LegacyLocationController.swift */, D06BB8811F58994B0084FC30 /* LegacyInstantVideoController.swift */, - D0EB41F21F2FEAB800838FE6 /* LegacyComponentsStickers.swift */, D0EB41F41F30D26A00838FE6 /* LegacySuggestionContext.swift */, - D0EB41F61F30D4A800838FE6 /* LegacyMediaLocations.swift */, - D0EB41F81F30E5B700838FE6 /* LegacyPeerAvatarPlaceholderDataSource.swift */, - D0EB41FA1F30E75000838FE6 /* LegacyImageDownloadActor.swift */, - D02660931F34CE5C000E2DC5 /* LegacyLocationVenueIconDataSource.swift */, D0D03B211DECB1AD00220C46 /* TGDataItem.h */, D0D03B221DECB1AD00220C46 /* TGDataItem.m */, D0EB41FE1F30ED4F00838FE6 /* LegacyImageProcessors.h */, D0EB41FF1F30ED4F00838FE6 /* LegacyImageProcessors.m */, - D0CFBB851FD715E700B65C0D /* LegacyHTTPOperationImpl.swift */, D007019B2029E8F2006B9E34 /* LegacyICloudFileController.swift */, D07ABBA4202A14BC003671DE /* LegacyImagePicker.swift */, D07ABBAA202A1BD1003671DE /* LegacyWallpaperPicker.swift */, @@ -3429,6 +3160,21 @@ D08D45281D5E340200A7428A /* Frameworks */ = { isa = PBXGroup; children = ( + D0C9C52A2300EFA800FAB518 /* PasswordSetupUI.framework */, + D0C9C4DB2300E67900FAB518 /* DateSelectionUI.framework */, + D0C9C4C02300E5BB00FAB518 /* ImageCompression.framework */, + D0C9C47E2300E31F00FAB518 /* LegacyUI.framework */, + D0C9C43C2300D6E700FAB518 /* OpenInExternalAppUI.framework */, + D0C9C3FE2300D5A200FAB518 /* ScreenCaptureDetection.framework */, + D0C9C3C42300B73A00FAB518 /* WebsiteType.framework */, + D0C9C3972300B46200FAB518 /* TelegramUniversalVideoContent.framework */, + D0C9C3342300AA0B00FAB518 /* GalleryUI.framework */, + D0C9C2D12300A2DB00FAB518 /* SearchBarNode.framework */, + D0C9C2B02300A1C400FAB518 /* CountrySelectionUI.framework */, + D0C9C2822300A05100FAB518 /* PhoneInputNode.framework */, + D0C9C2562300238900FAB518 /* PassportUI.framework */, + D0C9C1DB230020CA00FAB518 /* WebUI.framework */, + D0C9C1B523001F6200FAB518 /* GameUI.framework */, D0C9C17622FEF22200FAB518 /* TelegramPermissions.framework */, D0C9C14C22FE439B00FAB518 /* TelegramNotices.framework */, D0C9C12022FE40BE00FAB518 /* ImageTransparency.framework */, @@ -3532,47 +3278,13 @@ name = Frameworks; sourceTree = ""; }; - D093D7E02062F3F400BC3599 /* Documents */ = { - isa = PBXGroup; - children = ( - D093D7DE2062F3F000BC3599 /* SecureIdDocumentFormController.swift */, - D093D7E12062F40100BC3599 /* SecureIdDocumentFormControllerNode.swift */, - D0147BA8206EA35000E40378 /* SecureIdDocumentGalleryController.swift */, - D0147BAA206EA6C100E40378 /* SecureIdDocumentImageGalleryItem.swift */, - D013630B208FA62400EB3653 /* SecureIdDocumentGalleryFooterContentNode.swift */, - ); - name = Documents; - sourceTree = ""; - }; D093D81E20699A6000BC3599 /* Form */ = { isa = PBXGroup; children = ( - D093D81F20699A7300BC3599 /* FormController.swift */, - D093D82120699A7C00BC3599 /* FormControllerNode.swift */, - D093D8232069A06600BC3599 /* FormControllerScrollerNode.swift */, - D093D8252069A31700BC3599 /* FormControllerItem.swift */, - D0E412C52069B60600BEE4A2 /* FormControllerHeaderItem.swift */, - D0E412CD206A707400BEE4A2 /* FormControllerTextItem.swift */, - D0E412C7206A537600BEE4A2 /* FormBlockItemNode.swift */, - D0E412C9206A5B0B00BEE4A2 /* FormControllerTextInputItem.swift */, - D0E412D2206A7DC100BEE4A2 /* DateSelectionActionSheetController.swift */, - D0E412CF206A75B200BEE4A2 /* FormControllerDetailActionItem.swift */, - D0E412CB206A6B2300BEE4A2 /* FormControllerActionItem.swift */, - 09DD88EC21BDC8B7000766BC /* FormEditableBlockItemNode.swift */, ); name = Form; sourceTree = ""; }; - D099D74B1EEFEE0100A3128C /* Game */ = { - isa = PBXGroup; - children = ( - D099D74C1EEFEE1500A3128C /* GameController.swift */, - D099D74E1EEFEE6A00A3128C /* GameControllerNode.swift */, - D099D7501EEFF91E00A3128C /* GameControllerTitleView.swift */, - ); - name = Game; - sourceTree = ""; - }; D099EA1D1DE744EE001AF5A8 /* Horizontal List */ = { isa = PBXGroup; children = ( @@ -3691,7 +3403,6 @@ D0208ADB1FA346A4001F0D5F /* RaiseToListen.swift */, 09D304142173C0E900C00567 /* WatchManager.swift */, 09EDAD29220DA6A40012A50B /* VolumeButtons.swift */, - D0DE5804205B202500C356A8 /* ScreenCaptureDetection.swift */, ); name = Device; sourceTree = ""; @@ -3783,34 +3494,6 @@ name = "Contact Selection"; sourceTree = ""; }; - D0BE303F2061B7CF00FBE6D8 /* Secure ID */ = { - isa = PBXGroup; - children = ( - D0BE30402061B80100FBE6D8 /* SecureIdAuthController.swift */, - D093D7D82062A9CA00BC3599 /* SecureIdAuthControllerState.swift */, - D0BE30422061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift */, - D0BE30442061C09000FBE6D8 /* SecureIdAuthContentNode.swift */, - D0BE30482061C0F500FBE6D8 /* SecureIdAuthHeaderNode.swift */, - D0147BA6206E8B4F00E40378 /* SecureIdAuthAcceptNode.swift */, - D0BE30462061C0BC00FBE6D8 /* SecureIdAuthPasswordOptionContentNode.swift */, - D0CE6F6D213EDF8800BCD44B /* SecureIdAuthPasswordSetupContentNode.swift */, - D093D7DA2062CFF500BC3599 /* SecureIdAuthFormContentNode.swift */, - D093D7DC2062D09A00BC3599 /* SecureIdAuthFormFieldNode.swift */, - D08D7E78209FA2930005D80C /* SecureIdValues.swift */, - D093D7E02062F3F400BC3599 /* Documents */, - D02D60AF206C188000FEFE1E /* Plaintext Fields */, - D093D81C206994FD00BC3599 /* FindSecureIdValue.swift */, - D0E412D4206A842900BEE4A2 /* SecureIdVerificationDocument.swift */, - D0E412D9206A894800BEE4A2 /* SecureIdValueFormFileItem.swift */, - D02D60C7206E705D00FEFE1E /* SecureIdValueFormPhoneItem.swift */, - D0E412DE206AA00500BEE4A2 /* SecureIdVerificationDocumentsContext.swift */, - D02D60AD206BD47300FEFE1E /* SecureIdDocumentTypeSelectionController.swift */, - D06CF82620D0080200AC4CFF /* SecureIdAuthListContentNode.swift */, - D06CF82820D0119500AC4CFF /* SecureIdAuthListFieldNode.swift */, - ); - name = "Secure ID"; - sourceTree = ""; - }; D0C50E361E93CAF200F62E39 /* Notifications */ = { isa = PBXGroup; children = ( @@ -4200,13 +3883,6 @@ path = TelegramUI/Resources/Stripe; sourceTree = ""; }; - D0EC6B391EB8CF1E00EBF1C3 /* Call */ = { - isa = PBXGroup; - children = ( - ); - name = Call; - sourceTree = ""; - }; D0EE97131D88BB1A006C18E1 /* Peer Info */ = { isa = PBXGroup; children = ( @@ -4285,7 +3961,6 @@ D0EC6B421EB92DF600EBF1C3 /* OverlayMediaController.swift */, D0EC6B441EB92E5A00EBF1C3 /* OverlayMediaControllerNode.swift */, D0FE4DE31F0AEBB900E8A0B3 /* SharedVideoContextManager.swift */, - D09E63A91F0FC681003444CD /* PictureInPictureVideoControlsNode.swift */, D09E637D1F0E8C66003444CD /* Shared Media Player */, D0D03AE61DECB0D200220C46 /* Audio Recorder */, 0919546D229458E900E11046 /* Animated Stickers */, @@ -4293,7 +3968,6 @@ D0177B831DFB095000A5083A /* FileMediaResourceStatus.swift */, D0FA08BF20483F9600DD23FC /* ExtractVideoData.swift */, D0ADF965212E05A300310BBC /* TonePlayer.swift */, - D0105D672182680E007C04A7 /* IsMediaStreamable.swift */, 0910B0EC21FA178C00F8F87D /* WallpaperPreviewMedia.swift */, ); name = Media; @@ -4323,7 +3997,6 @@ D0943AF51FDAAE7E001522CC /* MultipleAvatarsNode.swift */, D0568AAC1DF198130022E7DA /* AudioWaveformNode.swift */, D0BC38621E3F9EFA0044D6FE /* EditableTokenListNode.swift */, - D050F2121E48B61500988324 /* PhoneInputNode.swift */, D0B2F76B2052A7D600D3BFB9 /* SinglePhoneInputNode.swift */, D056CD6F1FF147B000880D28 /* IconButtonNode.swift */, 09F85BA621E7DA5F00D73170 /* BlurredImageNode.swift */, @@ -4336,8 +4009,6 @@ D0F69DCA1D6B89F20046BCD6 /* Search */ = { isa = PBXGroup; children = ( - D0F69DCB1D6B8A0D0046BCD6 /* SearchBarNode.swift */, - D0F69DCC1D6B8A0D0046BCD6 /* SearchBarPlaceholderNode.swift */, D0F69DCD1D6B8A0D0046BCD6 /* SearchDisplayController.swift */, D0F69DCE1D6B8A0D0046BCD6 /* SearchDisplayControllerContentNode.swift */, 099529F921DD8A3100805E13 /* NavigationBarSearchContentNode.swift */, @@ -4370,14 +4041,9 @@ D0EE97131D88BB1A006C18E1 /* Peer Info */, D0D2689B1D79D31500C422DA /* Peer Selection */, D0754D251EEE10A100884F6E /* Bot Payments */, - D0BE303F2061B7CF00FBE6D8 /* Secure ID */, - D099D74B1EEFEE0100A3128C /* Game */, - D0EC6B391EB8CF1E00EBF1C3 /* Call */, D01BAA161ECC8DED00295217 /* Call List */, D0F69E791D6B8C3B0046BCD6 /* Settings */, D0C50E361E93CAF200F62E39 /* Notifications */, - D0430AFE1FF456F400A35ADD /* Web */, - 0941A99E210B053300EBE194 /* Open In */, 09F215982263E61400AEDF6D /* Passcode */, 09B4EE5721A82F5900847FA6 /* Permissions */, 090E778422A9B94700CD99F5 /* Peers Nearby */, @@ -4391,7 +4057,6 @@ D09D88721F86D56B00BEB4C9 /* AuthorizationLayout.swift */, D049EAF21E44DE2500A2CD3A /* AuthorizationSequenceController.swift */, D04BB2B61E44E5BB00650E93 /* Splash */, - D050F2141E48D9C200988324 /* Country Selection */, D04BB2B71E44E5CB00650E93 /* Phone Entry */, D04BB2BC1E44FD1300650E93 /* Code Entry */, D04BB2C11E45016800650E93 /* Password Entry */, @@ -4587,17 +4252,7 @@ D0F69E4F1D6B8BC40046BCD6 /* Gallery */ = { isa = PBXGroup; children = ( - D0F69E501D6B8BDA0046BCD6 /* GalleryController.swift */, - D0F69E511D6B8BDA0046BCD6 /* GalleryControllerNode.swift */, - D042C6871E8DA8C800C863B0 /* GalleryControllerPresentationState.swift */, - D0F69E521D6B8BDA0046BCD6 /* GalleryItem.swift */, - D0F69E531D6B8BDA0046BCD6 /* GalleryItemNode.swift */, - D0F69E541D6B8BDA0046BCD6 /* GalleryPagerNode.swift */, - D042C6801E8D9A6700C863B0 /* GalleryFooterNode.swift */, - D042C6851E8DA69D00C863B0 /* GalleryFooterContentNode.swift */, - D0383ED3207CFBB900C45548 /* GalleryThumbnailContainerNode.swift */, D0DE66051F9A51E200EF4AE9 /* GalleryHiddenMediaManager.swift */, - D00C7CDA1E3776CA0080C3D5 /* Secret Preview */, D0F69E5A1D6B8BDD0046BCD6 /* Items */, ); name = Gallery; @@ -4606,18 +4261,10 @@ D0F69E5A1D6B8BDD0046BCD6 /* Items */ = { isa = PBXGroup; children = ( - D0F69E5B1D6B8BF90046BCD6 /* ChatDocumentGalleryItem.swift */, - D0F69E5C1D6B8BF90046BCD6 /* ChatExternalFileGalleryItem.swift */, - D0F69E5D1D6B8BF90046BCD6 /* ChatImageGalleryItem.swift */, - D0F69E5F1D6B8BF90046BCD6 /* ChatVideoGalleryItemScrubberView.swift */, - D0F69E601D6B8BF90046BCD6 /* ZoomableContentGalleryItemNode.swift */, - D042C6891E8DAAB000C863B0 /* ChatItemGalleryFooterContentNode.swift */, D0575AFB1EA104A6006F2541 /* PeerAvatarImageGalleryItem.swift */, D0104F291F471DA6004E4881 /* InstantImageGalleryItem.swift */, D0104F2B1F471EEB004E4881 /* InstantPageGalleryFooterContentNode.swift */, - D0A8BBA01F61EE83000F03FD /* UniversalVideoGalleryItem.swift */, 09F79A0221C8225600820234 /* WebSearchVideoGalleryItem.swift */, - 090A22162273713000694CB0 /* ChatAnimationGalleryItem.swift */, ); name = Items; sourceTree = ""; @@ -4718,11 +4365,8 @@ D0F3A8B71E83125C00B4C64C /* MediaResources.swift */, D0F3A8B91E831E6300B4C64C /* FetchVideoMediaResource.swift */, D06E4AC31E84806300627D1D /* FetchPhotoLibraryImageResource.swift */, - D0FB87B11F7C4C19004DE005 /* FetchMediaUtils.swift */, D056CD731FF2996B00880D28 /* ExternalMusicAlbumArtResources.swift */, D007019D2029EFDD006B9E34 /* ICloudResources.swift */, - D09F9DCE20768DAF00DB4DE1 /* SecureIdLocalResource.swift */, - 0941A9A3210B0E2E00EBE194 /* OpenInAppIconResources.swift */, D01FB436217CEC62009C6134 /* FetchVideoThumbnail.swift */, 099529AB21CDBBB200805E13 /* QRCode.swift */, 0910B0EE21FA532D00F8F87D /* WallpaperResources.swift */, @@ -4748,7 +4392,6 @@ D0FA0AC01E7725AA005BB9B7 /* TwoStepVerificationResetController.swift */, D0760B231E9D015D00F1F3C4 /* PasscodeOptionsController.swift */, D0CE6F6F213EEE5000BCD44B /* CreatePasswordController.swift */, - D0B3AC7F2142E2E900CD1374 /* ResetPasswordController.swift */, D04554A321B42982007A6DD9 /* ConfirmPhoneNumberController.swift */, D05D8B792195E00C0064586F /* Setup Two Step Verification */, 09DE2F262269D5730045E975 /* PrivacyIntroController.swift */, @@ -5099,8 +4742,6 @@ D0684A041F6C3AD50059F570 /* ChatListTypingNode.swift in Sources */, D0383EE6207D299600C45548 /* EmojisChatInputPanelItem.swift in Sources */, D00817E322B47A14008A895F /* TGPresentationAutoNightPreferences.m in Sources */, - D0119CD020CAE75F00895300 /* LegacySecureIdAttachmentMenu.swift in Sources */, - D0E412DA206A894800BEE4A2 /* SecureIdValueFormFileItem.swift in Sources */, 09B4EE6221AD791600847FA6 /* InstantPageStoredState.swift in Sources */, D0E1199E229809B6008CAE3A /* ChannelDiscussionGroupActionSheetItem.swift in Sources */, 09EDAD2A220DA6A40012A50B /* VolumeButtons.swift in Sources */, @@ -5111,7 +4752,6 @@ D06E4C352134AE3C00088087 /* ThemeAutoNightSettingsController.swift in Sources */, D0B2F76C2052A7D600D3BFB9 /* SinglePhoneInputNode.swift in Sources */, D04281F6200E5AC2009DDE36 /* ChatRecentActionsControllerNode.swift in Sources */, - 0941A9A0210B057200EBE194 /* OpenInActionSheetController.swift in Sources */, D079FCDD1F05C4F20038FADE /* LocalAuth.swift in Sources */, 09DD5D5221ED175300D7007A /* WallpaperColorPickerNode.swift in Sources */, D0B2F76820528E3D00D3BFB9 /* UserInfoEditingPhoneActionItem.swift in Sources */, @@ -5119,50 +4759,36 @@ 09F79A0321C8225600820234 /* WebSearchVideoGalleryItem.swift in Sources */, D0E9BA631F055AD200F079A4 /* BotPaymentCardInputItemNode.swift in Sources */, D01848E821A03BDA00B6DEBD /* ChatSearchState.swift in Sources */, - D0E412CA206A5B0B00BEE4A2 /* FormControllerTextInputItem.swift in Sources */, D0208ADC1FA346A4001F0D5F /* RaiseToListen.swift in Sources */, - D0EB41F91F30E5B700838FE6 /* LegacyPeerAvatarPlaceholderDataSource.swift in Sources */, 09D304182173C15700C00567 /* WatchSettingsController.swift in Sources */, - D0EC6CBC1EB9F58800EBF1C3 /* LegacyController.swift in Sources */, - D0EC6CBD1EB9F58800EBF1C3 /* LegacyControllerNode.swift in Sources */, D0C0B5B71EE1DEF1000F4D2C /* ThemeGridControllerItem.swift in Sources */, - D0EC6CBE1EB9F58800EBF1C3 /* TelegramInitializeLegacyComponents.swift in Sources */, D0EC6CBF1EB9F58800EBF1C3 /* LegacyAttachmentMenu.swift in Sources */, D0943B001FDAE852001522CC /* ChatFeedNavigationInputPanelNode.swift in Sources */, D0B37C601F8D286E004252DF /* ThemeSettingsFontSizeItem.swift in Sources */, D0EC6CC01EB9F58800EBF1C3 /* LegacyMediaPickers.swift in Sources */, D0EC6CC11EB9F58800EBF1C3 /* LegacyCamera.swift in Sources */, - 0941A9A6210B822D00EBE194 /* OpenInOptions.swift in Sources */, D0754D1E1EEDDF6200884F6E /* ChatMessageAttachedContentNode.swift in Sources */, D0E9BAC71F05738600F079A4 /* STPAPIClient.m in Sources */, D0CFBB911FD881A600B65C0D /* AudioRecordningToneData.swift in Sources */, D050A466229C06460044F11A /* ChannelDiscussionGroupSearchContainerNode.swift in Sources */, - D02F4AF01FD4C46D004DFBAE /* SystemVideoContent.swift in Sources */, - D0477D1F1F619E0700412B44 /* GalleryVideoDecoration.swift in Sources */, 09F799FA21C3542D00820234 /* LegacyWebSearchGallery.swift in Sources */, D01C99781F4F382C00DCFAF6 /* InstantPageSettingsItemTheme.swift in Sources */, - D0EC6CC21EB9F58800EBF1C3 /* LegacyEmptyController.swift in Sources */, - D0EC6CC31EB9F58800EBF1C3 /* LegacyNavigationController.swift in Sources */, D0EC6CC41EB9F58800EBF1C3 /* LegacyLocationPicker.swift in Sources */, D0EC6CC51EB9F58800EBF1C3 /* TGDataItem.m in Sources */, - D093D7DD2062D09A00BC3599 /* SecureIdAuthFormFieldNode.swift in Sources */, 092F36902157AB46001A9F49 /* ItemListCallListItem.swift in Sources */, D00817D522B47A14008A895F /* ApplicationShortcutItem.swift in Sources */, D077C5C122B59A800097D617 /* ApplicationContext.swift in Sources */, D0EC6CC71EB9F58800EBF1C3 /* PeerNotificationSoundStrings.swift in Sources */, - D01C06C01FBF118A001561AB /* MessageUtils.swift in Sources */, D0104F281F47171F004E4881 /* InstantPageGalleryController.swift in Sources */, D0AF798F22C2E26500CECCB8 /* compressed.cc in Sources */, D0EC6CC81EB9F58800EBF1C3 /* ProgressiveImage.swift in Sources */, D081E108217F583F003CD921 /* LanguageLinkPreviewContentNode.swift in Sources */, D0EC6CC91EB9F58800EBF1C3 /* WebP.swift in Sources */, D09E637F1F0E8C9F003444CD /* PeerMessagesMediaPlaylist.swift in Sources */, - D0E412DF206AA00500BEE4A2 /* SecureIdVerificationDocumentsContext.swift in Sources */, D0EC6CCC1EB9F58800EBF1C3 /* ServiceSoundManager.swift in Sources */, D099E220229405BB00561B75 /* Weak.swift in Sources */, D0EC6CCD1EB9F58800EBF1C3 /* DeclareEncodables.swift in Sources */, 0958FBBD218B03CA00E0CBD8 /* InstantPageDetailsNode.swift in Sources */, - D02D60B1206C189900FEFE1E /* SecureIdPlaintextFormController.swift in Sources */, D0CFBB951FD8B05000B65C0D /* OverlayInstantVideoDecoration.swift in Sources */, D0EC6CCE1EB9F58800EBF1C3 /* AccountContext.swift in Sources */, D0471B5C1EFEB4F30074D609 /* BotPaymentFieldItemNode.swift in Sources */, @@ -5178,20 +4804,14 @@ D0471B5E1EFEB5860074D609 /* BotPaymentHeaderItemNode.swift in Sources */, D0EC6CD71EB9F58800EBF1C3 /* EmojiUtils.swift in Sources */, D0EC6CD91EB9F58800EBF1C3 /* ValidateAddressNameInteractive.swift in Sources */, - D0BE30452061C09000FBE6D8 /* SecureIdAuthContentNode.swift in Sources */, 09B4EE5E21AC626B00847FA6 /* PermissionContentNode.swift in Sources */, - D0E412CC206A6B2300BEE4A2 /* FormControllerActionItem.swift in Sources */, D0471B5A1EFE70400074D609 /* BotCheckoutInfoControllerNode.swift in Sources */, 09F664CA21EB4F2700AB7E26 /* ThemeGridSearchColorsItem.swift in Sources */, - D093D82220699A7C00BC3599 /* FormControllerNode.swift in Sources */, D025402922E1F7F500AC0195 /* ChatTextInputSlowmodePlaceholderNode.swift in Sources */, - D0E412D0206A75B200BEE4A2 /* FormControllerDetailActionItem.swift in Sources */, - D09F9DCF20768DAF00DB4DE1 /* SecureIdLocalResource.swift in Sources */, D0471B641EFEB5CB0074D609 /* BotPaymentItemNode.swift in Sources */, D0380DB8204EE0A5000414AB /* ChatInstantVideoMessageDurationNode.swift in Sources */, D0EC6CDC1EB9F58800EBF1C3 /* TelegramAccountAuxiliaryMethods.swift in Sources */, D01BAA1A1ECC8E0D00295217 /* CallListControllerNode.swift in Sources */, - D0A8BBA11F61EE83000F03FD /* UniversalVideoGalleryItem.swift in Sources */, D0642EFC1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift in Sources */, D03AA4E5202DF8840056C405 /* StickerPreviewPeekContent.swift in Sources */, D025402322E1C92D00AC0195 /* ChatSlowmodeItem.swift in Sources */, @@ -5205,15 +4825,12 @@ D01BAA1E1ECC931D00295217 /* CallListNodeEntries.swift in Sources */, D02B2B9820810DA00062476B /* StickerPaneSearchStickerItem.swift in Sources */, D020A9DC1FEAE6E7008C66F7 /* OverlayPlayerControllerNode.swift in Sources */, - D05D8B742195CD890064586F /* SetupTwoStepVerificationController.swift in Sources */, - D06BEC8A1F6597A80035A545 /* OverlayVideoDecoration.swift in Sources */, 09619B9621A4ABF600493558 /* InstantPageReferenceControllerNode.swift in Sources */, 09FFBCDB22849CB500C33B4B /* PDF.swift in Sources */, 09D968A1221F7FF100B1458A /* ChatTypingActivityContentNode.swift in Sources */, 090E778E22AA863A00CD99F5 /* PeersNearbyIconNode.swift in Sources */, D0EC6CF41EB9F58800EBF1C3 /* ManagedMediaId.swift in Sources */, 09D968A3221F800A00B1458A /* ChatUploadingActivityContentNode.swift in Sources */, - D0CFBB971FD8B0F700B65C0D /* ChatBubbleInstantVideoDecoration.swift in Sources */, D0471B601EFEB5A70074D609 /* BotPaymentTextItemNode.swift in Sources */, D0EC6CF51EB9F58800EBF1C3 /* PeerMessageManagedMediaId.swift in Sources */, D0E9BA521F0559DA00F079A4 /* STPImageLibrary.m in Sources */, @@ -5222,12 +4839,10 @@ D04ECD721FFBF22B00DE9029 /* OpenUrl.swift in Sources */, D04B4D661EEA993A00711AF6 /* LegacyLocationController.swift in Sources */, D056CD7A1FF3CC2A00880D28 /* ListMessagePlaybackOverlayNode.swift in Sources */, - D0BE30472061C0BC00FBE6D8 /* SecureIdAuthPasswordOptionContentNode.swift in Sources */, D0EC6CF71EB9F58800EBF1C3 /* RecentGifManagedMediaId.swift in Sources */, D0E9BA611F055A4300F079A4 /* STPDelegateProxy.m in Sources */, D0EC6CF91EB9F58800EBF1C3 /* MediaManager.swift in Sources */, 0962E66521B3631100245FD9 /* WebSearchNavigationContentNode.swift in Sources */, - D05D8B762195CD930064586F /* SetupTwoStepVerificationControllerNode.swift in Sources */, D0EB5ADF1F798033004E89B6 /* PeerMediaCollectionEmptyNode.swift in Sources */, D0EC6CFB1EB9F58800EBF1C3 /* ManagedAudioRecorder.swift in Sources */, D048B339203C532800038D05 /* ChatMediaInputPane.swift in Sources */, @@ -5241,7 +4856,6 @@ D0E9BA1A1F05574500F079A4 /* STPPaymentCardTextField.m in Sources */, 09CE95112237F3C100A7D2C3 /* SettingsSearchRecentQueries.swift in Sources */, D0EC6D031EB9F58800EBF1C3 /* opus_header.c in Sources */, - D093D7DF2062F3F000BC3599 /* SecureIdDocumentFormController.swift in Sources */, D0E9BA371F05585000F079A4 /* STPPhoneNumberValidator.m in Sources */, 0910B0EF21FA532D00F8F87D /* WallpaperResources.swift in Sources */, 09E4A807223D4B860038140F /* AccountUtils.swift in Sources */, @@ -5273,15 +4887,12 @@ 09F21565225C83E100AEDF6D /* ChatListStatusNode.swift in Sources */, D056CD701FF147B000880D28 /* IconButtonNode.swift in Sources */, D0F760DB222034910074F7E5 /* ChannelStatsController.swift in Sources */, - D02D60AE206BD47300FEFE1E /* SecureIdDocumentTypeSelectionController.swift in Sources */, - 09DD88ED21BDC8B7000766BC /* FormEditableBlockItemNode.swift in Sources */, D079FCE11F05C9380038FADE /* BotReceiptControllerNode.swift in Sources */, D0FA08CA2049BEAC00DD23FC /* ChatEmptyNode.swift in Sources */, 09CE95002232729A00A7D2C3 /* StickerPaneSearchContentNode.swift in Sources */, D00817D122B47A14008A895F /* LegacyDataImport.swift in Sources */, D053DADC201AAAB100993D32 /* ChatTextInputMenu.swift in Sources */, 0962E66321B3513100245FD9 /* WebSearchControllerNode.swift in Sources */, - 090A22172273713000694CB0 /* ChatAnimationGalleryItem.swift in Sources */, D01C06AF1FBB461E001561AB /* JoinLinkPreviewController.swift in Sources */, D0D9DE0D20EFEA2E00F20B06 /* InstantPageMediaPlaylist.swift in Sources */, D01C06B11FBB4643001561AB /* JoinLinkPreviewControllerNode.swift in Sources */, @@ -5291,7 +4902,6 @@ D0CE67941F7DB45100FFB557 /* ChatMessageContactBubbleContentNode.swift in Sources */, 09749BCD21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift in Sources */, 09EDAD26220D30980012A50B /* AutodownloadConnectionTypeController.swift in Sources */, - D0B3AC802142E2E900CD1374 /* ResetPasswordController.swift in Sources */, 09D968A7221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift in Sources */, D05D8B3A2192FC460064586F /* LocalizationListController.swift in Sources */, D0943AFE1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift in Sources */, @@ -5300,7 +4910,6 @@ D007019E2029EFDD006B9E34 /* ICloudResources.swift in Sources */, D048EA871F4F296400188713 /* InstantPageSettingsFontSizeItemNode.swift in Sources */, D0F760DD222034980074F7E5 /* ChannelStatsControllerNode.swift in Sources */, - 09C9EA3821A044B500E90146 /* StringForDuration.swift in Sources */, 09619B8E21A34C0100493558 /* InstantPageScrollableNode.swift in Sources */, D01590A622BD460C0017C33E /* MetalAnimationRenderer.swift in Sources */, D01BAA201ECC9A2500295217 /* CallListNodeLocation.swift in Sources */, @@ -5319,7 +4928,6 @@ D008177E22B46B7E008A895F /* TGItemProviderSignals.m in Sources */, 099529B421D3E5D800805E13 /* CheckDiskSpace.swift in Sources */, D04281EF200E3D88009DDE36 /* GroupInfoSearchItem.swift in Sources */, - D02660941F34CE5C000E2DC5 /* LegacyLocationVenueIconDataSource.swift in Sources */, D081E104217F57D2003CD921 /* LanguageLinkPreviewController.swift in Sources */, D0E9BAE21F0574D800F079A4 /* STPBankAccount.m in Sources */, D0104F2A1F471DA6004E4881 /* InstantImageGalleryItem.swift in Sources */, @@ -5332,17 +4940,13 @@ D0FA08C020483F9600DD23FC /* ExtractVideoData.swift in Sources */, D025402522E1E00100AC0195 /* ChatSlowmodeHintController.swift in Sources */, D008177D22B46B7E008A895F /* TGContactModel.m in Sources */, - D0BE30492061C0F500FBE6D8 /* SecureIdAuthHeaderNode.swift in Sources */, D0EC6D301EB9F58800EBF1C3 /* RadialProgressNode.swift in Sources */, D0EC6D311EB9F58800EBF1C3 /* RadialTimeoutNode.swift in Sources */, D0EC6D321EB9F58800EBF1C3 /* TextNode.swift in Sources */, D0BFAE5020AB2A1300793CF2 /* PeerBanTimeoutController.swift in Sources */, 09CE950A2237B93500A7D2C3 /* SettingsSearchResultItem.swift in Sources */, D0AE303922B1D3620058D3BC /* LegacyBridgeAudio.swift in Sources */, - 09F79A0921C829C700820234 /* GalleryNavigationRecipientNode.swift in Sources */, - D0EC6D351EB9F58800EBF1C3 /* SearchBarNode.swift in Sources */, D008177F22B46B7E008A895F /* TGShareLocationSignals.m in Sources */, - D0EC6D361EB9F58800EBF1C3 /* SearchBarPlaceholderNode.swift in Sources */, D0E8B8B9204477B600605593 /* SecretChatKeyVisualization.swift in Sources */, D0EC6D371EB9F58800EBF1C3 /* SearchDisplayController.swift in Sources */, D0185E8C208A025A005E1A6C /* ProxySettingsServerItem.swift in Sources */, @@ -5350,20 +4954,14 @@ D0EC6D381EB9F58800EBF1C3 /* SearchDisplayControllerContentNode.swift in Sources */, D06F1EA41F6C0A5D00FE8B74 /* ChatHistorySearchContainerNode.swift in Sources */, D0EC6D3A1EB9F58800EBF1C3 /* AudioWaveformNode.swift in Sources */, - D0105D682182680E007C04A7 /* IsMediaStreamable.swift in Sources */, - D0EB41F71F30D4A800838FE6 /* LegacyMediaLocations.swift in Sources */, D0EC6D3B1EB9F58800EBF1C3 /* EditableTokenListNode.swift in Sources */, - D0EC6D3C1EB9F58800EBF1C3 /* PhoneInputNode.swift in Sources */, - D0147BAB206EA6C100E40378 /* SecureIdDocumentImageGalleryItem.swift in Sources */, D0AD02EC20000D0100C1DCFF /* ChatMessageLiveLocationPositionNode.swift in Sources */, - D01BAA581ED3283D00295217 /* AddFormatToStringWithRanges.swift in Sources */, D0E2CE6C222930540084E3DD /* PrefetchManager.swift in Sources */, D0EB42011F30ED4F00838FE6 /* LegacyImageProcessors.m in Sources */, D01590C322BDAEBC0017C33E /* BMPImage.cpp in Sources */, D0E9BA3B1F0558E800F079A4 /* NSString+Stripe.m in Sources */, D0CE8CE51F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift in Sources */, 09F215AD2264DC4500AEDF6D /* PasscodeSetupController.swift in Sources */, - D0E266FD1F66706500BFC79F /* ChatBubbleVideoDecoration.swift in Sources */, D097C26820DD0A1D007BB4B8 /* PeerReportController.swift in Sources */, D0471B491EFD59170074D609 /* BotCheckoutControllerNode.swift in Sources */, 09F664C621EB400A00AB7E26 /* ThemeGridSearchContentNode.swift in Sources */, @@ -5385,7 +4983,6 @@ D0EC6D541EB9F58800EBF1C3 /* ChatHistoryEntriesForView.swift in Sources */, D0943B051FDDFDA0001522CC /* OverlayInstantVideoNode.swift in Sources */, D0EC6D551EB9F58800EBF1C3 /* PreparedChatHistoryViewTransition.swift in Sources */, - D0EB41FB1F30E75000838FE6 /* LegacyImageDownloadActor.swift in Sources */, D0208ADA1FA34017001F0D5F /* DeviceProximityManager.m in Sources */, D04281FC200E61BC009DDE36 /* ChatRecentActionsInteraction.swift in Sources */, D0EC6D561EB9F58800EBF1C3 /* ChatHistoryNode.swift in Sources */, @@ -5414,8 +5011,6 @@ D0EC6D611EB9F58800EBF1C3 /* GridMessageSelectionNode.swift in Sources */, D0754D201EEDEBA000884F6E /* ChatMessageGameBubbleContentNode.swift in Sources */, D050A464229C052A0044F11A /* ChannelDiscussionGroupSetupSearchItem.swift in Sources */, - D09E63AA1F0FC681003444CD /* PictureInPictureVideoControlsNode.swift in Sources */, - 09874E592107BD4100E190B8 /* GenericEmbedImplementation.swift in Sources */, D0EC6D621EB9F58800EBF1C3 /* ContactListNode.swift in Sources */, D0EC6D631EB9F58800EBF1C3 /* ContactListActionItem.swift in Sources */, D0EC6D641EB9F58800EBF1C3 /* ContactsPeerItem.swift in Sources */, @@ -5425,7 +5020,6 @@ D0EC6D661EB9F58800EBF1C3 /* ContactsSectionHeaderAccessoryItem.swift in Sources */, D0EC6D671EB9F58800EBF1C3 /* ContactListNameIndexHeader.swift in Sources */, 09F2159C2263E63200AEDF6D /* PasscodeEntryControllerNode.swift in Sources */, - D0CE6F6E213EDF8800BCD44B /* SecureIdAuthPasswordSetupContentNode.swift in Sources */, D07E413D208A494D00FCA8F0 /* ProxyServerActionSheetController.swift in Sources */, D02C81732177AC5900CD1006 /* NotificationSearchItem.swift in Sources */, D018BE58218C7BD800C02DDC /* ChatMessageDeliveryFailedNode.swift in Sources */, @@ -5435,8 +5029,6 @@ 09E4A805223D4A5A0038140F /* OpenSettings.swift in Sources */, D0EC6D6A1EB9F58800EBF1C3 /* AuthorizationSequenceSplashControllerNode.swift in Sources */, D0C683FC21AD797F00A6CAD5 /* ChatListSelection.swift in Sources */, - D0EC6D6B1EB9F58800EBF1C3 /* AuthorizationSequenceCountrySelectionController.swift in Sources */, - D0EC6D6C1EB9F58800EBF1C3 /* AuthorizationSequenceCountrySelectionControllerNode.swift in Sources */, D0EC6D6D1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryController.swift in Sources */, D0EC6D6E1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryControllerNode.swift in Sources */, D0B85C211FF70BEC00E795B4 /* AuthorizationSequenceAwaitingAccountResetControllerNode.swift in Sources */, @@ -5445,12 +5037,10 @@ D0068FA821760FA300D1B315 /* StoreDownloadedMedia.swift in Sources */, D0EC6D701EB9F58800EBF1C3 /* AuthorizationSequenceCodeEntryControllerNode.swift in Sources */, D0E9BA4D1F0559C700F079A4 /* NSString+Stripe_CardBrands.m in Sources */, - D099D7511EEFF91E00A3128C /* GameControllerTitleView.swift in Sources */, D0EC6D711EB9F58800EBF1C3 /* AuthorizationSequencePasswordEntryController.swift in Sources */, D0EC6D721EB9F58800EBF1C3 /* AuthorizationSequencePasswordEntryControllerNode.swift in Sources */, D0AF797622C2E26500CECCB8 /* endpoints_principal_components.cc in Sources */, D0EC6D731EB9F58800EBF1C3 /* AuthorizationSequenceSignUpController.swift in Sources */, - 0979787C210642CB0077D77F /* WebEmbedPlayerNode.swift in Sources */, D0C12EB01F9A8D1300600BB2 /* ListMessageDateHeader.swift in Sources */, 09B4EE5221A7CC3E00847FA6 /* SolidRoundedButtonNode.swift in Sources */, D0E9BA5D1F055A3300F079A4 /* STPBINRange.m in Sources */, @@ -5480,7 +5070,6 @@ D0B37C5E1F8D26A8004252DF /* ThemeSettingsChatPreviewItem.swift in Sources */, D01590A822BD462C0017C33E /* SoftwareAnimationRenderer.swift in Sources */, D01590BE22BDAEBC0017C33E /* Image.cpp in Sources */, - D093D7DB2062CFF500BC3599 /* SecureIdAuthFormContentNode.swift in Sources */, D0EC6D821EB9F58800EBF1C3 /* ChatControllerInteraction.swift in Sources */, D0EC6D831EB9F58800EBF1C3 /* ChatControllerNode.swift in Sources */, D0E9BA231F05577700F079A4 /* STPCard.m in Sources */, @@ -5493,7 +5082,6 @@ 9F06830B21A404C4001D8EDB /* NotificationExceptionSettingsController.swift in Sources */, D008177922B46B7E008A895F /* ShareItems.swift in Sources */, D0EC6D891EB9F58800EBF1C3 /* ChatSecretAutoremoveTimerActionSheet.swift in Sources */, - D05D8B782195E0050064586F /* SetupTwoStepVerificationContentNode.swift in Sources */, D0EC6D8A1EB9F58800EBF1C3 /* ChatInfo.swift in Sources */, D0EC6D8B1EB9F58800EBF1C3 /* ChatHistoryNavigationStack.swift in Sources */, D0EC6D8C1EB9F58800EBF1C3 /* NavigateToChatController.swift in Sources */, @@ -5502,7 +5090,6 @@ D0EC6D8D1EB9F58800EBF1C3 /* ChatMessageActionItemNode.swift in Sources */, D0192D44210A5AA50005FA10 /* DeviceContactDataManager.swift in Sources */, D0EC6D8E1EB9F58800EBF1C3 /* ChatMessageAvatarAccessoryItem.swift in Sources */, - D02D60C8206E705D00FEFE1E /* SecureIdValueFormPhoneItem.swift in Sources */, D0EC6D8F1EB9F58800EBF1C3 /* ChatMessageBubbleContentCalclulateImageCorners.swift in Sources */, D00817DD22B47A14008A895F /* LockedWindowCoveringView.swift in Sources */, 0902838821931D960067EFBD /* LanguageSuggestionController.swift in Sources */, @@ -5511,11 +5098,9 @@ D01DBA9B209CC6AD00C64E64 /* ChatLinkPreview.swift in Sources */, D01590AF22BD58AD0017C33E /* YUV.m in Sources */, D0EC6D901EB9F58900EBF1C3 /* ChatMessageBubbleContentNode.swift in Sources */, - 09874E582107A4C300E190B8 /* VimeoEmbedImplementation.swift in Sources */, D0EC6D911EB9F58900EBF1C3 /* ChatMessageBubbleItemNode.swift in Sources */, D0E8B8BD204479A500605593 /* SecretChatKeyController.swift in Sources */, D0B85C1C1FF6F76000E795B4 /* AuthorizationSequencePasswordRecoveryController.swift in Sources */, - D0471B511EFD872F0074D609 /* CurrencyFormat.swift in Sources */, D0EC6D921EB9F58900EBF1C3 /* ChatMessageDateAndStatusNode.swift in Sources */, D01C06B31FBB49A5001561AB /* JoinLinkPreviewPeerContentNode.swift in Sources */, D0EC6D931EB9F58900EBF1C3 /* ChatMessageFileBubbleContentNode.swift in Sources */, @@ -5529,17 +5114,13 @@ D0B2F7722052D0DD00D3BFB9 /* InviteContactsCountPanelNode.swift in Sources */, D0EC6D971EB9F58900EBF1C3 /* ChatMessageItem.swift in Sources */, D0CCD61B222E8B4500EE1E08 /* TimeBasedVideoPreload.swift in Sources */, - D08D7E79209FA2930005D80C /* SecureIdValues.swift in Sources */, D0E8175720122DAD00B82BBB /* ChatRecentActionsSearchNavigationContentNode.swift in Sources */, - D0147BA7206E8B4F00E40378 /* SecureIdAuthAcceptNode.swift in Sources */, D0E8174E2011FC3800B82BBB /* ChatMessageEventLogPreviousDescriptionContentNode.swift in Sources */, D0EC6D981EB9F58900EBF1C3 /* ChatMessageItemView.swift in Sources */, 09B4EE4F21A7B75D00847FA6 /* PermissionControllerNode.swift in Sources */, 09D304152173C0E900C00567 /* WatchManager.swift in Sources */, 9F06830921A404AB001D8EDB /* NotificationExceptionControllerNode.swift in Sources */, - D039FB1921711B5D00BD1BAD /* PlatformVideoContent.swift in Sources */, D035734B22B5CCCA00F0920D /* LegacyBuffer.swift in Sources */, - D0430B001FF4570500A35ADD /* WebController.swift in Sources */, 09D9689D221F74F000B1458A /* ChatTitleActivityNode.swift in Sources */, D0EC6D991EB9F58900EBF1C3 /* ChatMessageMediaBubbleContentNode.swift in Sources */, D0EC6D9A1EB9F58900EBF1C3 /* ChatMessageReplyInfoNode.swift in Sources */, @@ -5556,14 +5137,12 @@ D0439B5B228EC4A00067E026 /* ChatMessagePhoneNumberRequestContentNode.swift in Sources */, 09F664D021EBCFB900AB7E26 /* WallpaperCropNode.swift in Sources */, D0EC6D9E1EB9F58900EBF1C3 /* ChatMessageWebpageBubbleContentNode.swift in Sources */, - D06CF82720D0080200AC4CFF /* SecureIdAuthListContentNode.swift in Sources */, 09797873210633CD0077D77F /* InstantPageSettingsButtonItemNode.swift in Sources */, D0750C8722B2E76300BE5F6E /* ShareExtensionContext.swift in Sources */, D0EC6D9F1EB9F58900EBF1C3 /* ChatUnreadItem.swift in Sources */, D0E9B9E81EFEFB9500F079A4 /* BotPaymentDisclosureItemNode.swift in Sources */, 091346962183496900846E49 /* InstantPageArticleItem.swift in Sources */, D0EC6DA01EB9F58900EBF1C3 /* ChatHoleItem.swift in Sources */, - D093D82020699A7300BC3599 /* FormController.swift in Sources */, D0EC6DA11EB9F58900EBF1C3 /* ChatMessageSelectionNode.swift in Sources */, 09CE9502223272B700A7D2C3 /* GifPaneSearchContentNode.swift in Sources */, D0EC6DA31EB9F58900EBF1C3 /* ChatMessageDateHeader.swift in Sources */, @@ -5571,23 +5150,18 @@ D0EC6DA51EB9F58900EBF1C3 /* ChatBotInfoItem.swift in Sources */, D0B21B212215B539003F741D /* LogoutOptionsController.swift in Sources */, D0E9BAE41F0574D800F079A4 /* STPBankAccountParams.m in Sources */, - D0E412D3206A7DC100BEE4A2 /* DateSelectionActionSheetController.swift in Sources */, D0EC6DA71EB9F58900EBF1C3 /* ChatMessageBackground.swift in Sources */, D0EC6DA81EB9F58900EBF1C3 /* ChatInterfaceState.swift in Sources */, D08BDF661FA8CB10009D08E1 /* EditSettingsController.swift in Sources */, D0EC6DA91EB9F58900EBF1C3 /* ChatPresentationInterfaceState.swift in Sources */, D0EC6DAA1EB9F58900EBF1C3 /* ChatPanelInterfaceInteraction.swift in Sources */, D00FF2091F4E2414006FA332 /* InstantPageSettingsNode.swift in Sources */, - D0BE3037206139F500FBE6D8 /* ImageCompression.swift in Sources */, - 09AE3823214C110900850BFD /* LegacySecureIdScanController.swift in Sources */, D0EC6DAB1EB9F58900EBF1C3 /* ChatInterfaceStateAccessoryPanels.swift in Sources */, D0EC6DAC1EB9F58900EBF1C3 /* ChatInterfaceStateInputPanels.swift in Sources */, D056CD761FF2A30900880D28 /* ChatSwipeToReplyRecognizer.swift in Sources */, D00580B321E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift in Sources */, D091C7A41F8EBB1E00D7DE13 /* ChatPresentationData.swift in Sources */, 09A218F522A15F1400DE6898 /* ThemeSettingsAppIconItem.swift in Sources */, - D013630C208FA62400EB3653 /* SecureIdDocumentGalleryFooterContentNode.swift in Sources */, - D0EB41F31F2FEAB800838FE6 /* LegacyComponentsStickers.swift in Sources */, D0EC6DAD1EB9F58900EBF1C3 /* ChatInterfaceStateNavigationButtons.swift in Sources */, D0EC6DAE1EB9F58900EBF1C3 /* ChatInterfaceStateContextMenus.swift in Sources */, 09DE2F292269D5E30045E975 /* PrivacyIntroControllerNode.swift in Sources */, @@ -5621,14 +5195,12 @@ D0EC6DBF1EB9F58900EBF1C3 /* ChatMediaInputMetaSectionItemNode.swift in Sources */, D0EC6DC01EB9F58900EBF1C3 /* ChatMediaInputRecentGifsItem.swift in Sources */, D06F31E4213597FF001A0F12 /* ThemeAutoNightTimeSelectionActionSheet.swift in Sources */, - D0477D211F61A47600412B44 /* UniversalVideoContentManager.swift in Sources */, D0EC6DC11EB9F58900EBF1C3 /* ChatMediaInputTrendingItem.swift in Sources */, D0BCC3D620404CD8008126C2 /* ChatMessageActionSheetControllerNode.swift in Sources */, D0EC6DC21EB9F58900EBF1C3 /* ChatMediaInputStickerPackItem.swift in Sources */, 091346982183498A00846E49 /* InstantPageArticleNode.swift in Sources */, D0EC6DC31EB9F58900EBF1C3 /* ChatMediaInputStickerGridItem.swift in Sources */, 0947FCB0224055990086741C /* StringHash.swift in Sources */, - D0BE30432061B80B00FBE6D8 /* SecureIdAuthControllerNode.swift in Sources */, D0E9BAE81F0574FF00F079A4 /* STPCustomer.m in Sources */, D0C0B59F1EE082F5000F4D2C /* ChatSearchInputPanelNode.swift in Sources */, D079FCD91F05A5550038FADE /* BotCheckoutPasswordEntryController.swift in Sources */, @@ -5641,10 +5213,7 @@ D0EC6DCA1EB9F58900EBF1C3 /* SoftwareVideoThumbnailLayer.swift in Sources */, D0754D221EEDF89900884F6E /* ChatMessageInvoiceBubbleContentNode.swift in Sources */, D0EC6DCB1EB9F58900EBF1C3 /* ChatMediaInputTrendingPane.swift in Sources */, - D0430B021FF4584100A35ADD /* WebControllerNode.swift in Sources */, D0EC6DCC1EB9F58900EBF1C3 /* ChatButtonKeyboardInputNode.swift in Sources */, - D0CFBB861FD715E700B65C0D /* LegacyHTTPOperationImpl.swift in Sources */, - D06CF82920D0119500AC4CFF /* SecureIdAuthListFieldNode.swift in Sources */, 099529AA21CDB27900805E13 /* ShareProxyServerActionSheetController.swift in Sources */, D0EC6DCD1EB9F58900EBF1C3 /* ChatInputContextPanelNode.swift in Sources */, D0EEE9A12165585F001292A6 /* DocumentPreviewController.swift in Sources */, @@ -5656,7 +5225,6 @@ D0EC6DD11EB9F58900EBF1C3 /* HashtagChatInputPanelItem.swift in Sources */, D0EC6DD21EB9F58900EBF1C3 /* MentionChatInputContextPanelNode.swift in Sources */, D00701A22029F6D0006B9E34 /* TGMimeTypeMap.m in Sources */, - D0BE30412061B80100FBE6D8 /* SecureIdAuthController.swift in Sources */, D0EC6DD31EB9F58900EBF1C3 /* MentionChatInputPanelItem.swift in Sources */, 094735032275B62B00EA2312 /* PasscodeLayout.swift in Sources */, D0EC6DD41EB9F58900EBF1C3 /* CommandChatInputContextPanelNode.swift in Sources */, @@ -5667,7 +5235,6 @@ D0EC6DD81EB9F58900EBF1C3 /* VerticalListContextResultsChatInputPanelButtonItem.swift in Sources */, D04281F4200E5AB0009DDE36 /* ChatRecentActionsController.swift in Sources */, D0BFAE4E20AB1D7B00793CF2 /* DisabledContextResultsChatInputContextPanelNode.swift in Sources */, - D064EF871F69A06F00AC0398 /* MessageContentKind.swift in Sources */, D020A9DA1FEAE675008C66F7 /* OverlayAudioPlayerController.swift in Sources */, 09CE9513223825B700A7D2C3 /* CustomWallpaperPicker.swift in Sources */, D0E8174C2011F8A300B82BBB /* ChatMessageEventLogPreviousMessageContentNode.swift in Sources */, @@ -5683,12 +5250,10 @@ D0EC6DDD1EB9F58900EBF1C3 /* ChatTextInputMediaRecordingButton.swift in Sources */, D0EC6DDE1EB9F58900EBF1C3 /* ChatTextInputAudioRecordingOverlayButton.swift in Sources */, D0E9BAC91F05738600F079A4 /* STPAPIClient+ApplePay.m in Sources */, - 09F79A0721C829BC00820234 /* GalleryNavigationCheckNode.swift in Sources */, D0EC6DDF1EB9F58900EBF1C3 /* ChatTextInputAudioRecordingTimeNode.swift in Sources */, D0EC6DE01EB9F58900EBF1C3 /* ChatTextInputAudioRecordingCancelIndicator.swift in Sources */, 0962E67F21BA786A00245FD9 /* WebSearchItem.swift in Sources */, D081A9A922EB26AE0069C449 /* PhoneLabelController.swift in Sources */, - D09D88711F86D36700BEB4C9 /* CountryList.swift in Sources */, D0EC6DE11EB9F58900EBF1C3 /* ChatMessageSelectionInputPanelNode.swift in Sources */, D04281FA200E5CDC009DDE36 /* ChatRecentActionsControllerState.swift in Sources */, 09DD88EF21BDDE2B000766BC /* Geocoding.swift in Sources */, @@ -5698,7 +5263,6 @@ D0CAD90120AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift in Sources */, D0EC6DE51EB9F58900EBF1C3 /* SecretChatHandshakeStatusInputPanelNode.swift in Sources */, 090E777922A6A32E00CD99F5 /* ThemeSettingsThemeItem.swift in Sources */, - D06BEC771F62F68B0035A545 /* OverlayUniversalVideoNode.swift in Sources */, D0EC6DE61EB9F58900EBF1C3 /* DeleteChatInputPanelNode.swift in Sources */, D0428200200E6A00009DDE36 /* ChatRecentActionsHistoryTransition.swift in Sources */, D0EC6DE71EB9F58900EBF1C3 /* ChatTitleAccessoryPanelNode.swift in Sources */, @@ -5712,13 +5276,10 @@ D0EC6DEC1EB9F58900EBF1C3 /* ChatToastAlertPanelNode.swift in Sources */, D0EC6DED1EB9F58900EBF1C3 /* ChatHistoryNavigationButtonNode.swift in Sources */, D0F4B01A211073C500912B92 /* DeviceContactInfoController.swift in Sources */, - D0FB87B21F7C4C19004DE005 /* FetchMediaUtils.swift in Sources */, - 0979787E210646C00077D77F /* YoutubeEmbedImplementation.swift in Sources */, D0E9BA0C1F04580700F079A4 /* BotCheckoutWebInteractionControllerNode.swift in Sources */, D0EC6DF51EB9F58900EBF1C3 /* PeerMediaCollectionController.swift in Sources */, D06E4C332134A59700088087 /* ThemeAccentColorActionSheet.swift in Sources */, D0EC6DF61EB9F58900EBF1C3 /* PeerMediaCollectionControllerNode.swift in Sources */, - D0477D1D1F617E8900412B44 /* NativeVideoContent.swift in Sources */, D0EC6DF81EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceState.swift in Sources */, D0EC6DF91EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceStateButtons.swift in Sources */, 09F664C821EB4A2600AB7E26 /* ThemeGridSearchItem.swift in Sources */, @@ -5728,50 +5289,33 @@ D080B27F1F4C7C6000AA3847 /* InstantPageManagedMediaId.swift in Sources */, D08984F02114AE0C00918162 /* DataPrivacySettingsController.swift in Sources */, D0EC6DFB1EB9F58900EBF1C3 /* AvatarGalleryController.swift in Sources */, - D0EC6DFC1EB9F58900EBF1C3 /* GalleryController.swift in Sources */, - D0EC6DFD1EB9F58900EBF1C3 /* GalleryControllerNode.swift in Sources */, 09EC5CDC22CBD33D00292E42 /* NumberFormat.swift in Sources */, D0E9BA571F055A0B00F079A4 /* STPFormTextField.m in Sources */, - D0EC6DFE1EB9F58900EBF1C3 /* GalleryControllerPresentationState.swift in Sources */, D00817DB22B47A14008A895F /* LegacyChatImport.swift in Sources */, 09EDAD2C2211552F0012A50B /* AutodownloadMediaCategoryController.swift in Sources */, 090B48C82200BCA8005083FA /* WallpaperUploadManager.swift in Sources */, 09D968A5221F801A00B1458A /* ChatPlayingActivityContentNode.swift in Sources */, D0E8B8BB2044780600605593 /* ItemListSecretChatKeyItem.swift in Sources */, - D0EC6DFF1EB9F58900EBF1C3 /* GalleryItem.swift in Sources */, 09619B9521A4ABF600493558 /* InstantPageReferenceController.swift in Sources */, - D0EC6E001EB9F58900EBF1C3 /* GalleryItemNode.swift in Sources */, D048EA8B1F4F298A00188713 /* InstantPageSettingsThemeItemNode.swift in Sources */, - D0EC6E011EB9F58900EBF1C3 /* GalleryPagerNode.swift in Sources */, D06F31E62135A41C001A0F12 /* ThemeSettingsBrightnessItem.swift in Sources */, - D0EC6E021EB9F58900EBF1C3 /* GalleryFooterNode.swift in Sources */, - D0EC6E031EB9F58900EBF1C3 /* GalleryFooterContentNode.swift in Sources */, D0E9BA0A1F0457DD00F079A4 /* BotCheckoutWebInteractionController.swift in Sources */, - D0EC6E041EB9F58900EBF1C3 /* SecretMediaPreviewController.swift in Sources */, D01590BD22BDAEBC0017C33E /* DDSImage.cpp in Sources */, 09F2158D225CF5BC00AEDF6D /* Pasteboard.swift in Sources */, D0C26D571FDF2388004ABF18 /* OpenChatMessage.swift in Sources */, D00817CA22B47A14008A895F /* WatchRequestHandlers.swift in Sources */, D00817E222B47A14008A895F /* UIImage+ImageEffects.m in Sources */, - D0E412CE206A707400BEE4A2 /* FormControllerTextItem.swift in Sources */, D007019C2029E8F2006B9E34 /* LegacyICloudFileController.swift in Sources */, D000CABC21F158AD0011B15D /* PrepareSecretThumbnailData.swift in Sources */, D0208AD61FA33D14001F0D5F /* RaiseToListenActivator.m in Sources */, - D0EC6E061EB9F58900EBF1C3 /* ChatDocumentGalleryItem.swift in Sources */, - D0EC6E071EB9F58900EBF1C3 /* ChatExternalFileGalleryItem.swift in Sources */, D0AF798022C2E26500CECCB8 /* compress_block.cc in Sources */, D0AF798722C2E26500CECCB8 /* compress_texture.cc in Sources */, - D0EC6E081EB9F58900EBF1C3 /* ChatImageGalleryItem.swift in Sources */, D048EA891F4F297500188713 /* InstantPageSettingsFontFamilyItemNode.swift in Sources */, 09DD88F321BF907C000766BC /* WebSearchRecentQueryItem.swift in Sources */, D04554A421B42982007A6DD9 /* ConfirmPhoneNumberController.swift in Sources */, - D0EC6E0A1EB9F58900EBF1C3 /* ChatVideoGalleryItemScrubberView.swift in Sources */, - D0EC6E0B1EB9F58900EBF1C3 /* ZoomableContentGalleryItemNode.swift in Sources */, D07ABBA5202A14BC003671DE /* LegacyImagePicker.swift in Sources */, - D0EC6E0C1EB9F58900EBF1C3 /* ChatItemGalleryFooterContentNode.swift in Sources */, D0E9BABD1F05735F00F079A4 /* STPPaymentConfiguration.m in Sources */, D0EC6E0E1EB9F58900EBF1C3 /* PeerAvatarImageGalleryItem.swift in Sources */, - D0380DA9204E9C81000414AB /* SecretMediaPreviewFooterContentNode.swift in Sources */, D0AFCC7B1F4C8D39000720C6 /* InstantPageSlideshowItemNode.swift in Sources */, D0E9BA211F05577700F079A4 /* STPCardParams.m in Sources */, 09F215A822649C7900AEDF6D /* PasscodeEntryKeyboardNode.swift in Sources */, @@ -5802,7 +5346,6 @@ D0EC6E1E1EB9F58900EBF1C3 /* InstantPageShapeItem.swift in Sources */, D0EC6E1F1EB9F58900EBF1C3 /* InstantPageTile.swift in Sources */, D0EC6E201EB9F58900EBF1C3 /* InstantPageTileNode.swift in Sources */, - D093D7E22062F40100BC3599 /* SecureIdDocumentFormControllerNode.swift in Sources */, D0B2F7702052B5A800D3BFB9 /* InviteContactsControllerNode.swift in Sources */, D0EC6E211EB9F58900EBF1C3 /* InstantPageController.swift in Sources */, D00817D922B47A14008A895F /* AppDelegate.swift in Sources */, @@ -5810,7 +5353,6 @@ 091417F221EF4E5D00C8325A /* WallpaperGalleryController.swift in Sources */, D0EC6E221EB9F58900EBF1C3 /* InstantPageControllerNode.swift in Sources */, D0EC6E231EB9F58900EBF1C3 /* StickerPackPreviewController.swift in Sources */, - 0941A9A4210B0E2E00EBE194 /* OpenInAppIconResources.swift in Sources */, D0EC6E241EB9F58900EBF1C3 /* StickerPackPreviewControllerNode.swift in Sources */, D0FC194D201F82A000FEDBB2 /* OpenResolvedUrl.swift in Sources */, D0EC6E251EB9F58900EBF1C3 /* StickerPackPreviewGridItem.swift in Sources */, @@ -5823,11 +5365,9 @@ 09CE95062236D47F00A7D2C3 /* SettingsSearchItem.swift in Sources */, D0AF323A1FB1D8D60097362B /* ChatOverlayNavigationBar.swift in Sources */, D0EC6E2A1EB9F58900EBF1C3 /* ContactsSearchContainerNode.swift in Sources */, - D099D74F1EEFEE6A00A3128C /* GameControllerNode.swift in Sources */, D0943AF61FDAAE7E001522CC /* MultipleAvatarsNode.swift in Sources */, D0EC6E2B1EB9F58900EBF1C3 /* ComposeController.swift in Sources */, 09F215A422649C2200AEDF6D /* PasscodeEntryLabelNode.swift in Sources */, - D099D74D1EEFEE1500A3128C /* GameController.swift in Sources */, 09749BCF21F236F2008FDDE9 /* ModernCheckNode.swift in Sources */, 0940932422E73DFB003846A3 /* ChatSendMessageActionSheetController.swift in Sources */, D0EC6E2C1EB9F58900EBF1C3 /* ComposeControllerNode.swift in Sources */, @@ -5839,7 +5379,6 @@ D0EC6E2F1EB9F58900EBF1C3 /* ContactMultiselectionControllerNode.swift in Sources */, D0EC6E301EB9F58900EBF1C3 /* ContactSelectionController.swift in Sources */, D0EC6E311EB9F58900EBF1C3 /* ContactSelectionControllerNode.swift in Sources */, - D093D81D206994FD00BC3599 /* FindSecureIdValue.swift in Sources */, D0EC6E321EB9F58900EBF1C3 /* CreateGroupController.swift in Sources */, D0EC55A3210231D600D1992C /* SearchPeerMembers.swift in Sources */, D0EC6E331EB9F58900EBF1C3 /* CreateChannelController.swift in Sources */, @@ -5847,7 +5386,6 @@ D0EC6E351EB9F58900EBF1C3 /* ItemListAvatarAndNameItem.swift in Sources */, 09F215A622649C3000AEDF6D /* PasscodeLockIconNode.swift in Sources */, D0E9BA651F055B4500F079A4 /* BotCheckoutNativeCardEntryController.swift in Sources */, - D02D60B3206C18A600FEFE1E /* SecureIdPlaintextFormControllerNode.swift in Sources */, D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */, D04203152037162700490EA5 /* MediaInputPaneTrendingItem.swift in Sources */, D0EC6E3B1EB9F58900EBF1C3 /* ItemListPeerItem.swift in Sources */, @@ -5871,13 +5409,9 @@ D00817CF22B47A14008A895F /* LegacyFileImport.swift in Sources */, D01A21AF1F39EA2E00DDA104 /* InstantPageTheme.swift in Sources */, 09510B1322F96E5B0078CAB7 /* ChatScheduleTimeController.swift in Sources */, - D0E412C62069B60600BEE4A2 /* FormControllerHeaderItem.swift in Sources */, - D0E412D5206A842900BEE4A2 /* SecureIdVerificationDocument.swift in Sources */, - D0147BA9206EA35000E40378 /* SecureIdDocumentGalleryController.swift in Sources */, D00817DF22B47A14008A895F /* LegacyDataImportSplash.swift in Sources */, D0B37C5C1F8D22AE004252DF /* ThemeSettingsController.swift in Sources */, D05D8B412192FC8A0064586F /* LocalizationListItem.swift in Sources */, - D0383ED4207CFBB900C45548 /* GalleryThumbnailContainerNode.swift in Sources */, 0962E67B21BA00C900245FD9 /* WebSearchInterfaceState.swift in Sources */, 09DD88F521BF9730000766BC /* WebSearchRecentQueries.swift in Sources */, D0AE303822B1D3620058D3BC /* TGBridgeAudioDecoder.mm in Sources */, @@ -5900,7 +5434,6 @@ D0EC6E521EB9F58900EBF1C3 /* ChannelInfoController.swift in Sources */, D0EC6E531EB9F58900EBF1C3 /* ChannelMembersController.swift in Sources */, D02B676320800A00001A864A /* PaneSearchBarPlaceholderItem.swift in Sources */, - D093D8242069A06600BC3599 /* FormControllerScrollerNode.swift in Sources */, D081E106217F5834003CD921 /* LanguageLinkPreviewControllerNode.swift in Sources */, D093D7E72063E57F00BC3599 /* BotPaymentActionItemNode.swift in Sources */, 098CF79222B924E200AF6134 /* ThemeSettingsAccentColorItem.swift in Sources */, @@ -5908,7 +5441,6 @@ D0EC6E561EB9F58900EBF1C3 /* UserInfoController.swift in Sources */, D0EC6E571EB9F58900EBF1C3 /* GroupsInCommonController.swift in Sources */, D0EC6E581EB9F58900EBF1C3 /* PeerSelectionController.swift in Sources */, - D093D7D92062A9CA00BC3599 /* SecureIdAuthControllerState.swift in Sources */, D01590AB22BD467B0017C33E /* AnimationRenderer.swift in Sources */, D0EC6E591EB9F58900EBF1C3 /* PeerSelectionControllerNode.swift in Sources */, D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */, @@ -5917,9 +5449,7 @@ D0EC6E5E1EB9F58900EBF1C3 /* ItemListRecentSessionItem.swift in Sources */, D0EC6E5F1EB9F58900EBF1C3 /* RecentSessionsController.swift in Sources */, D0EC6E601EB9F58900EBF1C3 /* BlockedPeersController.swift in Sources */, - D06BEC8C1F65E30A0035A545 /* WebEmbedVideoContent.swift in Sources */, D0EC6E611EB9F58900EBF1C3 /* SelectivePrivacySettingsController.swift in Sources */, - D0E412C8206A537600BEE4A2 /* FormBlockItemNode.swift in Sources */, D0471B4B1EFD64AC0074D609 /* BotCheckoutHeaderItem.swift in Sources */, D0EC6E621EB9F58900EBF1C3 /* SelectivePrivacySettingsPeersController.swift in Sources */, D0DFD5E21FCE2BA50039B3B1 /* CalculatingCacheSizeItem.swift in Sources */, @@ -5939,7 +5469,6 @@ D0B85C231FF70BF400E795B4 /* AuthorizationSequenceAwaitingAccountResetController.swift in Sources */, D0EC6E6D1EB9F58900EBF1C3 /* ItemListStickerPackItem.swift in Sources */, D0EC6E6E1EB9F58900EBF1C3 /* ArchivedStickerPacksController.swift in Sources */, - D0DE5805205B202500C356A8 /* ScreenCaptureDetection.swift in Sources */, 09F79A0B21C832F400820234 /* WebSearchGalleryFooterContentNode.swift in Sources */, D0C0B5B11EE1C421000F4D2C /* ChatDateSelectionSheet.swift in Sources */, D0471B581EFE6D020074D609 /* BotCheckoutInfoController.swift in Sources */, @@ -5956,7 +5485,6 @@ D07ABBAB202A1BD1003671DE /* LegacyWallpaperPicker.swift in Sources */, 09E2D9F1226F214000EA0AA4 /* EmojiResources.swift in Sources */, D0EC6E7B1EB9F58900EBF1C3 /* DebugAccountsController.swift in Sources */, - D093D8262069A31700BC3599 /* FormControllerItem.swift in Sources */, D0EC6E7C1EB9F58900EBF1C3 /* UsernameSetupController.swift in Sources */, D0471B621EFEB5B70074D609 /* BotPaymentSwitchItemNode.swift in Sources */, D0E8175B201254FA00B82BBB /* ChatRecentActionsEmptyNode.swift in Sources */, diff --git a/submodules/TelegramUniversalVideoContent/Info.plist b/submodules/TelegramUniversalVideoContent/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/TelegramUniversalVideoContent/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/ChatBubbleInstantVideoDecoration.swift b/submodules/TelegramUniversalVideoContent/Sources/ChatBubbleInstantVideoDecoration.swift similarity index 80% rename from submodules/TelegramUI/TelegramUI/ChatBubbleInstantVideoDecoration.swift rename to submodules/TelegramUniversalVideoContent/Sources/ChatBubbleInstantVideoDecoration.swift index 41906db6c7..b9993b6207 100644 --- a/submodules/TelegramUI/TelegramUI/ChatBubbleInstantVideoDecoration.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/ChatBubbleInstantVideoDecoration.swift @@ -6,10 +6,10 @@ import SwiftSignalKit import UniversalMediaPlayer import AccountContext -final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { - let backgroundNode: ASDisplayNode? - let contentContainerNode: ASDisplayNode - let foregroundNode: ASDisplayNode? +public final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { + public let backgroundNode: ASDisplayNode? + public let contentContainerNode: ASDisplayNode + public let foregroundNode: ASDisplayNode? private let tapped: () -> Void @@ -17,7 +17,7 @@ final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { private var validLayoutSize: CGSize? - init(diameter: CGFloat, backgroundImage: UIImage?, tapped: @escaping () -> Void) { + public init(diameter: CGFloat, backgroundImage: UIImage?, tapped: @escaping () -> Void) { self.tapped = tapped let backgroundNode = ASImageNode() @@ -36,7 +36,7 @@ final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { //foregroundNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))) } - func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { + public func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { if self.contentNode !== contentNode { let previous = self.contentNode self.contentNode = contentNode @@ -59,10 +59,10 @@ final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { } } - func updateContentNodeSnapshot(_ snapshot: UIView?) { + public func updateContentNodeSnapshot(_ snapshot: UIView?) { } - func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { self.validLayoutSize = size if let backgroundNode = self.backgroundNode { @@ -80,16 +80,16 @@ final class ChatBubbleInstantVideoDecoration: UniversalVideoDecoration { } } - func setStatus(_ status: Signal) { + public func setStatus(_ status: Signal) { } - @objc func tapGesture(_ recognizer: UITapGestureRecognizer) { + @objc private func tapGesture(_ recognizer: UITapGestureRecognizer) { if case .ended = recognizer.state { //self.tapped() } } - func tap() { + public func tap() { self.tapped() } } diff --git a/submodules/TelegramUI/TelegramUI/ChatBubbleVideoDecoration.swift b/submodules/TelegramUniversalVideoContent/Sources/ChatBubbleVideoDecoration.swift similarity index 86% rename from submodules/TelegramUI/TelegramUI/ChatBubbleVideoDecoration.swift rename to submodules/TelegramUniversalVideoContent/Sources/ChatBubbleVideoDecoration.swift index fd594d3b3a..89b5ae6718 100644 --- a/submodules/TelegramUI/TelegramUI/ChatBubbleVideoDecoration.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/ChatBubbleVideoDecoration.swift @@ -7,20 +7,25 @@ import UniversalMediaPlayer import AccountContext import PhotoResources -final class ChatBubbleVideoDecoration: UniversalVideoDecoration { +public enum ChatBubbleVideoDecorationContentMode { + case aspectFit + case aspectFill +} + +public final class ChatBubbleVideoDecoration: UniversalVideoDecoration { private let nativeSize: CGSize - private let contentMode: InteractiveMediaNodeContentMode + private let contentMode: ChatBubbleVideoDecorationContentMode - let corners: ImageCorners - let backgroundNode: ASDisplayNode? = nil - let contentContainerNode: ASDisplayNode - let foregroundNode: ASDisplayNode? = nil + public let corners: ImageCorners + public let backgroundNode: ASDisplayNode? = nil + public let contentContainerNode: ASDisplayNode + public let foregroundNode: ASDisplayNode? = nil private var contentNode: (ASDisplayNode & UniversalVideoContentNode)? private var validLayoutSize: CGSize? - init(corners: ImageCorners, nativeSize: CGSize, contentMode: InteractiveMediaNodeContentMode, backgroundColor: UIColor) { + public init(corners: ImageCorners, nativeSize: CGSize, contentMode: ChatBubbleVideoDecorationContentMode, backgroundColor: UIColor) { self.corners = corners self.nativeSize = nativeSize self.contentMode = contentMode @@ -32,7 +37,7 @@ final class ChatBubbleVideoDecoration: UniversalVideoDecoration { self.updateCorners(corners) } - func updateCorners(_ corners: ImageCorners) { + public func updateCorners(_ corners: ImageCorners) { if isRoundEqualCorners(corners) { self.contentContainerNode.cornerRadius = corners.topLeft.radius self.contentContainerNode.layer.mask = nil @@ -61,7 +66,7 @@ final class ChatBubbleVideoDecoration: UniversalVideoDecoration { } } - func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { + public func updateContentNode(_ contentNode: (UniversalVideoContentNode & ASDisplayNode)?) { if self.contentNode !== contentNode { let previous = self.contentNode self.contentNode = contentNode @@ -98,10 +103,10 @@ final class ChatBubbleVideoDecoration: UniversalVideoDecoration { } } - func updateContentNodeSnapshot(_ snapshot: UIView?) { + public func updateContentNodeSnapshot(_ snapshot: UIView?) { } - func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { + public func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { self.validLayoutSize = size let bounds = CGRect(origin: CGPoint(), size: size) @@ -134,10 +139,10 @@ final class ChatBubbleVideoDecoration: UniversalVideoDecoration { } } - func setStatus(_ status: Signal) { + public func setStatus(_ status: Signal) { } - func tap() { + public func tap() { } } diff --git a/submodules/TelegramUniversalVideoContent/Sources/FrameworkBundle.swift b/submodules/TelegramUniversalVideoContent/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/TelegramUniversalVideoContent/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/TelegramUI/TelegramUI/GenericEmbedImplementation.swift b/submodules/TelegramUniversalVideoContent/Sources/GenericEmbedImplementation.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/GenericEmbedImplementation.swift rename to submodules/TelegramUniversalVideoContent/Sources/GenericEmbedImplementation.swift diff --git a/submodules/TelegramUI/TelegramUI/NativeVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/NativeVideoContent.swift rename to submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift index 1703ddd07f..da69224dfe 100644 --- a/submodules/TelegramUI/TelegramUI/NativeVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/NativeVideoContent.swift @@ -10,30 +10,30 @@ import UniversalMediaPlayer import AccountContext import PhotoResources -enum NativeVideoContentId: Hashable { +public enum NativeVideoContentId: Hashable { case message(UInt32, MediaId) case instantPage(MediaId, MediaId) case contextResult(Int64, String) } -final class NativeVideoContent: UniversalVideoContent { - let id: AnyHashable - let nativeId: NativeVideoContentId - let fileReference: FileMediaReference +public final class NativeVideoContent: UniversalVideoContent { + public let id: AnyHashable + public let nativeId: NativeVideoContentId + public let fileReference: FileMediaReference let imageReference: ImageMediaReference? - let dimensions: CGSize - let duration: Int32 - let streamVideo: MediaPlayerStreaming - let loopVideo: Bool - let enableSound: Bool - let baseRate: Double + public let dimensions: CGSize + public let duration: Int32 + public let streamVideo: MediaPlayerStreaming + public let loopVideo: Bool + public let enableSound: Bool + public let baseRate: Double let fetchAutomatically: Bool let onlyFullSizeThumbnail: Bool let continuePlayingWithoutSoundOnLostAudioSession: Bool let placeholderColor: UIColor let tempFilePath: String? - init(id: NativeVideoContentId, fileReference: FileMediaReference, imageReference: ImageMediaReference? = nil, streamVideo: MediaPlayerStreaming = .none, loopVideo: Bool = false, enableSound: Bool = true, baseRate: Double = 1.0, fetchAutomatically: Bool = true, onlyFullSizeThumbnail: Bool = false, continuePlayingWithoutSoundOnLostAudioSession: Bool = false, placeholderColor: UIColor = .white, tempFilePath: String? = nil) { + public init(id: NativeVideoContentId, fileReference: FileMediaReference, imageReference: ImageMediaReference? = nil, streamVideo: MediaPlayerStreaming = .none, loopVideo: Bool = false, enableSound: Bool = true, baseRate: Double = 1.0, fetchAutomatically: Bool = true, onlyFullSizeThumbnail: Bool = false, continuePlayingWithoutSoundOnLostAudioSession: Bool = false, placeholderColor: UIColor = .white, tempFilePath: String? = nil) { self.id = id self.nativeId = id self.fileReference = fileReference @@ -63,11 +63,11 @@ final class NativeVideoContent: UniversalVideoContent { self.tempFilePath = tempFilePath } - func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { + public func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { return NativeVideoContentNode(postbox: postbox, audioSessionManager: audioSession, fileReference: self.fileReference, imageReference: self.imageReference, streamVideo: self.streamVideo, loopVideo: self.loopVideo, enableSound: self.enableSound, baseRate: self.baseRate, fetchAutomatically: self.fetchAutomatically, onlyFullSizeThumbnail: self.onlyFullSizeThumbnail, continuePlayingWithoutSoundOnLostAudioSession: self.continuePlayingWithoutSoundOnLostAudioSession, placeholderColor: self.placeholderColor, tempFilePath: self.tempFilePath) } - func isEqual(to other: UniversalVideoContent) -> Bool { + public func isEqual(to other: UniversalVideoContent) -> Bool { if let other = other as? NativeVideoContent { if case let .message(stableId, _) = self.nativeId { if case .message(stableId, _) = other.nativeId { diff --git a/submodules/TelegramUI/TelegramUI/OverlayUniversalVideoNode.swift b/submodules/TelegramUniversalVideoContent/Sources/OverlayUniversalVideoNode.swift similarity index 82% rename from submodules/TelegramUI/TelegramUI/OverlayUniversalVideoNode.swift rename to submodules/TelegramUniversalVideoContent/Sources/OverlayUniversalVideoNode.swift index c4b09ebbb0..99928d3f97 100644 --- a/submodules/TelegramUI/TelegramUI/OverlayUniversalVideoNode.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/OverlayUniversalVideoNode.swift @@ -8,28 +8,28 @@ import Postbox import TelegramAudio import AccountContext -final class OverlayUniversalVideoNode: OverlayMediaItemNode { +public final class OverlayUniversalVideoNode: OverlayMediaItemNode { private let content: UniversalVideoContent private let videoNode: UniversalVideoNode private let decoration: OverlayVideoDecoration private var validLayoutSize: CGSize? - override var group: OverlayMediaItemNodeGroup? { + override public var group: OverlayMediaItemNodeGroup? { return OverlayMediaItemNodeGroup(rawValue: 0) } - override var isMinimizeable: Bool { + override public var isMinimizeable: Bool { return true } - var canAttachContent: Bool = true { + public var canAttachContent: Bool = true { didSet { self.videoNode.canAttachContent = self.canAttachContent } } - init(postbox: Postbox, audioSession: ManagedAudioSession, manager: UniversalVideoManager, content: UniversalVideoContent, expand: @escaping () -> Void, close: @escaping () -> Void) { + public init(postbox: Postbox, audioSession: ManagedAudioSession, manager: UniversalVideoManager, content: UniversalVideoContent, expand: @escaping () -> Void, close: @escaping () -> Void) { self.content = content var unminimizeImpl: (() -> Void)? var togglePlayPauseImpl: (() -> Void)? @@ -89,19 +89,19 @@ final class OverlayUniversalVideoNode: OverlayMediaItemNode { self.videoNode.canAttachContent = true } - override func didLoad() { + override public func didLoad() { super.didLoad() } - override func layout() { + override public func layout() { self.updateLayout(self.bounds.size) } - override func preferredSizeForOverlayDisplay() -> CGSize { + override public func preferredSizeForOverlayDisplay() -> CGSize { return self.content.dimensions.aspectFitted(CGSize(width: 300.0, height: 300.0)) } - override func updateLayout(_ size: CGSize) { + override public func updateLayout(_ size: CGSize) { if size != self.validLayoutSize { self.updateLayoutImpl(size) } @@ -114,7 +114,7 @@ final class OverlayUniversalVideoNode: OverlayMediaItemNode { self.videoNode.updateLayout(size: size, transition: .immediate) } - override func updateMinimizedEdge(_ edge: OverlayMediaItemMinimizationEdge?, adjusting: Bool) { + override public func updateMinimizedEdge(_ edge: OverlayMediaItemMinimizationEdge?, adjusting: Bool) { self.decoration.updateMinimizedEdge(edge, adjusting: adjusting) } } diff --git a/submodules/TelegramUI/TelegramUI/OverlayVideoDecoration.swift b/submodules/TelegramUniversalVideoContent/Sources/OverlayVideoDecoration.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/OverlayVideoDecoration.swift rename to submodules/TelegramUniversalVideoContent/Sources/OverlayVideoDecoration.swift diff --git a/submodules/TelegramUI/TelegramUI/PictureInPictureVideoControlsNode.swift b/submodules/TelegramUniversalVideoContent/Sources/PictureInPictureVideoControlsNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/PictureInPictureVideoControlsNode.swift rename to submodules/TelegramUniversalVideoContent/Sources/PictureInPictureVideoControlsNode.swift diff --git a/submodules/TelegramUI/TelegramUI/PlatformVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift similarity index 89% rename from submodules/TelegramUI/TelegramUI/PlatformVideoContent.swift rename to submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift index c72b46c448..c502d86b2d 100644 --- a/submodules/TelegramUI/TelegramUI/PlatformVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/PlatformVideoContent.swift @@ -11,50 +11,52 @@ import TelegramAudio import AccountContext import PhotoResources -enum PlatformVideoContentId: Hashable { +public enum PlatformVideoContentId: Hashable { case message(MessageId, UInt32, MediaId) case instantPage(MediaId, MediaId) - static func ==(lhs: PlatformVideoContentId, rhs: PlatformVideoContentId) -> Bool { + public static func ==(lhs: PlatformVideoContentId, rhs: PlatformVideoContentId) -> Bool { switch lhs { - case let .message(messageId, stableId, mediaId): - if case .message(messageId, stableId, mediaId) = rhs { - return true - } else { - return false - } - case let .instantPage(pageId, mediaId): - if case .instantPage(pageId, mediaId) = rhs { - return true - } else { - return false - } + case let .message(messageId, stableId, mediaId): + if case .message(messageId, stableId, mediaId) = rhs { + return true + } else { + return false + } + case let .instantPage(pageId, mediaId): + if case .instantPage(pageId, mediaId) = rhs { + return true + } else { + return false + } } } - var hashValue: Int { + public func hash(into hasher: inout Hasher) { switch self { - case let .message(messageId, _, mediaId): - return messageId.hashValue &* 31 &+ mediaId.hashValue - case let .instantPage(pageId, mediaId): - return pageId.hashValue &* 31 &+ mediaId.hashValue + case let .message(messageId, _, mediaId): + hasher.combine(messageId) + hasher.combine(mediaId) + case let .instantPage(pageId, mediaId): + hasher.combine(pageId) + hasher.combine(mediaId) } } } -final class PlatformVideoContent: UniversalVideoContent { - let id: AnyHashable +public final class PlatformVideoContent: UniversalVideoContent { + public let id: AnyHashable let nativeId: PlatformVideoContentId let fileReference: FileMediaReference - let dimensions: CGSize - let duration: Int32 + public let dimensions: CGSize + public let duration: Int32 let streamVideo: Bool let loopVideo: Bool let enableSound: Bool let baseRate: Double let fetchAutomatically: Bool - init(id: PlatformVideoContentId, fileReference: FileMediaReference, streamVideo: Bool = false, loopVideo: Bool = false, enableSound: Bool = true, baseRate: Double = 1.0, fetchAutomatically: Bool = true) { + public init(id: PlatformVideoContentId, fileReference: FileMediaReference, streamVideo: Bool = false, loopVideo: Bool = false, enableSound: Bool = true, baseRate: Double = 1.0, fetchAutomatically: Bool = true) { self.id = id self.nativeId = id self.fileReference = fileReference @@ -67,11 +69,11 @@ final class PlatformVideoContent: UniversalVideoContent { self.fetchAutomatically = fetchAutomatically } - func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { + public func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { return PlatformVideoContentNode(postbox: postbox, audioSessionManager: audioSession, fileReference: self.fileReference, streamVideo: self.streamVideo, loopVideo: self.loopVideo, enableSound: self.enableSound, baseRate: self.baseRate, fetchAutomatically: self.fetchAutomatically) } - func isEqual(to other: UniversalVideoContent) -> Bool { + public func isEqual(to other: UniversalVideoContent) -> Bool { if let other = other as? PlatformVideoContent { if case let .message(_, stableId, _) = self.nativeId { if case .message(_, stableId, _) = other.nativeId { diff --git a/submodules/TelegramUI/TelegramUI/SystemVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/SystemVideoContent.swift similarity index 96% rename from submodules/TelegramUI/TelegramUI/SystemVideoContent.swift rename to submodules/TelegramUniversalVideoContent/Sources/SystemVideoContent.swift index b8f2140781..153ade57f3 100644 --- a/submodules/TelegramUI/TelegramUI/SystemVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/SystemVideoContent.swift @@ -11,14 +11,14 @@ import UniversalMediaPlayer import AccountContext import PhotoResources -final class SystemVideoContent: UniversalVideoContent { - let id: AnyHashable +public final class SystemVideoContent: UniversalVideoContent { + public let id: AnyHashable let url: String let imageReference: ImageMediaReference - let dimensions: CGSize - let duration: Int32 + public let dimensions: CGSize + public let duration: Int32 - init(url: String, imageReference: ImageMediaReference, dimensions: CGSize, duration: Int32) { + public init(url: String, imageReference: ImageMediaReference, dimensions: CGSize, duration: Int32) { self.id = AnyHashable(url) self.url = url self.imageReference = imageReference @@ -26,7 +26,7 @@ final class SystemVideoContent: UniversalVideoContent { self.duration = duration } - func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { + public func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { return SystemVideoContentNode(postbox: postbox, audioSessionManager: audioSession, url: self.url, imageReference: self.imageReference, intrinsicDimensions: self.dimensions, approximateDuration: self.duration) } } diff --git a/submodules/TelegramUniversalVideoContent/Sources/TelegramUniversalVideoContent.h b/submodules/TelegramUniversalVideoContent/Sources/TelegramUniversalVideoContent.h new file mode 100644 index 0000000000..f70faecb79 --- /dev/null +++ b/submodules/TelegramUniversalVideoContent/Sources/TelegramUniversalVideoContent.h @@ -0,0 +1,19 @@ +// +// TelegramUniversalVideoContent.h +// TelegramUniversalVideoContent +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for TelegramUniversalVideoContent. +FOUNDATION_EXPORT double TelegramUniversalVideoContentVersionNumber; + +//! Project version string for TelegramUniversalVideoContent. +FOUNDATION_EXPORT const unsigned char TelegramUniversalVideoContentVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/UniversalVideoContentManager.swift b/submodules/TelegramUniversalVideoContent/Sources/UniversalVideoContentManager.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/UniversalVideoContentManager.swift rename to submodules/TelegramUniversalVideoContent/Sources/UniversalVideoContentManager.swift index d6d9a1eee0..1f65bbf906 100644 --- a/submodules/TelegramUI/TelegramUI/UniversalVideoContentManager.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/UniversalVideoContentManager.swift @@ -138,11 +138,14 @@ private final class UniversalVideoContentHolderCallbacks { } } -final class UniversalVideoManagerImpl: UniversalVideoManager { +public final class UniversalVideoManagerImpl: UniversalVideoManager { private var holders: [AnyHashable: UniversalVideoContentHolder] = [:] private var holderCallbacks: [AnyHashable: UniversalVideoContentHolderCallbacks] = [:] - func attachUniversalVideoContent(content: UniversalVideoContent, priority: UniversalVideoPriority, create: () -> UniversalVideoContentNode & ASDisplayNode, update: @escaping (((UniversalVideoContentNode & ASDisplayNode), Bool)?) -> Void) -> (AnyHashable, Int32) { + public init() { + } + + public func attachUniversalVideoContent(content: UniversalVideoContent, priority: UniversalVideoPriority, create: () -> UniversalVideoContentNode & ASDisplayNode, update: @escaping (((UniversalVideoContentNode & ASDisplayNode), Bool)?) -> Void) -> (AnyHashable, Int32) { assert(Queue.mainQueue().isCurrent()) var initiatedCreation = false @@ -196,7 +199,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { return (holder.content.id, id) } - func detachUniversalVideoContent(id: AnyHashable, index: Int32) { + public func detachUniversalVideoContent(id: AnyHashable, index: Int32) { assert(Queue.mainQueue().isCurrent()) if let holder = self.holders[id] { @@ -213,7 +216,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { } } - func withUniversalVideoContent(id: AnyHashable, _ f: ((UniversalVideoContentNode & ASDisplayNode)?) -> Void) { + public func withUniversalVideoContent(id: AnyHashable, _ f: ((UniversalVideoContentNode & ASDisplayNode)?) -> Void) { if let holder = self.holders[id] { f(holder.contentNode) } else { @@ -221,7 +224,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { } } - func addPlaybackCompleted(id: AnyHashable, _ f: @escaping () -> Void) -> Int { + public func addPlaybackCompleted(id: AnyHashable, _ f: @escaping () -> Void) -> Int { assert(Queue.mainQueue().isCurrent()) var callbacks: UniversalVideoContentHolderCallbacks if let current = self.holderCallbacks[id] { @@ -233,7 +236,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { return callbacks.playbackCompleted.add(f) } - func removePlaybackCompleted(id: AnyHashable, index: Int) { + public func removePlaybackCompleted(id: AnyHashable, index: Int) { if let current = self.holderCallbacks[id] { current.playbackCompleted.remove(index) if current.playbackCompleted.isEmpty { @@ -242,7 +245,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { } } - func statusSignal(content: UniversalVideoContent) -> Signal { + public func statusSignal(content: UniversalVideoContent) -> Signal { return Signal { subscriber in var callbacks: UniversalVideoContentHolderCallbacks if let current = self.holderCallbacks[content.id] { @@ -275,7 +278,7 @@ final class UniversalVideoManagerImpl: UniversalVideoManager { } |> runOn(Queue.mainQueue()) } - func bufferingStatusSignal(content: UniversalVideoContent) -> Signal<(IndexSet, Int)?, NoError> { + public func bufferingStatusSignal(content: UniversalVideoContent) -> Signal<(IndexSet, Int)?, NoError> { return Signal { subscriber in var callbacks: UniversalVideoContentHolderCallbacks if let current = self.holderCallbacks[content.id] { diff --git a/submodules/TelegramUI/TelegramUI/VimeoEmbedImplementation.swift b/submodules/TelegramUniversalVideoContent/Sources/VimeoEmbedImplementation.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/VimeoEmbedImplementation.swift rename to submodules/TelegramUniversalVideoContent/Sources/VimeoEmbedImplementation.swift diff --git a/submodules/TelegramUI/TelegramUI/WebEmbedPlayerNode.swift b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedPlayerNode.swift similarity index 95% rename from submodules/TelegramUI/TelegramUI/WebEmbedPlayerNode.swift rename to submodules/TelegramUniversalVideoContent/Sources/WebEmbedPlayerNode.swift index 05cd47f6c4..6420056f7d 100644 --- a/submodules/TelegramUI/TelegramUI/WebEmbedPlayerNode.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedPlayerNode.swift @@ -18,22 +18,22 @@ protocol WebEmbedImplementation { func callback(url: URL) } -enum WebEmbedType { +public enum WebEmbedType { case youtube(videoId: String, timestamp: Int) case vimeo(videoId: String, timestamp: Int) case iframe(url: String) - var supportsSeeking: Bool { + public var supportsSeeking: Bool { switch self { - case .youtube, .vimeo: - return true - default: - return false + case .youtube, .vimeo: + return true + default: + return false } } } -func webEmbedType(content: TelegramMediaWebpageLoadedContent, forcedTimestamp: Int? = nil) -> WebEmbedType { +public func webEmbedType(content: TelegramMediaWebpageLoadedContent, forcedTimestamp: Int? = nil) -> WebEmbedType { if let (videoId, timestamp) = extractYoutubeVideoIdAndTimestamp(url: content.url) { return .youtube(videoId: videoId, timestamp: forcedTimestamp ?? timestamp) } else { diff --git a/submodules/TelegramUI/TelegramUI/WebEmbedVideoContent.swift b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/WebEmbedVideoContent.swift rename to submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift index 7616072376..eda6252517 100644 --- a/submodules/TelegramUI/TelegramUI/WebEmbedVideoContent.swift +++ b/submodules/TelegramUniversalVideoContent/Sources/WebEmbedVideoContent.swift @@ -11,15 +11,15 @@ import LegacyComponents import AccountContext import PhotoResources -final class WebEmbedVideoContent: UniversalVideoContent { - let id: AnyHashable +public final class WebEmbedVideoContent: UniversalVideoContent { + public let id: AnyHashable let webPage: TelegramMediaWebpage - let webpageContent: TelegramMediaWebpageLoadedContent - let dimensions: CGSize - let duration: Int32 + public let webpageContent: TelegramMediaWebpageLoadedContent + public let dimensions: CGSize + public let duration: Int32 let forcedTimestamp: Int? - init?(webPage: TelegramMediaWebpage, webpageContent: TelegramMediaWebpageLoadedContent, forcedTimestamp: Int? = nil) { + public init?(webPage: TelegramMediaWebpage, webpageContent: TelegramMediaWebpageLoadedContent, forcedTimestamp: Int? = nil) { guard let embedUrl = webpageContent.embedUrl else { return nil } @@ -31,7 +31,7 @@ final class WebEmbedVideoContent: UniversalVideoContent { self.forcedTimestamp = forcedTimestamp } - func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { + public func makeContentNode(postbox: Postbox, audioSession: ManagedAudioSession) -> UniversalVideoContentNode & ASDisplayNode { return WebEmbedVideoContentNode(postbox: postbox, audioSessionManager: audioSession, webPage: self.webPage, webpageContent: self.webpageContent, forcedTimestamp: self.forcedTimestamp) } } diff --git a/submodules/TelegramUI/TelegramUI/YoutubeEmbedImplementation.swift b/submodules/TelegramUniversalVideoContent/Sources/YoutubeEmbedImplementation.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/YoutubeEmbedImplementation.swift rename to submodules/TelegramUniversalVideoContent/Sources/YoutubeEmbedImplementation.swift diff --git a/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..0733939be1 --- /dev/null +++ b/submodules/TelegramUniversalVideoContent/TelegramUniversalVideoContent_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,645 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C3742300B0CF00FAB518 /* TelegramUniversalVideoContent.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C3722300B0CF00FAB518 /* TelegramUniversalVideoContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C3832300B40E00FAB518 /* NativeVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C37E2300B40D00FAB518 /* NativeVideoContent.swift */; }; + D0C9C3842300B40E00FAB518 /* UniversalVideoContentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C37F2300B40E00FAB518 /* UniversalVideoContentManager.swift */; }; + D0C9C3852300B40E00FAB518 /* SystemVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3802300B40E00FAB518 /* SystemVideoContent.swift */; }; + D0C9C3862300B40E00FAB518 /* PlatformVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3812300B40E00FAB518 /* PlatformVideoContent.swift */; }; + D0C9C3872300B40E00FAB518 /* WebEmbedVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3822300B40E00FAB518 /* WebEmbedVideoContent.swift */; }; + D0C9C38A2300B41A00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3892300B41A00FAB518 /* Foundation.framework */; }; + D0C9C38C2300B43400FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C38B2300B43400FAB518 /* UIKit.framework */; }; + D0C9C38E2300B43800FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C38D2300B43800FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C3902300B43C00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C38F2300B43C00FAB518 /* Display.framework */; }; + D0C9C3922300B44200FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3912300B44200FAB518 /* AccountContext.framework */; }; + D0C9C3942300B44700FAB518 /* UniversalMediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3932300B44700FAB518 /* UniversalMediaPlayer.framework */; }; + D0C9C39A2300B4A700FAB518 /* WebEmbedPlayerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3992300B4A700FAB518 /* WebEmbedPlayerNode.swift */; }; + D0C9C39C2300B4AE00FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C39B2300B4AE00FAB518 /* SwiftSignalKit.framework */; }; + D0C9C39E2300B4B200FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C39D2300B4B200FAB518 /* Postbox.framework */; }; + D0C9C3A02300B4B700FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C39F2300B4B700FAB518 /* TelegramCore.framework */; }; + D0C9C3A42300B4E300FAB518 /* YoutubeEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3A12300B4E200FAB518 /* YoutubeEmbedImplementation.swift */; }; + D0C9C3A52300B4E300FAB518 /* GenericEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3A22300B4E200FAB518 /* GenericEmbedImplementation.swift */; }; + D0C9C3A62300B4E300FAB518 /* VimeoEmbedImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3A32300B4E300FAB518 /* VimeoEmbedImplementation.swift */; }; + D0C9C3C82300B9EB00FAB518 /* OverlayUniversalVideoNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3C62300B9EB00FAB518 /* OverlayUniversalVideoNode.swift */; }; + D0C9C3C92300B9EB00FAB518 /* OverlayVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3C72300B9EB00FAB518 /* OverlayVideoDecoration.swift */; }; + D0C9C3CB2300BA3300FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3CA2300BA3300FAB518 /* LegacyComponents.framework */; }; + D0C9C3CF2300BA4400FAB518 /* TelegramAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3CE2300BA4400FAB518 /* TelegramAudio.framework */; }; + D0C9C3D12300BA4F00FAB518 /* RadialStatusNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C3D02300BA4F00FAB518 /* RadialStatusNode.framework */; }; + D0C9C3D32300BA7000FAB518 /* PictureInPictureVideoControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D22300BA6F00FAB518 /* PictureInPictureVideoControlsNode.swift */; }; + D0C9C3D52300BA8B00FAB518 /* FrameworkBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D42300BA8B00FAB518 /* FrameworkBundle.swift */; }; + D0C9C4442300DC2000FAB518 /* ChatBubbleVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4422300DC2000FAB518 /* ChatBubbleVideoDecoration.swift */; }; + D0C9C4452300DC2000FAB518 /* ChatBubbleInstantVideoDecoration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C4432300DC2000FAB518 /* ChatBubbleInstantVideoDecoration.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C36F2300B0CF00FAB518 /* TelegramUniversalVideoContent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramUniversalVideoContent.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3722300B0CF00FAB518 /* TelegramUniversalVideoContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramUniversalVideoContent.h; sourceTree = ""; }; + D0C9C3732300B0CF00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C37E2300B40D00FAB518 /* NativeVideoContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NativeVideoContent.swift; sourceTree = ""; }; + D0C9C37F2300B40E00FAB518 /* UniversalVideoContentManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UniversalVideoContentManager.swift; sourceTree = ""; }; + D0C9C3802300B40E00FAB518 /* SystemVideoContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemVideoContent.swift; sourceTree = ""; }; + D0C9C3812300B40E00FAB518 /* PlatformVideoContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlatformVideoContent.swift; sourceTree = ""; }; + D0C9C3822300B40E00FAB518 /* WebEmbedVideoContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebEmbedVideoContent.swift; sourceTree = ""; }; + D0C9C3892300B41A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C38B2300B43400FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C38D2300B43800FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C38F2300B43C00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3912300B44200FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3932300B44700FAB518 /* UniversalMediaPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UniversalMediaPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3992300B4A700FAB518 /* WebEmbedPlayerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebEmbedPlayerNode.swift; sourceTree = ""; }; + D0C9C39B2300B4AE00FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C39D2300B4B200FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C39F2300B4B700FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3A12300B4E200FAB518 /* YoutubeEmbedImplementation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YoutubeEmbedImplementation.swift; sourceTree = ""; }; + D0C9C3A22300B4E200FAB518 /* GenericEmbedImplementation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GenericEmbedImplementation.swift; sourceTree = ""; }; + D0C9C3A32300B4E300FAB518 /* VimeoEmbedImplementation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VimeoEmbedImplementation.swift; sourceTree = ""; }; + D0C9C3C62300B9EB00FAB518 /* OverlayUniversalVideoNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OverlayUniversalVideoNode.swift; sourceTree = ""; }; + D0C9C3C72300B9EB00FAB518 /* OverlayVideoDecoration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OverlayVideoDecoration.swift; sourceTree = ""; }; + D0C9C3CA2300BA3300FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3CC2300BA3800FAB518 /* TelegramUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3CE2300BA4400FAB518 /* TelegramAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3D02300BA4F00FAB518 /* RadialStatusNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RadialStatusNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3D22300BA6F00FAB518 /* PictureInPictureVideoControlsNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PictureInPictureVideoControlsNode.swift; sourceTree = ""; }; + D0C9C3D42300BA8B00FAB518 /* FrameworkBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkBundle.swift; sourceTree = ""; }; + D0C9C4422300DC2000FAB518 /* ChatBubbleVideoDecoration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBubbleVideoDecoration.swift; sourceTree = ""; }; + D0C9C4432300DC2000FAB518 /* ChatBubbleInstantVideoDecoration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBubbleInstantVideoDecoration.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C36C2300B0CF00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3D12300BA4F00FAB518 /* RadialStatusNode.framework in Frameworks */, + D0C9C3CF2300BA4400FAB518 /* TelegramAudio.framework in Frameworks */, + D0C9C3CB2300BA3300FAB518 /* LegacyComponents.framework in Frameworks */, + D0C9C3A02300B4B700FAB518 /* TelegramCore.framework in Frameworks */, + D0C9C39E2300B4B200FAB518 /* Postbox.framework in Frameworks */, + D0C9C39C2300B4AE00FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9C3942300B44700FAB518 /* UniversalMediaPlayer.framework in Frameworks */, + D0C9C3922300B44200FAB518 /* AccountContext.framework in Frameworks */, + D0C9C3902300B43C00FAB518 /* Display.framework in Frameworks */, + D0C9C38E2300B43800FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C38C2300B43400FAB518 /* UIKit.framework in Frameworks */, + D0C9C38A2300B41A00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C3652300B0CF00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C3732300B0CF00FAB518 /* Info.plist */, + D0C9C3712300B0CF00FAB518 /* Sources */, + D0C9C3702300B0CF00FAB518 /* Products */, + D0C9C3882300B41900FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C3702300B0CF00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C36F2300B0CF00FAB518 /* TelegramUniversalVideoContent.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C3712300B0CF00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C4432300DC2000FAB518 /* ChatBubbleInstantVideoDecoration.swift */, + D0C9C4422300DC2000FAB518 /* ChatBubbleVideoDecoration.swift */, + D0C9C3D22300BA6F00FAB518 /* PictureInPictureVideoControlsNode.swift */, + D0C9C3C62300B9EB00FAB518 /* OverlayUniversalVideoNode.swift */, + D0C9C3C72300B9EB00FAB518 /* OverlayVideoDecoration.swift */, + D0C9C3A22300B4E200FAB518 /* GenericEmbedImplementation.swift */, + D0C9C3A32300B4E300FAB518 /* VimeoEmbedImplementation.swift */, + D0C9C3A12300B4E200FAB518 /* YoutubeEmbedImplementation.swift */, + D0C9C3992300B4A700FAB518 /* WebEmbedPlayerNode.swift */, + D0C9C37E2300B40D00FAB518 /* NativeVideoContent.swift */, + D0C9C3812300B40E00FAB518 /* PlatformVideoContent.swift */, + D0C9C3802300B40E00FAB518 /* SystemVideoContent.swift */, + D0C9C37F2300B40E00FAB518 /* UniversalVideoContentManager.swift */, + D0C9C3822300B40E00FAB518 /* WebEmbedVideoContent.swift */, + D0C9C3D42300BA8B00FAB518 /* FrameworkBundle.swift */, + D0C9C3722300B0CF00FAB518 /* TelegramUniversalVideoContent.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C3882300B41900FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C3D02300BA4F00FAB518 /* RadialStatusNode.framework */, + D0C9C3CE2300BA4400FAB518 /* TelegramAudio.framework */, + D0C9C3CC2300BA3800FAB518 /* TelegramUI.framework */, + D0C9C3CA2300BA3300FAB518 /* LegacyComponents.framework */, + D0C9C39F2300B4B700FAB518 /* TelegramCore.framework */, + D0C9C39D2300B4B200FAB518 /* Postbox.framework */, + D0C9C39B2300B4AE00FAB518 /* SwiftSignalKit.framework */, + D0C9C3932300B44700FAB518 /* UniversalMediaPlayer.framework */, + D0C9C3912300B44200FAB518 /* AccountContext.framework */, + D0C9C38F2300B43C00FAB518 /* Display.framework */, + D0C9C38D2300B43800FAB518 /* AsyncDisplayKit.framework */, + D0C9C38B2300B43400FAB518 /* UIKit.framework */, + D0C9C3892300B41A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C36A2300B0CF00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3742300B0CF00FAB518 /* TelegramUniversalVideoContent.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C36E2300B0CF00FAB518 /* TelegramUniversalVideoContent */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C3772300B0CF00FAB518 /* Build configuration list for PBXNativeTarget "TelegramUniversalVideoContent" */; + buildPhases = ( + D0C9C36A2300B0CF00FAB518 /* Headers */, + D0C9C36B2300B0CF00FAB518 /* Sources */, + D0C9C36C2300B0CF00FAB518 /* Frameworks */, + D0C9C36D2300B0CF00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TelegramUniversalVideoContent; + productName = TelegramUniversalVideoContent; + productReference = D0C9C36F2300B0CF00FAB518 /* TelegramUniversalVideoContent.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C3662300B0CF00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C36E2300B0CF00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C3692300B0CF00FAB518 /* Build configuration list for PBXProject "TelegramUniversalVideoContent_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C3652300B0CF00FAB518; + productRefGroup = D0C9C3702300B0CF00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C36E2300B0CF00FAB518 /* TelegramUniversalVideoContent */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C36D2300B0CF00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C36B2300B0CF00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3862300B40E00FAB518 /* PlatformVideoContent.swift in Sources */, + D0C9C4452300DC2000FAB518 /* ChatBubbleInstantVideoDecoration.swift in Sources */, + D0C9C4442300DC2000FAB518 /* ChatBubbleVideoDecoration.swift in Sources */, + D0C9C3832300B40E00FAB518 /* NativeVideoContent.swift in Sources */, + D0C9C3872300B40E00FAB518 /* WebEmbedVideoContent.swift in Sources */, + D0C9C3842300B40E00FAB518 /* UniversalVideoContentManager.swift in Sources */, + D0C9C3A62300B4E300FAB518 /* VimeoEmbedImplementation.swift in Sources */, + D0C9C3C92300B9EB00FAB518 /* OverlayVideoDecoration.swift in Sources */, + D0C9C3D32300BA7000FAB518 /* PictureInPictureVideoControlsNode.swift in Sources */, + D0C9C3D52300BA8B00FAB518 /* FrameworkBundle.swift in Sources */, + D0C9C3A42300B4E300FAB518 /* YoutubeEmbedImplementation.swift in Sources */, + D0C9C3852300B40E00FAB518 /* SystemVideoContent.swift in Sources */, + D0C9C3A52300B4E300FAB518 /* GenericEmbedImplementation.swift in Sources */, + D0C9C3C82300B9EB00FAB518 /* OverlayUniversalVideoNode.swift in Sources */, + D0C9C39A2300B4A700FAB518 /* WebEmbedPlayerNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C3752300B0CF00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C3762300B0CF00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3782300B0CF00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramUniversalVideoContent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C3792300B0CF00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramUniversalVideoContent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C37A2300B34700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C37B2300B34700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramUniversalVideoContent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C37C2300B35300FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C37D2300B35300FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TelegramUniversalVideoContent; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C3692300B0CF00FAB518 /* Build configuration list for PBXProject "TelegramUniversalVideoContent_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3752300B0CF00FAB518 /* DebugAppStoreLLC */, + D0C9C37A2300B34700FAB518 /* DebugHockeyapp */, + D0C9C3762300B0CF00FAB518 /* ReleaseAppStoreLLC */, + D0C9C37C2300B35300FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C3772300B0CF00FAB518 /* Build configuration list for PBXNativeTarget "TelegramUniversalVideoContent" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3782300B0CF00FAB518 /* DebugAppStoreLLC */, + D0C9C37B2300B34700FAB518 /* DebugHockeyapp */, + D0C9C3792300B0CF00FAB518 /* ReleaseAppStoreLLC */, + D0C9C37D2300B35300FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C3662300B0CF00FAB518 /* Project object */; +} diff --git a/submodules/TelegramUI/TelegramUI/AddFormatToStringWithRanges.swift b/submodules/TextFormat/Sources/AddFormatToStringWithRanges.swift similarity index 84% rename from submodules/TelegramUI/TelegramUI/AddFormatToStringWithRanges.swift rename to submodules/TextFormat/Sources/AddFormatToStringWithRanges.swift index bce3a6d409..f0c2058f4e 100644 --- a/submodules/TelegramUI/TelegramUI/AddFormatToStringWithRanges.swift +++ b/submodules/TextFormat/Sources/AddFormatToStringWithRanges.swift @@ -1,8 +1,7 @@ import Foundation import UIKit -import TextFormat -func addAttributesToStringWithRanges(_ stringWithRanges: (String, [(Int, NSRange)]), body: MarkdownAttributeSet, argumentAttributes: [Int: MarkdownAttributeSet], textAlignment: NSTextAlignment = .natural) -> NSAttributedString { +public func addAttributesToStringWithRanges(_ stringWithRanges: (String, [(Int, NSRange)]), body: MarkdownAttributeSet, argumentAttributes: [Int: MarkdownAttributeSet], textAlignment: NSTextAlignment = .natural) -> NSAttributedString { let result = NSMutableAttributedString() var bodyAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: body.font, NSAttributedString.Key.foregroundColor: body.textColor, NSAttributedString.Key.paragraphStyle: paragraphStyleWithAlignment(textAlignment)] diff --git a/submodules/TextFormat/TextFormat_Xcode.xcodeproj/project.pbxproj b/submodules/TextFormat/TextFormat_Xcode.xcodeproj/project.pbxproj index 1f84c0adef..3cc8c1185d 100644 --- a/submodules/TextFormat/TextFormat_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TextFormat/TextFormat_Xcode.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ D06018B722F365D800796784 /* StringWithAppliedEntities.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06018B622F365D700796784 /* StringWithAppliedEntities.swift */; }; D0A0B53B22F3714F00628AF3 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A0B53A22F3714F00628AF3 /* TelegramCore.framework */; }; D0A0B53D22F3726300628AF3 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A0B53C22F3726300628AF3 /* TelegramPresentationData.framework */; }; + D0C9C3602300AF1E00FAB518 /* AddFormatToStringWithRanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C35F2300AF1E00FAB518 /* AddFormatToStringWithRanges.swift */; }; D0D328CA22F3495C00D07EE2 /* TextFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D328C822F3495C00D07EE2 /* TextFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; D0D328D522F349CB00D07EE2 /* Markdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D328D422F349CB00D07EE2 /* Markdown.swift */; }; D0D328D822F349F400D07EE2 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D328D722F349F400D07EE2 /* Display.framework */; }; @@ -26,6 +27,7 @@ D06018B622F365D700796784 /* StringWithAppliedEntities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringWithAppliedEntities.swift; sourceTree = ""; }; D0A0B53A22F3714F00628AF3 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0A0B53C22F3726300628AF3 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C35F2300AF1E00FAB518 /* AddFormatToStringWithRanges.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddFormatToStringWithRanges.swift; sourceTree = ""; }; D0D328C522F3495C00D07EE2 /* TextFormat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TextFormat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0D328C822F3495C00D07EE2 /* TextFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextFormat.h; sourceTree = ""; }; D0D328C922F3495C00D07EE2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -73,6 +75,7 @@ D0D328C722F3495C00D07EE2 /* Sources */ = { isa = PBXGroup; children = ( + D0C9C35F2300AF1E00FAB518 /* AddFormatToStringWithRanges.swift */, D06018B622F365D700796784 /* StringWithAppliedEntities.swift */, D06018B222F3650C00796784 /* ChatTextInputAttributes.swift */, D06018B022F364DC00796784 /* GenerateTextEntities.swift */, @@ -177,6 +180,7 @@ files = ( D06018B722F365D800796784 /* StringWithAppliedEntities.swift in Sources */, D06018B322F3650C00796784 /* ChatTextInputAttributes.swift in Sources */, + D0C9C3602300AF1E00FAB518 /* AddFormatToStringWithRanges.swift in Sources */, D0D328D522F349CB00D07EE2 /* Markdown.swift in Sources */, D0D328E022F3526000D07EE2 /* TelegramAttributes.swift in Sources */, D06018B122F364DC00796784 /* GenerateTextEntities.swift in Sources */, diff --git a/submodules/WebUI/Info.plist b/submodules/WebUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/WebUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/WebController.swift b/submodules/WebUI/Sources/WebController.swift similarity index 70% rename from submodules/TelegramUI/TelegramUI/WebController.swift rename to submodules/WebUI/Sources/WebController.swift index 6739c5c292..12f9d4516f 100644 --- a/submodules/TelegramUI/TelegramUI/WebController.swift +++ b/submodules/WebUI/Sources/WebController.swift @@ -3,14 +3,14 @@ import UIKit import Display import SafariServices -final class WebController: ViewController { +public final class WebController: ViewController { private let url: URL private var controllerNode: WebControllerNode { return self.displayNode as! WebControllerNode } - init(url: URL) { + public init(url: URL) { self.url = url super.init(navigationBarPresentationData: nil) @@ -18,17 +18,17 @@ final class WebController: ViewController { self.edgesForExtendedLayout = [] } - required init(coder aDecoder: NSCoder) { + required public init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func loadDisplayNode() { + override public func loadDisplayNode() { self.displayNode = WebControllerNode(url: self.url) self.displayNodeDidLoad() } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, transition: transition) self.controllerNode.containerLayoutUpdated(layout, transition: transition) } diff --git a/submodules/TelegramUI/TelegramUI/WebControllerNode.swift b/submodules/WebUI/Sources/WebControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/WebControllerNode.swift rename to submodules/WebUI/Sources/WebControllerNode.swift diff --git a/submodules/WebUI/Sources/WebUI.h b/submodules/WebUI/Sources/WebUI.h new file mode 100644 index 0000000000..d599a3132a --- /dev/null +++ b/submodules/WebUI/Sources/WebUI.h @@ -0,0 +1,19 @@ +// +// WebUI.h +// WebUI +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for WebUI. +FOUNDATION_EXPORT double WebUIVersionNumber; + +//! Project version string for WebUI. +FOUNDATION_EXPORT const unsigned char WebUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/WebUI/WebUI_Xcode.xcodeproj/project.pbxproj b/submodules/WebUI/WebUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..823ce3e786 --- /dev/null +++ b/submodules/WebUI/WebUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,563 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C1C623001FDD00FAB518 /* WebUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C1C423001FDD00FAB518 /* WebUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C1CE2300206300FAB518 /* WebControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1CC2300206300FAB518 /* WebControllerNode.swift */; }; + D0C9C1CF2300206300FAB518 /* WebController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C1CD2300206300FAB518 /* WebController.swift */; }; + D0C9C1D22300208C00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1D12300208C00FAB518 /* Foundation.framework */; }; + D0C9C1D42300209000FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1D32300209000FAB518 /* UIKit.framework */; }; + D0C9C1D62300209400FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1D52300209400FAB518 /* AsyncDisplayKit.framework */; }; + D0C9C1D82300209800FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1D72300209800FAB518 /* Display.framework */; }; + D0C9C1DA2300209C00FAB518 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C1D92300209C00FAB518 /* WebKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C1C123001FDD00FAB518 /* WebUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WebUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1C423001FDD00FAB518 /* WebUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebUI.h; sourceTree = ""; }; + D0C9C1C523001FDD00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C1CC2300206300FAB518 /* WebControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebControllerNode.swift; sourceTree = ""; }; + D0C9C1CD2300206300FAB518 /* WebController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebController.swift; sourceTree = ""; }; + D0C9C1D12300208C00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9C1D32300209000FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9C1D52300209400FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1D72300209800FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C1D92300209C00FAB518 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C1BE23001FDD00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C1DA2300209C00FAB518 /* WebKit.framework in Frameworks */, + D0C9C1D82300209800FAB518 /* Display.framework in Frameworks */, + D0C9C1D62300209400FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9C1D42300209000FAB518 /* UIKit.framework in Frameworks */, + D0C9C1D22300208C00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C1B723001FDD00FAB518 = { + isa = PBXGroup; + children = ( + D0C9C1C523001FDD00FAB518 /* Info.plist */, + D0C9C1C323001FDD00FAB518 /* Sources */, + D0C9C1C223001FDD00FAB518 /* Products */, + D0C9C1D02300208C00FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9C1C223001FDD00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C1C123001FDD00FAB518 /* WebUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C1C323001FDD00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C1CD2300206300FAB518 /* WebController.swift */, + D0C9C1CC2300206300FAB518 /* WebControllerNode.swift */, + D0C9C1C423001FDD00FAB518 /* WebUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9C1D02300208C00FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9C1D92300209C00FAB518 /* WebKit.framework */, + D0C9C1D72300209800FAB518 /* Display.framework */, + D0C9C1D52300209400FAB518 /* AsyncDisplayKit.framework */, + D0C9C1D32300209000FAB518 /* UIKit.framework */, + D0C9C1D12300208C00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C1BC23001FDD00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C1C623001FDD00FAB518 /* WebUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C1C023001FDD00FAB518 /* WebUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C1C923001FDD00FAB518 /* Build configuration list for PBXNativeTarget "WebUI" */; + buildPhases = ( + D0C9C1BC23001FDD00FAB518 /* Headers */, + D0C9C1BD23001FDD00FAB518 /* Sources */, + D0C9C1BE23001FDD00FAB518 /* Frameworks */, + D0C9C1BF23001FDD00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WebUI; + productName = WebUI; + productReference = D0C9C1C123001FDD00FAB518 /* WebUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C1B823001FDD00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C1C023001FDD00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C1BB23001FDD00FAB518 /* Build configuration list for PBXProject "WebUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C1B723001FDD00FAB518; + productRefGroup = D0C9C1C223001FDD00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C1C023001FDD00FAB518 /* WebUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C1BF23001FDD00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C1BD23001FDD00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C1CF2300206300FAB518 /* WebController.swift in Sources */, + D0C9C1CE2300206300FAB518 /* WebControllerNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C1C723001FDD00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C1C823001FDD00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C1CA23001FDD00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C1CB23001FDD00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C1DD230021BE00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C1DE230021BE00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C1DF230021CB00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C1E0230021CB00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C1BB23001FDD00FAB518 /* Build configuration list for PBXProject "WebUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C1C723001FDD00FAB518 /* DebugAppStoreLLC */, + D0C9C1DD230021BE00FAB518 /* DebugHockeyapp */, + D0C9C1C823001FDD00FAB518 /* ReleaseAppStoreLLC */, + D0C9C1DF230021CB00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C1C923001FDD00FAB518 /* Build configuration list for PBXNativeTarget "WebUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C1CA23001FDD00FAB518 /* DebugAppStoreLLC */, + D0C9C1DE230021BE00FAB518 /* DebugHockeyapp */, + D0C9C1CB23001FDD00FAB518 /* ReleaseAppStoreLLC */, + D0C9C1E0230021CB00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C1B823001FDD00FAB518 /* Project object */; +} diff --git a/submodules/WebsiteType/Info.plist b/submodules/WebsiteType/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/WebsiteType/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/WebsiteType/Sources/WebsiteType.h b/submodules/WebsiteType/Sources/WebsiteType.h new file mode 100644 index 0000000000..1ffa0b57dd --- /dev/null +++ b/submodules/WebsiteType/Sources/WebsiteType.h @@ -0,0 +1,19 @@ +// +// WebsiteType.h +// WebsiteType +// +// Created by Peter on 8/11/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for WebsiteType. +FOUNDATION_EXPORT double WebsiteTypeVersionNumber; + +//! Project version string for WebsiteType. +FOUNDATION_EXPORT const unsigned char WebsiteTypeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/WebsiteType/Sources/WebsiteType.swift b/submodules/WebsiteType/Sources/WebsiteType.swift new file mode 100644 index 0000000000..ce214994cb --- /dev/null +++ b/submodules/WebsiteType/Sources/WebsiteType.swift @@ -0,0 +1,18 @@ +import Foundation + +public enum WebsiteType { + case generic + case twitter + case instagram +} + +public func websiteType(of websiteName: String?) -> WebsiteType { + if let websiteName = websiteName?.lowercased() { + if websiteName == "twitter" { + return .twitter + } else if websiteName == "instagram" { + return .instagram + } + } + return .generic +} diff --git a/submodules/WebsiteType/WebsiteType_Xcode.xcodeproj/project.pbxproj b/submodules/WebsiteType/WebsiteType_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..00cca7a13b --- /dev/null +++ b/submodules/WebsiteType/WebsiteType_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,531 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9C3B62300B67400FAB518 /* WebsiteType.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9C3B42300B67400FAB518 /* WebsiteType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9C3C12300B6C100FAB518 /* WebsiteType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3C02300B6C100FAB518 /* WebsiteType.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9C3B12300B67400FAB518 /* WebsiteType.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WebsiteType.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9C3B42300B67400FAB518 /* WebsiteType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebsiteType.h; sourceTree = ""; }; + D0C9C3B52300B67400FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9C3C02300B6C100FAB518 /* WebsiteType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebsiteType.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9C3AE2300B67400FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9C3A72300B67400FAB518 = { + isa = PBXGroup; + children = ( + D0C9C3B52300B67400FAB518 /* Info.plist */, + D0C9C3B32300B67400FAB518 /* Sources */, + D0C9C3B22300B67400FAB518 /* Products */, + ); + sourceTree = ""; + }; + D0C9C3B22300B67400FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9C3B12300B67400FAB518 /* WebsiteType.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9C3B32300B67400FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9C3C02300B6C100FAB518 /* WebsiteType.swift */, + D0C9C3B42300B67400FAB518 /* WebsiteType.h */, + ); + path = Sources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9C3AC2300B67400FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3B62300B67400FAB518 /* WebsiteType.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9C3B02300B67400FAB518 /* WebsiteType */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9C3B92300B67400FAB518 /* Build configuration list for PBXNativeTarget "WebsiteType" */; + buildPhases = ( + D0C9C3AC2300B67400FAB518 /* Headers */, + D0C9C3AD2300B67400FAB518 /* Sources */, + D0C9C3AE2300B67400FAB518 /* Frameworks */, + D0C9C3AF2300B67400FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WebsiteType; + productName = WebsiteType; + productReference = D0C9C3B12300B67400FAB518 /* WebsiteType.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9C3A82300B67400FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9C3B02300B67400FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9C3AB2300B67400FAB518 /* Build configuration list for PBXProject "WebsiteType_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9C3A72300B67400FAB518; + productRefGroup = D0C9C3B22300B67400FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9C3B02300B67400FAB518 /* WebsiteType */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9C3AF2300B67400FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9C3AD2300B67400FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9C3C12300B6C100FAB518 /* WebsiteType.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9C3B72300B67400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9C3B82300B67400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3BA2300B67400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebsiteType; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9C3BB2300B67400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebsiteType; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9C3BC2300B69700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9C3BD2300B69700FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebsiteType; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9C3BE2300B6A200FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9C3BF2300B6A200FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.WebsiteType; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9C3AB2300B67400FAB518 /* Build configuration list for PBXProject "WebsiteType_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3B72300B67400FAB518 /* DebugAppStoreLLC */, + D0C9C3BC2300B69700FAB518 /* DebugHockeyapp */, + D0C9C3B82300B67400FAB518 /* ReleaseAppStoreLLC */, + D0C9C3BE2300B6A200FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9C3B92300B67400FAB518 /* Build configuration list for PBXNativeTarget "WebsiteType" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9C3BA2300B67400FAB518 /* DebugAppStoreLLC */, + D0C9C3BD2300B69700FAB518 /* DebugHockeyapp */, + D0C9C3BB2300B67400FAB518 /* ReleaseAppStoreLLC */, + D0C9C3BF2300B6A200FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9C3A82300B67400FAB518 /* Project object */; +}