From e6e030b4840ed51cc888789d21987a335ac6982c Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 13:04:25 +0530 Subject: [PATCH 01/29] NMC 2015 - NMC 2157 move copy configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index b24d42ac75..8990ecf587 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -11,9 +11,12 @@ 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76B3CCD1EAE01BD00921AC9 /* NCBrand.swift */; }; 2C33C48223E2C475005F963B /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C33C48123E2C475005F963B /* NotificationService.swift */; }; 2C33C48623E2C475005F963B /* Notification Service Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 2F96A1BAFB10ACFEAC68EF1C /* NCContextMenuPlayerTracks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */; }; - 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellMain.swift */; }; - A5A87F9E4B0E4441A6A4BC20 /* NCContextMenuProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */; }; + 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3704EB2923D5A58400455C5B /* NCMenu.storyboard */; }; + 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; + 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; + 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; + 8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */; }; AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */; }; AA3C85EB2D36BBFB00F74F12 /* OCSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */; }; AA3C85EE2D36BCCE00F74F12 /* SharesResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */; }; @@ -1154,8 +1157,12 @@ 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Notification Service Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 2C33C48123E2C475005F963B /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 2C33C48A23E2CC26005F963B /* Notification_Service_Extension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Notification_Service_Extension-Bridging-Header.h"; sourceTree = ""; }; - 370D26AE248A3D7A00121797 /* NCCellMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellMain.swift; sourceTree = ""; }; - 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuComment.swift; sourceTree = ""; }; + 3704EB2923D5A58400455C5B /* NCMenu.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCMenu.storyboard; sourceTree = ""; }; + 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; + 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; + 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = ""; }; AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestBackend.swift; sourceTree = ""; }; AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCSResponse.swift; sourceTree = ""; }; AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharesResponse.swift; sourceTree = ""; }; @@ -2104,6 +2111,8 @@ children = ( F34BDB3B2F574A58007A222C /* BidiSafeFilenameTests.swift */, AA52EB452D42AC5A0089C348 /* Placeholder.swift */, + 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, + AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; sourceTree = ""; @@ -4250,6 +4259,7 @@ AA52EB472D42AC9E0089C348 /* Placeholder.swift in Sources */, F34BDB3C2F574A58007A222C /* BidiSafeFilenameTests.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, + 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 982146e3d3606e89378db028bba19512af4870a8 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:04:31 +0530 Subject: [PATCH 02/29] NMC 2015 - NMC 1992 Sharing configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 67 ++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 8990ecf587..a89c078cd6 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,19 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; + 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */; }; + 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */; }; + 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */; }; + 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */; }; + 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */; }; + 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */; }; + 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */; }; + 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */; }; + 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */; }; + 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */; }; + 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */; }; + 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */; }; 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; 8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */; }; AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */; }; @@ -1161,6 +1174,19 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; + 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = ""; }; + 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionEditCell.swift; sourceTree = ""; }; + 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionEditCell.xib; sourceTree = ""; }; + 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionCell.swift; sourceTree = ""; }; + 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionCell.xib; sourceTree = ""; }; + 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareHeaderCustomCell.xib; sourceTree = ""; }; + 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareHeaderCustomCell.swift; sourceTree = ""; }; + 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareTextInputCell.xib; sourceTree = ""; }; + 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareTextInputCell.swift; sourceTree = ""; }; + 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareEmailFieldCell.xib; sourceTree = ""; }; + 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareEmailFieldCell.swift; sourceTree = ""; }; + 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareDownloadLimitNetwork.swift; sourceTree = ""; }; 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = ""; }; AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestBackend.swift; sourceTree = ""; }; @@ -2112,6 +2138,7 @@ F34BDB3B2F574A58007A222C /* BidiSafeFilenameTests.swift */, AA52EB452D42AC5A0089C348 /* Placeholder.swift */, 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, + 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -2140,6 +2167,14 @@ isa = PBXGroup; children = ( AA8D316D2D4123B200FE2775 /* DownloadLimit */, + 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */, + 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */, + 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */, + 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */, + 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */, + 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */, + 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */, + 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */, AF93471627E2361E002537EE /* NCShareAdvancePermission.swift */, AF93471827E2361E002537EE /* NCShareAdvancePermissionFooter.swift */, AF93471427E2361E002537EE /* NCShareAdvancePermissionFooter.xib */, @@ -2417,6 +2452,9 @@ F728CE741BF6322C00E69702 /* Share */ = { isa = PBXGroup; children = ( + 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */, + 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */, + 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */, AF93471327E235EB002537EE /* Advanced */, F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */, F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */, @@ -4057,12 +4095,16 @@ files = ( F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */, F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, + 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */, + 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, + F77444F622281649000D5EB0 /* NCGridMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, F7F4F10827ECDBDB008676F9 /* Inconsolata-ExtraLight.ttf in Resources */, F72685E727C78E490019EF5E /* InfoPlist.strings in Resources */, + 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */, F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */, F7F4F10927ECDBDB008676F9 /* Inconsolata-Bold.ttf in Resources */, F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, @@ -4077,7 +4119,11 @@ F757CC8C29E82D0500F31428 /* NCGroupfolders.storyboard in Resources */, F79A65C32191D90F00FF6DCC /* NCSelect.storyboard in Resources */, F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */, + F31F69612A2F907800162F76 /* __Snapshots__ in Resources */, + F702F2E725EE5C86008F8E80 /* NCAudioRecorderViewController.storyboard in Resources */, + 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */, AF56C1DC2784856200D8BAE2 /* NCActivityCommentView.xib in Resources */, + 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */, F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */, F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */, F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, @@ -4258,6 +4304,9 @@ files = ( AA52EB472D42AC9E0089C348 /* Placeholder.swift in Sources */, F34BDB3C2F574A58007A222C /* BidiSafeFilenameTests.swift in Sources */, + 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */, + AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, + F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, @@ -4603,6 +4652,9 @@ F7DF7B3F2F1A2EF900514020 /* WarningBannerView.swift in Sources */, F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */, F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */, + F7BFFD282C8846020029A201 /* NCHud.swift in Sources */, + 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */, + F71CD6CA2930D7B1006C95C1 /* NCApplicationHandle.swift in Sources */, F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */, F73EF7D72B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, F3374A842D64AC31002A38F9 /* AssistantLabelStyle.swift in Sources */, @@ -4739,7 +4791,10 @@ AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, F78F74362163781100C2ADAD /* NCTrash.swift in Sources */, - F71638922FA0C20C00A913B7 /* NCMoreView.swift in Sources */, + AF817EF1274BC781009ED85B /* NCUserBaseUrl.swift in Sources */, + 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */, + F39298972A3B12CB00509762 /* BaseNCMoreCell.swift in Sources */, + 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */, AF2D7C7C2742556F00ADF566 /* NCShareLinkCell.swift in Sources */, F7C55C512FB4A658004A974F /* NCAssistantInputModel.swift in Sources */, F7E41316294A19B300839300 /* UIView+Extension.swift in Sources */, @@ -4849,6 +4904,7 @@ AB6000032F60000200FE2775 /* NCTagEditorView.swift in Sources */, AF93471B27E2361E002537EE /* NCShareAdvancePermission.swift in Sources */, F77BC3ED293E528A005F2B08 /* NCConfigServer.swift in Sources */, + 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */, F7A560422AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift in Sources */, F7D1C4AC2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift in Sources */, F7D368DF2DAFE19E0037E7C6 /* NCActivityNavigationController.swift in Sources */, @@ -4881,11 +4937,10 @@ F78B87E92B62550800C65ADC /* NCMediaDownloadThumbnail.swift in Sources */, D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, - F7FDFF6B2E437E55000D7688 /* NCAccountRequest.swift in Sources */, - F7FDFF6C2E437E55000D7688 /* NCShareAccounts.swift in Sources */, - F7FDFF6D2E437E55000D7688 /* NCAccountSettingsModel.swift in Sources */, - F7FDFF6E2E437E55000D7688 /* NCAccountSettingsView.swift in Sources */, - F7FDFF6F2E437E55000D7688 /* NCAccount.swift in Sources */, + 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, + F7CBC31C24F78E79004D3812 /* NCSortMenu.swift in Sources */, + 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */, + 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, From 5162beb882943d4a14aacc4911d2d94bde84244f Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:43:43 +0530 Subject: [PATCH 03/29] NMC 2015 - NMC 1988 Scan customisation changes --- Nextcloud.xcodeproj/project.pbxproj | 124 ++++++++++++++++++++++++---- 1 file changed, 108 insertions(+), 16 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index a89c078cd6..8b796ac3e7 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,26 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; + 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; + 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */; }; + 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */; }; + 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */; }; + 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */; }; + 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */; }; + 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */; }; + 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */; }; + 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */; }; + 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */; }; + 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */; }; + 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */; }; + 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */; }; + 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */; }; + 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */; }; + 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */; }; + 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */; }; + 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */; }; + 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */; }; 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */; }; 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */; }; @@ -1174,6 +1194,26 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; + 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; + 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; + 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; + 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; + 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; + 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; + 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; + 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; + 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; + 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; + 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; + 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; + 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; + 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; + 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; + 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = ""; }; 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionEditCell.swift; sourceTree = ""; }; @@ -2111,15 +2151,31 @@ path = Menu; sourceTree = ""; }; - AA3C85E92D36BBDE00F74F12 /* UITestBackend */ = { - isa = PBXGroup; - children = ( - AA3C85EC2D36BC8400F74F12 /* Responses */, - AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */, - ); - path = UITestBackend; - sourceTree = ""; - }; + 566EB7E92B3D7B5F00FB7CAD /* NMC Views */ = { + isa = PBXGroup; + children = ( + 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */, + 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */, + 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */, + 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */, + 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */, + 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */, + 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */, + 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */, + 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */, + 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */, + 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */, + 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */, + 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */, + 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */, + 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */, + 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */, + 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */, + 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */, + ); + path = "NMC Views"; + sourceTree = ""; + }; AA3C85EC2D36BC8400F74F12 /* Responses */ = { isa = PBXGroup; children = ( @@ -2137,6 +2193,7 @@ children = ( F34BDB3B2F574A58007A222C /* BidiSafeFilenameTests.swift */, AA52EB452D42AC5A0089C348 /* Placeholder.swift */, + 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */, 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, @@ -2584,6 +2641,8 @@ F758B41E212C516300515F55 /* Scan document */ = { isa = PBXGroup; children = ( + 566EB7E92B3D7B5F00FB7CAD /* NMC Views */, + 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */, F758B457212C564000515F55 /* NCScan.storyboard */, F758B45D212C569C00515F55 /* NCScanCell.swift */, F758B45F212C56A400515F55 /* NCScan.swift */, @@ -4109,6 +4168,8 @@ F7F4F10927ECDBDB008676F9 /* Inconsolata-Bold.ttf in Resources */, F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, F700222C1EC479840080073F /* Custom.xcassets in Resources */, + 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */, + 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */, F702F2F125EE5CDB008F8E80 /* NCLogin.storyboard in Resources */, F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */, F758B45A212C564000515F55 /* NCScan.storyboard in Resources */, @@ -4121,6 +4182,7 @@ F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */, F31F69612A2F907800162F76 /* __Snapshots__ in Resources */, F702F2E725EE5C86008F8E80 /* NCAudioRecorderViewController.storyboard in Resources */, + 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */, 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */, AF56C1DC2784856200D8BAE2 /* NCActivityCommentView.xib in Resources */, 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */, @@ -4129,14 +4191,22 @@ F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, + AF93471C27E2361E002537EE /* NCShareAdvancePermissionHeader.xib in Resources */, + F7F1E54C2492369A00E42386 /* NCMediaCommandView.xib in Resources */, + 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, + F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, + 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */, F7A48415297028FC00BD1B49 /* Nextcloud Hub.png in Resources */, + 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */, F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */, F7F4F10C27ECDBDB008676F9 /* Inconsolata-Regular.ttf in Resources */, F7B8B83025681C3400967775 /* GoogleService-Info.plist in Resources */, F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */, F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */, F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */, + F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */, + 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */, F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */, F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */, F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */, @@ -4166,8 +4236,7 @@ F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, - F7FDFF692E437E55000D7688 /* NCAccountRequest.storyboard in Resources */, - F7FDFF6A2E437E55000D7688 /* NCShareAccounts.storyboard in Resources */, + 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */, F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */, F77B0F7D1D118A16002130FE /* Images.xcassets in Resources */, F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */, @@ -4175,6 +4244,10 @@ F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */, F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */, + F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */, + F77910A525DD517B00CEDB9E /* Settings.bundle in Resources */, + 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */, + F7CB68A0254169530050EC94 /* NCSettings.storyboard in Resources */, F76687082B7D067400779E3F /* NCAudioRecorderViewController.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4310,6 +4383,8 @@ F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, + 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, + F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4632,10 +4707,10 @@ buildActionMask = 2147483647; files = ( F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, - F78C6FDE296D677300C952C3 /* NCContextMenuMain.swift in Sources */, - A5A87F9E4B0E4441A6A4BC20 /* NCContextMenuProfile.swift in Sources */, - CB3666201AF7550816B5CD6A /* NCContextMenuComment.swift in Sources */, - 2F96A1BAFB10ACFEAC68EF1C /* NCContextMenuPlayerTracks.swift in Sources */, + F30A96312A27AEBF00D7BCFE /* EnvVars.generated.swift in Sources */, + 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */, + F77444F522281649000D5EB0 /* NCGridMediaCell.swift in Sources */, + F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, F33918C42C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, @@ -4646,6 +4721,8 @@ F702F30825EE5D47008F8E80 /* NCPopupViewController.swift in Sources */, F3C6F6F62F34CC0900C531B6 /* NCAssistantChatConversationsModel.swift in Sources */, F76340FC2EBDF64D0056F538 /* NCManageDatabase+Tag.swift in Sources */, + F3CA33842D10726E00672333 /* NCLoginPollModel.swift in Sources */, + 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */, F733598125C1C188002ABA72 /* NCAskAuthorization.swift in Sources */, 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */, F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, @@ -4721,6 +4798,8 @@ F710D2022405826100A6033D /* NCContextMenuViewer.swift in Sources */, F765E9CD295C585800A09ED8 /* NCUploadScanDocument.swift in Sources */, F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */, + F77A697D250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift in Sources */, + 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */, F7BF9D822934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F7110AE02F9773230095AA5C /* AppDelegate+AppRefresh.swift in Sources */, AA8D31662D411FA100FE2775 /* NCShareDateCell.swift in Sources */, @@ -4740,9 +4819,11 @@ AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, + 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */, F71638942FA0F65A00A913B7 /* NCMoreModel.swift in Sources */, F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */, + 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */, F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */, F724377B2C10B83E00C7C68D /* NCSharePermissions.swift in Sources */, F317C82E2E844C5300761AEA /* ClientIntegrationUIViewer.swift in Sources */, @@ -4786,6 +4867,9 @@ F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */, F70557BD2ED44F1800135623 /* UploadBannerView.swift in Sources */, + F70557BE2ED44F1800135623 /* ErrorBannerView.swift in Sources */, + 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, + F77B0E5F1D118A16002130FE /* NCSettings.m in Sources */, F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */, F7E7AEA52BA32C6500512E52 /* NCCollectionViewDownloadThumbnail.swift in Sources */, AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, @@ -4824,6 +4908,7 @@ F7B6B70427C4E7FA00A7F6EB /* NCScan+CollectionView.swift in Sources */, F7816EF22C2C3E1F00A52517 /* NCPushNotification.swift in Sources */, F76882342C0DD1E7001CF441 /* NCDisplayView.swift in Sources */, + 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */, F7C30DF6291BC0CA0017149B /* NCNetworkingE2EEUpload.swift in Sources */, F3DDFE232F1FB4C300A784C8 /* NCAssistantChatModel.swift in Sources */, F7501C332212E57500FB1415 /* NCMedia.swift in Sources */, @@ -4890,9 +4975,14 @@ AAFC0D062F9AA10000F0A001 /* NCFocusedAutoUploadScreenDimmer.swift in Sources */, AAFC0D092F9AA10000F0A001 /* NCFocusedAutoUploadCloudAnimation.swift in Sources */, AAFC0D0B2F9AA10000F0A001 /* NCAutoUploadCounter.swift in Sources */, + F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */, + F3BB464F2A39EBE500461F6E /* NCMoreUserCell.swift in Sources */, + F726EEEC1FED1C820030B9C8 /* NCEndToEndInitialize.swift in Sources */, + 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */, F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */, - F75D19E325EFE09000D74598 /* NCContextMenuTrash.swift in Sources */, + 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */, + F75D19E325EFE09000D74598 /* NCTrash+Menu.swift in Sources */, F34E1ADB2ECC842B00FA10C3 /* NCStatusMessageModel.swift in Sources */, F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */, AA8D316E2D4123B200FE2775 /* NCShareDownloadLimitTableViewControllerDelegate.swift in Sources */, @@ -4935,6 +5025,8 @@ F722133B2D40EF9D002F7438 /* NCFilesNavigationController.swift in Sources */, F7BC288026663F85004D46C5 /* NCViewCertificateDetails.swift in Sources */, F78B87E92B62550800C65ADC /* NCMediaDownloadThumbnail.swift in Sources */, + 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */, + F73EF7AF2B0224350087E6E9 /* NCManageDatabase+DirectEditing.swift in Sources */, D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, From 53acf45a1f453a6ea8b398785b3da64dd0183760 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:56:32 +0530 Subject: [PATCH 04/29] NMC 2015 - NMC 1931 Auto upload configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 8b796ac3e7..293c18888d 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */; }; 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */; }; @@ -1194,6 +1195,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; @@ -2196,6 +2198,7 @@ 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */, 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, + 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4385,6 +4388,7 @@ F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, + 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From f703a7627d5fabe4e55296315bdcc8073d33b83b Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:10:35 +0530 Subject: [PATCH 05/29] NMC 2015 - NMC 1933 Collabora configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 293c18888d..069ab022f9 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,11 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; + 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; + 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */; }; + 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */; }; + 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */; }; 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */; }; 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; @@ -1195,6 +1200,11 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; + 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; + 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; + 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; + 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; @@ -2178,7 +2188,22 @@ path = "NMC Views"; sourceTree = ""; }; +<<<<<<< HEAD AA3C85EC2D36BC8400F74F12 /* Responses */ = { +======= + 566EB8122B3D861400FB7CAD /* NMC Custom Views */ = { + isa = PBXGroup; + children = ( + 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */, + 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */, + 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */, + 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */, + ); + path = "NMC Custom Views"; + sourceTree = ""; + }; + AF8ED1FA2757821000B8DBC4 /* NextcloudUnitTests */ = { +>>>>>>> 853c67a8de (NMC 2015 - NMC 1933 Collabora configuration changes) isa = PBXGroup; children = ( AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, @@ -2199,6 +2224,7 @@ 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, + 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -3459,7 +3485,7 @@ F7F67BAA1A24D27800EE80DA /* iOSClient */ = { isa = PBXGroup; children = ( - AA517BB42D66149900F8D37C /* .tx */, + 566EB8122B3D861400FB7CAD /* NMC Custom Views */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -4161,6 +4187,11 @@ 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, F77444F622281649000D5EB0 /* NCGridMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, +<<<<<<< HEAD +======= + F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, + 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, +>>>>>>> 853c67a8de (NMC 2015 - NMC 1933 Collabora configuration changes) F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, @@ -4236,6 +4267,8 @@ F732D23327CF8AED000B0F1B /* NCPlayerToolBar.xib in Resources */, F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */, F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */, + F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, + 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, @@ -4384,6 +4417,7 @@ AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, + 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, @@ -4968,6 +5002,7 @@ F7E8A391295DC5E0006CB2D0 /* View+Extension.swift in Sources */, F7CB77642F5843E500DE649A /* UIFont+Extension.swift in Sources */, F79B869B265E19D40085C0E0 /* NSMutableAttributedString+Extension.swift in Sources */, + 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */, F7B7504B2397D38F004E13EC /* UIImage+Extension.swift in Sources */, AF3FDCC22796ECC300710F60 /* NCTrash+CollectionView.swift in Sources */, F70D7C3725FFBF82002B9E34 /* NCCollectionViewCommon.swift in Sources */, @@ -5040,6 +5075,7 @@ F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, + 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */, F7725A60251F33BB00D125E0 /* NCFiles.swift in Sources */, F704B5E52430AA8000632F5F /* NCCreateFormUploadConflict.swift in Sources */, F7865FF12F39D32F00D09AE4 /* NCCollectionViewCommon+Search.swift in Sources */, From 8c572732ee8eb6b95a83093640ea00a265c9c283 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:22:02 +0530 Subject: [PATCH 06/29] NMC 2015 - NMC 1937 E2EE configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 069ab022f9..83674368da 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */; }; 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */; }; @@ -1200,6 +1201,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; @@ -2225,6 +2227,7 @@ 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, + 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4420,6 +4423,7 @@ 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, + 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, From a33c88d70a59aebb49aaaa63769113645a596411 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 17:36:11 +0530 Subject: [PATCH 07/29] NMC 2015 - NMC 1990 Settings configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 55 ++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 83674368da..7cfa96fb53 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,12 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; + 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */; }; + 566EB8252B3D8CB300FB7CAD /* ImprintViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */; }; + 566EB8262B3D8CB300FB7CAD /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */; }; + 566EB8272B3D8CB300FB7CAD /* MagentaCloudVersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */; }; + 566EB8282B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */; }; 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */; }; 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; @@ -843,6 +849,7 @@ F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */; }; F7CBC1262BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */; }; F7CCAB512ECF316700F8E68B /* NCCollectionViewCommon+SyncMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CCAB502ECF315F00F8E68B /* NCCollectionViewCommon+SyncMetadata.swift */; }; + F7CBC31C24F78E79004D3812 /* NCSortMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC31B24F78E79004D3812 /* NCSortMenu.swift */; }; F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CEE5FE2BA9A5C9003EFD89 /* NCTrashGridCell.xib */; }; F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */; }; F7CF06802E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; @@ -1201,6 +1208,12 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; + 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; + 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImprintViewController.swift; sourceTree = ""; }; + 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelpViewController.swift; sourceTree = ""; }; + 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MagentaCloudVersionView.swift; sourceTree = ""; }; + 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceSoftwareViewController.swift; sourceTree = ""; }; 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; @@ -2190,9 +2203,6 @@ path = "NMC Views"; sourceTree = ""; }; -<<<<<<< HEAD - AA3C85EC2D36BC8400F74F12 /* Responses */ = { -======= 566EB8122B3D861400FB7CAD /* NMC Custom Views */ = { isa = PBXGroup; children = ( @@ -2204,8 +2214,7 @@ path = "NMC Custom Views"; sourceTree = ""; }; - AF8ED1FA2757821000B8DBC4 /* NextcloudUnitTests */ = { ->>>>>>> 853c67a8de (NMC 2015 - NMC 1933 Collabora configuration changes) + AA3C85EC2D36BC8400F74F12 /* Responses */ = { isa = PBXGroup; children = ( AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, @@ -2228,6 +2237,7 @@ 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, + 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -3088,6 +3098,29 @@ isa = PBXGroup; children = ( F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */, + 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */, + 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */, + 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */, + 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */, + 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */, + F7ACE4291BAC0268006C0017 /* Acknowledgements.h */, + F7ACE42A1BAC0268006C0017 /* Acknowledgements.m */, + F7ACE42B1BAC0268006C0017 /* Acknowledgements.rtf */, + F7A321AB1E9E6AD50069AD1B /* CCAdvanced.h */, + F7A321AC1E9E6AD50069AD1B /* CCAdvanced.m */, + F7ACE42C1BAC0268006C0017 /* CCManageAccount.h */, + F7ACE42D1BAC0268006C0017 /* CCManageAccount.m */, + F7ACE42E1BAC0268006C0017 /* CCManageAutoUpload.h */, + F7ACE42F1BAC0268006C0017 /* CCManageAutoUpload.m */, + F726EEEB1FED1C820030B9C8 /* NCEndToEndInitialize.swift */, + F760DE162AE66F350027D78A /* NCKeychain.swift */, + F75AC2421F1F62450073EC19 /* NCManageAutoUploadFileName.swift */, + F7A7FA6229265CF4000603EF /* NCManageE2EE.swift */, + F7ACE4301BAC0268006C0017 /* NCSettings.h */, + F7ACE4311BAC0268006C0017 /* NCSettings.m */, + F7CB689F254169530050EC94 /* NCSettings.storyboard */, + F77910AA25DD53C700CEDB9E /* NCSettingsBundleHelper.swift */, + F77910A425DD517B00CEDB9E /* Settings.bundle */, ); path = DeepLink; sourceTree = ""; @@ -4190,11 +4223,8 @@ 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, F77444F622281649000D5EB0 /* NCGridMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, -<<<<<<< HEAD -======= F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, ->>>>>>> 853c67a8de (NMC 2015 - NMC 1933 Collabora configuration changes) F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, @@ -4284,6 +4314,7 @@ F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */, F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */, + 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */, F77910A525DD517B00CEDB9E /* Settings.bundle in Resources */, 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */, F7CB68A0254169530050EC94 /* NCSettings.storyboard in Resources */, @@ -4423,6 +4454,7 @@ 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, + 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */, 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, @@ -4754,6 +4786,9 @@ F77444F522281649000D5EB0 /* NCGridMediaCell.swift in Sources */, F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, + F7E7AEA72BA32D0000512E52 /* NCCollectionViewUnifiedSearch.swift in Sources */, + F769CA172965AB7C00039397 /* NCUploadAssets.swift in Sources */, + 566EB8252B3D8CB300FB7CAD /* ImprintViewController.swift in Sources */, F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, F33918C42C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, F39170AD2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, @@ -4865,6 +4900,7 @@ F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */, F71638942FA0F65A00A913B7 /* NCMoreModel.swift in Sources */, F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */, + 566EB8272B3D8CB300FB7CAD /* MagentaCloudVersionView.swift in Sources */, 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */, F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */, F724377B2C10B83E00C7C68D /* NCSharePermissions.swift in Sources */, @@ -4894,6 +4930,8 @@ F7D4BF4B2CA2E8D800A5E746 /* TOPasscodeViewContentLayout.m in Sources */, F7D4BF4C2CA2E8D800A5E746 /* TOPasscodeSettingsKeypadButton.m in Sources */, F7D4BF4D2CA2E8D800A5E746 /* TOPasscodeViewController.m in Sources */, + F7CBC1252BAC8B0000EC1D55 /* NCSectionHeaderEmptyData.swift in Sources */, + 566EB8262B3D8CB300FB7CAD /* HelpViewController.swift in Sources */, F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */, AAE330042D2ED20200B04903 /* NCShareNavigationTitleSetting.swift in Sources */, F71CFA672F2A07DB007A3AE9 /* NCMedia+Netwoking.swift in Sources */, @@ -5009,6 +5047,7 @@ 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */, F7B7504B2397D38F004E13EC /* UIImage+Extension.swift in Sources */, AF3FDCC22796ECC300710F60 /* NCTrash+CollectionView.swift in Sources */, + 566EB8282B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift in Sources */, F70D7C3725FFBF82002B9E34 /* NCCollectionViewCommon.swift in Sources */, F76D364628A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, F3A047992BD2668800658E7B /* NCAssistantModel.swift in Sources */, From eacaac447ba6bbee9dd96169d51c734eb55a9b30 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 17:49:09 +0530 Subject: [PATCH 08/29] NMC 2015 - NMC 2237 More configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 7cfa96fb53..0991596a68 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */; }; 566EB8252B3D8CB300FB7CAD /* ImprintViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */; }; @@ -1208,6 +1209,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImprintViewController.swift; sourceTree = ""; }; @@ -2238,6 +2240,7 @@ 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, + 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4448,6 +4451,7 @@ AA52EB472D42AC9E0089C348 /* Placeholder.swift in Sources */, F34BDB3C2F574A58007A222C /* BidiSafeFilenameTests.swift in Sources */, 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */, + 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */, AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, From 1a65fe2e172288928ca693a55fd65c78a1da2445 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Thu, 28 Dec 2023 17:56:59 +0530 Subject: [PATCH 09/29] NMC 2015 - NMC 2248 Image video upload configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 0991596a68..196f1d7081 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */; }; @@ -1209,6 +1210,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; @@ -2241,6 +2243,7 @@ 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, + 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4455,6 +4458,7 @@ AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, + 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */, 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, From 9d8da6681162168c4c35c43b429af1d752fbb06a Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 13:19:11 +0530 Subject: [PATCH 10/29] NMC 2015 - NMC 2261 Audio upload configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 35 +++++++++++++++++++---------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 196f1d7081..737ad51eb1 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,10 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */; }; + 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */; }; + 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; + 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */; }; 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; @@ -834,18 +838,10 @@ F7C9B9202B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9B91C2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift */; }; F7C9B9232B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9B91C2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift */; }; F7CADEFD2EA159210057849E /* NCMetadataTranfersSuccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CADEFA2EA1591D0057849E /* NCMetadataTranfersSuccess.swift */; }; - F7CAFE182F164B9500DB35A5 /* NCCollectionViewCommon+CellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE172F164B9200DB35A5 /* NCCollectionViewCommon+CellDelegate.swift */; }; - F7CAFE192F168F6000DB35A5 /* NCDebouncer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A3DB8F2DDE238C008F7EC8 /* NCDebouncer.swift */; }; - F7CAFE1B2F16AA8D00DB35A5 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1A2F16AA8600DB35A5 /* main.swift */; }; - F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE1E2F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE1F2F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE202F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE212F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE222F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CAFE232F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; - F7CB77642F5843E500DE649A /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CB77632F5843D700DE649A /* UIFont+Extension.swift */; }; - F7CB77652F58463E00DE649A /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CB77632F5843D700DE649A /* UIFont+Extension.swift */; }; + F7CA212D25F1333300826ABB /* + ces */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; + F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; }; + F7CB689A2541676B0050EC94 /* NCMore.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CB68992541676B0050EC94 /* NCMore.storyboard */; }; F7CBC1232BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */; }; F7CBC1242BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */; }; F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */; }; @@ -1210,6 +1206,10 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; + 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; + 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; + 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; @@ -3403,6 +3403,12 @@ children = ( F7FA7FFD2C0F4F3B0072FC60 /* Upload Assets */, F7A509242C26BD5D00326106 /* NCCreate.swift */, + F7A509242C26BD5D00326106 /* NCCreateDocument.swift */, + 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */, + 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */, + 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */, + 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */, + F769CA162965AB7C00039397 /* NCUploadAssets.swift */, F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */, F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */, F704B5E82430C0B800632F5F /* NCCreateFormUploadConflictCell.swift */, @@ -4264,6 +4270,7 @@ F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, + 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */, AF93471C27E2361E002537EE /* NCShareAdvancePermissionHeader.xib in Resources */, F7F1E54C2492369A00E42386 /* NCMediaCommandView.xib in Resources */, 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, @@ -4309,6 +4316,7 @@ F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, + 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */, @@ -4949,6 +4957,8 @@ F76882352C0DD1E7001CF441 /* NCWebBrowserView.swift in Sources */, F72CA0572F5048C3002E2F06 /* UIApplication+Extension.swift in Sources */, F3A047972BD2668800658E7B /* NCAssistantEmptyView.swift in Sources */, + 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, + F78ACD4A21903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, @@ -4977,6 +4987,7 @@ F39A1EE22D0AF8A400DAD522 /* Albums.swift in Sources */, F71F6D072B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F761856C29E98543006EB3B0 /* NCIntroCollectionViewCell.swift in Sources */, + 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */, F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D4BF012CA1831900A5E746 /* NCCollectionViewCommonPinchGesture.swift in Sources */, F74B6D952A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, From a4471d31c7d1b9445cf2d7e2a9394e6342093088 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 13:28:59 +0530 Subject: [PATCH 11/29] NMC 2015 - NMC 1935 Notification configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 737ad51eb1..34522cb39e 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */; }; 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */; }; 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; @@ -1206,6 +1207,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; @@ -2244,6 +2246,7 @@ 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, + 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4463,6 +4466,7 @@ F34BDB3C2F574A58007A222C /* BidiSafeFilenameTests.swift in Sources */, 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */, 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */, + 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */, AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, From 93c4fb685c3b69c773e09ea4322e8ead781fee59 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 13:39:58 +0530 Subject: [PATCH 12/29] NMC 2015 - NMC 1984 Privacy policy configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 34522cb39e..c75d6881b7 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,16 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; + 566FCF432B3EB4E800168DEA /* AnalysisDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */; }; + 566FCF442B3EB4E800168DEA /* PrivacyPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */; }; + 566FCF452B3EB4E800168DEA /* InitialPrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */; }; + 566FCF462B3EB4E800168DEA /* AnalysisDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */; }; + 566FCF472B3EB4E800168DEA /* PrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */; }; + 566FCF482B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */; }; + 566FCF492B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */; }; + 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */; }; + 566FCF4B2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */; }; 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */; }; 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */; }; @@ -1207,6 +1217,16 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; + 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; + 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyViewController.swift; sourceTree = ""; }; + 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InitialPrivacySettingsViewController.swift; sourceTree = ""; }; + 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalysisDataCollectionSwitch.swift; sourceTree = ""; }; + 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacySettingsViewController.swift; sourceTree = ""; }; + 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequiredDataCollectionSwitch.swift; sourceTree = ""; }; + 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RequiredDataCollectionSwitch.xib; sourceTree = ""; }; + 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveSettingsCustomButtonCell.swift; sourceTree = ""; }; + 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SaveSettingsCustomButtonCell.xib; sourceTree = ""; }; 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; @@ -2247,6 +2267,7 @@ 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, + 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -3112,6 +3133,15 @@ 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */, 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */, 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */, + 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */, + 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */, + 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */, + 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */, + 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */, + 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */, + 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */, + 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */, + 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */, F7ACE4291BAC0268006C0017 /* Acknowledgements.h */, F7ACE42A1BAC0268006C0017 /* Acknowledgements.m */, F7ACE42B1BAC0268006C0017 /* Acknowledgements.rtf */, @@ -4255,6 +4285,9 @@ F702F2F125EE5CDB008F8E80 /* NCLogin.storyboard in Resources */, F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */, F758B45A212C564000515F55 /* NCScan.storyboard in Resources */, + F70D87CF25EE6E58008CBBBD /* NCRenameFile.storyboard in Resources */, + F33AAF9A2A60394C006ECCBD /* NCMoreUserCell.xib in Resources */, + 566FCF432B3EB4E800168DEA /* AnalysisDataCollectionSwitch.xib in Resources */, F765F73225237E3F00391DBE /* NCRecent.storyboard in Resources */, F31165022F9674A1009A1E37 /* AppIcon.icon in Resources */, F78F74342163757000C2ADAD /* NCTrash.storyboard in Resources */, @@ -4302,6 +4335,8 @@ F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */, F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */, F761856A29E98543006EB3B0 /* NCIntro.storyboard in Resources */, + F747BA1F22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, + 566FCF492B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib in Resources */, F719D9E0288D37A300762E33 /* NCColorPicker.storyboard in Resources */, AA517B802D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F7F4F10A27ECDBDB008676F9 /* Inconsolata-ExtraBold.ttf in Resources */, @@ -4316,6 +4351,7 @@ F732D23327CF8AED000B0F1B /* NCPlayerToolBar.xib in Resources */, F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */, F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */, + 566FCF4B2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib in Resources */, F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, @@ -4467,6 +4503,7 @@ 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */, 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */, 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */, + 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */, AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, @@ -4852,6 +4889,11 @@ F7BD0A002C468925003A4A6D /* NCMedia+CollectionViewDataSource.swift in Sources */, F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */, F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */, +<<<<<<< HEAD +======= + F73F537F1E929C8500F8678D /* NCMore.swift in Sources */, + 566FCF462B3EB4E800168DEA /* AnalysisDataCollectionSwitch.swift in Sources */, +>>>>>>> 53596d4a18 (NMC 2015 - NMC 1984 Privacy policy configuration changes) F702F2CF25EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F794E13F2BBC0F70003693D7 /* SceneDelegate.swift in Sources */, F714A1472ED84AF90050A43B /* HudBannerView.swift in Sources */, @@ -4883,6 +4925,7 @@ AF4BF61927562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */, AFA2AC8527849604008E1EA7 /* NCActivityCommentView.swift in Sources */, + 566FCF472B3EB4E800168DEA /* PrivacySettingsViewController.swift in Sources */, AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */, F75A9EE623796C6F0044CFCE /* NCNetworking.swift in Sources */, F72EC7282F45FF1400A2135C /* NCContextMenuPlus.swift in Sources */, @@ -4907,6 +4950,7 @@ F7A846DE2BB01ACB0024816F /* NCTrashCellProtocol.swift in Sources */, F7236DDF2F7C00E600F9D722 /* HudIndeterminateBannerView.swift in Sources */, F799DF852C4B7E56003410B5 /* NCSectionHeader.swift in Sources */, + 566FCF442B3EB4E800168DEA /* PrivacyPolicyViewController.swift in Sources */, F78A10BF29322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */, F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */, @@ -4964,7 +5008,13 @@ 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, F78ACD4A21903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, +<<<<<<< HEAD F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, +======= + F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, + 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */, + AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, +>>>>>>> 53596d4a18 (NMC 2015 - NMC 1984 Privacy policy configuration changes) F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */, @@ -4985,6 +5035,8 @@ F7C55C512FB4A658004A974F /* NCAssistantInputModel.swift in Sources */, F7E41316294A19B300839300 /* UIView+Extension.swift in Sources */, F7C30E00291BD2610017149B /* NCNetworkingE2EERename.swift in Sources */, + F7651A8B23A2A3F2001403D2 /* NCCreateFormUploadDocuments.swift in Sources */, + 566FCF452B3EB4E800168DEA /* InitialPrivacySettingsViewController.swift in Sources */, F74AF3A4247FB6AE00AC767B /* NCUtilityFileSystem.swift in Sources */, AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */, F73EF7BF2B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, @@ -5178,6 +5230,8 @@ F78B87E72B62527100C65ADC /* NCMediaDataSource.swift in Sources */, F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */, F7864ACC2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, + 566FCF482B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift in Sources */, + F7F4F11027ECDC4A008676F9 /* UIDevice+Extension.swift in Sources */, F7327E302B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, F3DDFE1E2F1F8EC600A784C8 /* ChatInputField.swift in Sources */, F74B91E52F51D4170050813D /* InfoBannerView.swift in Sources */, From 5c269f8eb94e327eb8a97de60cdf97ce9689de01 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 13:53:43 +0530 Subject: [PATCH 13/29] NMC 2015 - NMC 1971 Onboarding configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index c75d6881b7..2a8177f7ed 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,8 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; + 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */; }; 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; 566FCF432B3EB4E800168DEA /* AnalysisDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */; }; 566FCF442B3EB4E800168DEA /* PrivacyPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */; }; @@ -1217,6 +1219,8 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; + 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyViewController.swift; sourceTree = ""; }; @@ -2268,6 +2272,7 @@ 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, + 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -3567,6 +3572,7 @@ isa = PBXGroup; children = ( 566EB8122B3D861400FB7CAD /* NMC Custom Views */, + 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -4511,6 +4517,7 @@ 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, + 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */, 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */, 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, @@ -5201,6 +5208,7 @@ F76687072B7D067400779E3F /* NCAudioRecorderViewController.swift in Sources */, AA8E03DA2D2ED83300E7E89C /* TransientShare.swift in Sources */, F7A03E2F2D425A14007AA677 /* NCFavoriteNavigationController.swift in Sources */, + 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */, F343A4BB2A1E734600DDA874 /* Optional+Extension.swift in Sources */, F76882232C0DD1E7001CF441 /* NCCapabilitiesModel.swift in Sources */, F3DDFE212F1F953000A784C8 /* NCAssistantChatConversations.swift in Sources */, From f1f30d79198f6b71d5adc72b4b4b5fd7dcd90122 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 14:06:24 +0530 Subject: [PATCH 14/29] NMC 2015 - NMC Trash view configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 2a8177f7ed..b5381736f2 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,8 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF522B3EBADE00168DEA /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */; }; + 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */; }; 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; @@ -1219,6 +1221,8 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; + 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; @@ -1911,6 +1915,8 @@ F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAppStateManager.swift; sourceTree = ""; }; F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+CreateMetadata.swift"; sourceTree = ""; }; + F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Metadata+Create.swift"; sourceTree = ""; }; + F7CF16A22A4D7C7A000FF107 /* NCMoreUserCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMoreUserCell.xib; sourceTree = ""; }; F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichWorkspace.storyboard; sourceTree = ""; }; F7D1C4AB2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+CollectionViewDataSourcePrefetching.swift"; sourceTree = ""; }; F7D368DE2DAFE19E0037E7C6 /* NCActivityNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityNavigationController.swift; sourceTree = ""; }; @@ -2985,6 +2991,7 @@ F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */, F7CEE5FE2BA9A5C9003EFD89 /* NCTrashGridCell.xib */, F78ACD4821903F850088454D /* NCTrashListCell.swift */, + F78ACD4821903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift */, F78ACD4921903F850088454D /* NCTrashListCell.xib */, ); path = Cell; @@ -4277,6 +4284,7 @@ F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, + 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, F7F4F10827ECDBDB008676F9 /* Inconsolata-ExtraLight.ttf in Resources */, @@ -4310,6 +4318,7 @@ F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */, F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */, F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, + 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */, @@ -4896,11 +4905,8 @@ F7BD0A002C468925003A4A6D /* NCMedia+CollectionViewDataSource.swift in Sources */, F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */, F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */, -<<<<<<< HEAD -======= F73F537F1E929C8500F8678D /* NCMore.swift in Sources */, 566FCF462B3EB4E800168DEA /* AnalysisDataCollectionSwitch.swift in Sources */, ->>>>>>> 53596d4a18 (NMC 2015 - NMC 1984 Privacy policy configuration changes) F702F2CF25EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F794E13F2BBC0F70003693D7 /* SceneDelegate.swift in Sources */, F714A1472ED84AF90050A43B /* HudBannerView.swift in Sources */, @@ -5015,13 +5021,10 @@ 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, F78ACD4A21903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, -<<<<<<< HEAD F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, -======= F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */, AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, ->>>>>>> 53596d4a18 (NMC 2015 - NMC 1984 Privacy policy configuration changes) F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */, From bf25f7860e29c71a59ad16c88f82d34afb373f12 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 15:13:53 +0530 Subject: [PATCH 15/29] NMC 2015 - NMC 2267 Rename configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index b5381736f2..463ca428b0 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; 566FCF522B3EBADE00168DEA /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */; }; 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; @@ -1221,6 +1222,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; @@ -2279,6 +2281,7 @@ 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */, + 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */, AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; @@ -4531,6 +4534,7 @@ 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, + 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */, 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; From 1c2c95b16ffa2d477316764e7ff10c781c18a2df Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 15:21:14 +0530 Subject: [PATCH 16/29] NMC 2015 - NMC 1998 Tracking configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 463ca428b0..6f9413cbb7 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,8 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; + 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; 566FCF522B3EBADE00168DEA /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */; }; 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; @@ -1222,6 +1224,9 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; + 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; + 566FCF592B3ECD3400168DEA /* AdjustHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; @@ -2252,6 +2257,16 @@ path = "NMC Custom Views"; sourceTree = ""; }; + 566FCF562B3ECD3400168DEA /* Helper */ = { + isa = PBXGroup; + children = ( + 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */, + 566FCF582B3ECD3400168DEA /* AdjustHelper.m */, + 566FCF592B3ECD3400168DEA /* AdjustHelper.h */, + ); + path = Helper; + sourceTree = ""; + }; AA3C85EC2D36BC8400F74F12 /* Responses */ = { isa = PBXGroup; children = ( @@ -3583,6 +3598,7 @@ children = ( 566EB8122B3D861400FB7CAD /* NMC Custom Views */, 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, + 566FCF562B3ECD3400168DEA /* Helper */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -5027,6 +5043,7 @@ F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, + 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */, 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */, AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, @@ -5083,6 +5100,8 @@ F7501C332212E57500FB1415 /* NCMedia.swift in Sources */, F7411C552D7B26D700F57358 /* NCNetworking+ServerError.swift in Sources */, F72944F22A84246400246839 /* NCEndToEndMetadataV2.swift in Sources */, + 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */, + F72944F22A84246400246839 /* NCEndToEndMetadataV20.swift in Sources */, F78026122E9CFA6300B63436 /* NCTransfersModel.swift in Sources */, F7EF2AEB2E43157B0081B2C9 /* NCNotification.swift in Sources */, F70BFC7420E0FA7D00C67599 /* NCUtility.swift in Sources */, From 808539f9644dfb84e4bbde13c340c2270ec951d5 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 15:49:57 +0530 Subject: [PATCH 17/29] NMC 2015 - User tracking description added in plist --- Brand/iOSClient.plist | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Brand/iOSClient.plist b/Brand/iOSClient.plist index cff62ea040..df37696a82 100755 --- a/Brand/iOSClient.plist +++ b/Brand/iOSClient.plist @@ -18,7 +18,7 @@ CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion - 6.0 + $(MARKETING_VERSION) CFBundleName $(PRODUCT_NAME) CFBundlePackageType @@ -83,6 +83,8 @@ AccountIntent DashboardIntent + NSUserTrackingUsageDescription + App would like to access IDFA for tracking purpose PHPhotoLibraryPreventAutomaticLimitedAccessAlert UIAppFonts From 6682d0e5c8cc2e5de7ec176f88f1cd27e0731a7c Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Fri, 29 Dec 2023 16:01:40 +0530 Subject: [PATCH 18/29] NMC 2015 - Tealium and Adjust dependency added --- Nextcloud.xcodeproj/project.pbxproj | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 6f9413cbb7..dcda3a0ff7 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -4184,6 +4184,9 @@ F7D4BF4E2CA2ECCB00A5E746 /* XCRemoteSwiftPackageReference "vlckit-spm" */, F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */, F70557B52ED44E2700135623 /* XCRemoteSwiftPackageReference "LucidBanner" */, + F327FA412B8CC0B900E5B743 /* XCRemoteSwiftPackageReference "SwipeCellKit" */, + 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */, + 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */, ); productRefGroup = F7F67B9F1A24D27800EE80DA; projectDirPath = ""; @@ -6623,6 +6626,22 @@ minimumVersion = 2.26.0; }; }; + 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Tealium/tealium-swift.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; + 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/adjust/ios_sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.29.5; + }; + }; F33EE6EE2BF4C0FF00CA1A51 /* XCRemoteSwiftPackageReference "swift-nio" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-nio.git"; From d917148395d82f22123b5b497982cd28c721adb0 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Mon, 19 Feb 2024 12:59:20 +0530 Subject: [PATCH 19/29] NMC 2015 - FolderPathCustomCell duplicate entry removed --- Nextcloud.xcodeproj/project.pbxproj | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index dcda3a0ff7..ea40dcc81c 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -33,8 +33,6 @@ 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */; }; 566FCF4B2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */; }; 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; - 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */; }; - 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */; }; 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */; }; 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; @@ -1243,8 +1241,6 @@ 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveSettingsCustomButtonCell.swift; sourceTree = ""; }; 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SaveSettingsCustomButtonCell.xib; sourceTree = ""; }; 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; - 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; - 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; @@ -3469,8 +3465,6 @@ F7A509242C26BD5D00326106 /* NCCreateDocument.swift */, 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */, 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */, - 566FCF262B3EAD0E00168DEA /* FolderPathCustomCell.swift */, - 566FCF272B3EAD0E00168DEA /* FolderPathCustomCell.xib */, F769CA162965AB7C00039397 /* NCUploadAssets.swift */, F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */, F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */, @@ -5077,7 +5071,6 @@ F39A1EE22D0AF8A400DAD522 /* Albums.swift in Sources */, F71F6D072B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F761856C29E98543006EB3B0 /* NCIntroCollectionViewCell.swift in Sources */, - 566FCF282B3EAD0E00168DEA /* FolderPathCustomCell.swift in Sources */, F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D4BF012CA1831900A5E746 /* NCCollectionViewCommonPinchGesture.swift in Sources */, F74B6D952A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, From ae70ee9481a17526767a58f43ab2edeb2f3a1988 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Mon, 19 Feb 2024 13:23:52 +0530 Subject: [PATCH 20/29] NMC 2015 - Adjust SDK framework added to project target --- Nextcloud.xcodeproj/project.pbxproj | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index ea40dcc81c..9c770d8bc4 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 56AB28942B833E2D0089D373 /* Adjust in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28932B833E2D0089D373 /* Adjust */; }; 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; @@ -2161,6 +2162,9 @@ F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */, F76DA969277B77EA0082465B /* DropDown in Frameworks */, F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */, + F75EAED826D2552E00F4320E /* MarqueeLabel in Frameworks */, + F710FC7A277B7D0000AA9FBF /* Realm in Frameworks */, + 56AB28942B833E2D0089D373 /* Adjust in Frameworks */, F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */, F76B649E2ADFFDEC00014640 /* LRUCache in Frameworks */, ); @@ -3977,6 +3981,8 @@ F3374AF52D78B01B002A38F9 /* HashTreeCollections */, F3374AF72D78B01B002A38F9 /* HeapModule */, F70557B62ED44E2700135623 /* LucidBanner */, + F327FA422B8CC0B900E5B743 /* SwipeCellKit */, + 56AB28932B833E2D0089D373 /* Adjust */, ); productName = "Crypto Cloud"; productReference = F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */; @@ -6839,6 +6845,11 @@ package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; productName = HeapModule; }; + 56AB28932B833E2D0089D373 /* Adjust */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28922B833DEA0089D373 /* XCRemoteSwiftPackageReference "ios_sdk" */; + productName = Adjust; + }; F3391B072B4C52C5001C0C4B /* FirebaseDatabase */ = { isa = XCSwiftPackageProductDependency; package = F70B86732642CE3B00ED5349 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; From 72035b533505ce6f8416c7ba91c6f17e83e8378a Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Mon, 19 Feb 2024 14:39:59 +0530 Subject: [PATCH 21/29] NMC 2015 - Tealium framework added to project target --- Nextcloud.xcodeproj/project.pbxproj | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 9c770d8bc4..7bcdaec629 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,13 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; + 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; + 56AB289B2B8351720089D373 /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; + 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289C2B8351730089D373 /* TealiumLocation */; }; + 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289E2B8351730089D373 /* TealiumRemoteCommands */; }; + 56AB28A12B8351730089D373 /* TealiumTagManagement in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A02B8351730089D373 /* TealiumTagManagement */; }; + 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A22B8351740089D373 /* TealiumVisitorService */; }; 56AB28942B833E2D0089D373 /* Adjust in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28932B833E2D0089D373 /* Adjust */; }; 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; @@ -2141,6 +2148,11 @@ F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */, F788ECC7263AAAFA00ADC67F /* MarkdownKit in Frameworks */, F3374AF02D78B01B002A38F9 /* BitCollections in Frameworks */, + 56AB28992B8351720089D373 /* TealiumCore in Frameworks */, + 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */, + 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */, + 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */, + 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */, F77BC3EB293E5268005F2B08 /* Swifter in Frameworks */, F7BB7E4727A18C56009B9F29 /* Parchment in Frameworks */, F33EE6E12BF4BDA500CA1A51 /* NIOSSL in Frameworks */, @@ -3983,6 +3995,13 @@ F70557B62ED44E2700135623 /* LucidBanner */, F327FA422B8CC0B900E5B743 /* SwipeCellKit */, 56AB28932B833E2D0089D373 /* Adjust */, + 56AB28962B8351720089D373 /* TealiumAutotracking */, + 56AB28982B8351720089D373 /* TealiumCore */, + 56AB289A2B8351720089D373 /* TealiumLifecycle */, + 56AB289C2B8351730089D373 /* TealiumLocation */, + 56AB289E2B8351730089D373 /* TealiumRemoteCommands */, + 56AB28A02B8351730089D373 /* TealiumTagManagement */, + 56AB28A22B8351740089D373 /* TealiumVisitorService */, ); productName = "Crypto Cloud"; productReference = F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */; @@ -6845,6 +6864,41 @@ package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; productName = HeapModule; }; + 56AB28962B8351720089D373 /* TealiumAutotracking */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumAutotracking; + }; + 56AB28982B8351720089D373 /* TealiumCore */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumCore; + }; + 56AB289A2B8351720089D373 /* TealiumLifecycle */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumLifecycle; + }; + 56AB289C2B8351730089D373 /* TealiumLocation */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumLocation; + }; + 56AB289E2B8351730089D373 /* TealiumRemoteCommands */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumRemoteCommands; + }; + 56AB28A02B8351730089D373 /* TealiumTagManagement */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumTagManagement; + }; + 56AB28A22B8351740089D373 /* TealiumVisitorService */ = { + isa = XCSwiftPackageProductDependency; + package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; + productName = TealiumVisitorService; + }; 56AB28932B833E2D0089D373 /* Adjust */ = { isa = XCSwiftPackageProductDependency; package = 56AB28922B833DEA0089D373 /* XCRemoteSwiftPackageReference "ios_sdk" */; From 7edec6ca208a0d5223e49dc0fbc973918631989a Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:31:05 +0530 Subject: [PATCH 22/29] NMC 2015 - Media command view file added --- Nextcloud.xcodeproj/project.pbxproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 7bcdaec629..89c6ab1dbb 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */; }; 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; 56AB289B2B8351720089D373 /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; @@ -1230,6 +1231,7 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; 566FCF592B3ECD3400168DEA /* AdjustHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; @@ -3502,6 +3504,7 @@ F7EC9CB921185F2000F1C5CE /* Media */ = { isa = PBXGroup; children = ( + 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */, F720B5B72507B9A5008C94E5 /* Cell */, F7501C302212E57400FB1415 /* NCMedia.storyboard */, F7501C312212E57400FB1415 /* NCMedia.swift */, @@ -4332,6 +4335,7 @@ F72685E727C78E490019EF5E /* InfoPlist.strings in Resources */, 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */, F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */, + 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */, F7F4F10927ECDBDB008676F9 /* Inconsolata-Bold.ttf in Resources */, F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, F700222C1EC479840080073F /* Custom.xcassets in Resources */, @@ -4364,7 +4368,6 @@ F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */, AF93471C27E2361E002537EE /* NCShareAdvancePermissionHeader.xib in Resources */, - F7F1E54C2492369A00E42386 /* NCMediaCommandView.xib in Resources */, 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, From 248b13fb85652efb8120f7ff481e0a4e6e94d2ff Mon Sep 17 00:00:00 2001 From: Amrut Waghmare Date: Wed, 13 Nov 2024 17:02:33 +0530 Subject: [PATCH 23/29] NMC 2015 - Moengage customisation changes --- Nextcloud.xcodeproj/project.pbxproj | 53 +++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 89c6ab1dbb..7aa141e538 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,6 +15,10 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; + 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */; }; + 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */; }; + 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */; }; + 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */; }; 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */; }; 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; @@ -1231,6 +1235,9 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; + 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; + 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; + 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; @@ -2171,6 +2178,7 @@ F7160A822BE933390034DCB3 /* RealmSwift in Frameworks */, F76DA963277B760E0082465B /* Queuer in Frameworks */, F3374AF22D78B01B002A38F9 /* Collections in Frameworks */, + 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */, F72AD70D28C24B93006CB92D /* NextcloudKit in Frameworks */, F70B86752642CE3B00ED5349 /* FirebaseCrashlytics in Frameworks */, F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */, @@ -2281,7 +2289,29 @@ path = Helper; sourceTree = ""; }; +<<<<<<< HEAD AA3C85EC2D36BC8400F74F12 /* Responses */ = { +======= + 56A32E6C2CE4B75C0020EFF5 /* MoEngage */ = { + isa = PBXGroup; + children = ( + 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */, + ); + path = MoEngage; + sourceTree = ""; + }; + 56A32E6F2CE4B75C0020EFF5 /* Analytics */ = { + isa = PBXGroup; + children = ( + 56A32E6C2CE4B75C0020EFF5 /* MoEngage */, + 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */, + 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */, + ); + path = Analytics; + sourceTree = ""; + }; + AF8ED1FA2757821000B8DBC4 /* NextcloudUnitTests */ = { +>>>>>>> 431d4304ec (NMC 2015 - Moengage customisation changes) isa = PBXGroup; children = ( AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, @@ -3612,6 +3642,7 @@ 566EB8122B3D861400FB7CAD /* NMC Custom Views */, 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, 566FCF562B3ECD3400168DEA /* Helper */, + 56A32E6F2CE4B75C0020EFF5 /* Analytics */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -3996,6 +4027,7 @@ F3374AF52D78B01B002A38F9 /* HashTreeCollections */, F3374AF72D78B01B002A38F9 /* HeapModule */, F70557B62ED44E2700135623 /* LucidBanner */, + 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */, F327FA422B8CC0B900E5B743 /* SwipeCellKit */, 56AB28932B833E2D0089D373 /* Adjust */, 56AB28962B8351720089D373 /* TealiumAutotracking */, @@ -4206,6 +4238,7 @@ F7D4BF4E2CA2ECCB00A5E746 /* XCRemoteSwiftPackageReference "vlckit-spm" */, F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */, F70557B52ED44E2700135623 /* XCRemoteSwiftPackageReference "LucidBanner" */, + 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */, F327FA412B8CC0B900E5B743 /* XCRemoteSwiftPackageReference "SwipeCellKit" */, 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */, 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */, @@ -4919,7 +4952,14 @@ F3CA33842D10726E00672333 /* NCLoginPollModel.swift in Sources */, 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */, F733598125C1C188002ABA72 /* NCAskAuthorization.swift in Sources */, +<<<<<<< HEAD 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */, +======= + 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */, + 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */, + 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */, + 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */, +>>>>>>> 431d4304ec (NMC 2015 - Moengage customisation changes) F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, F7DF7B3F2F1A2EF900514020 /* WarningBannerView.swift in Sources */, F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */, @@ -6639,6 +6679,14 @@ minimumVersion = 1.1.4; }; }; + 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/moengage/MoEngage-iOS-SDK.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 9.18.1; + }; + }; F33EE6DF2BF4BDA500CA1A51 /* XCRemoteSwiftPackageReference "swift-nio-ssl" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-nio-ssl"; @@ -6867,6 +6915,11 @@ package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; productName = HeapModule; }; + 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */ = { + isa = XCSwiftPackageProductDependency; + package = 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */; + productName = "MoEngage-iOS-SDK"; + }; 56AB28962B8351720089D373 /* TealiumAutotracking */ = { isa = XCSwiftPackageProductDependency; package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; From 4f3dc7d1d6c34bfdda5a7895eb56eb749083d041 Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Tue, 15 Apr 2025 18:10:48 +0530 Subject: [PATCH 24/29] NMC 2015 - Updated configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 875 ++++++------ .../NextcloudUnitTests/AssetUploadTest.swift | 36 + .../NextcloudUnitTests/AudioUploadTests.swift | 52 + .../CollaboraTestCase.swift | 142 ++ Tests/NextcloudUnitTests/E2EETests.swift | 90 ++ Tests/NextcloudUnitTests/MoreTests.swift | 37 + .../NextcloudUnitTests/MoveAndCopyTests.swift | 106 ++ .../NCNotificationText.swift | 85 ++ .../OnboardingTestCase.swift | 158 ++ .../PrivacyPolicyTest.swift | 154 ++ .../NextcloudUnitTests/RenameFileTests.swift | 108 ++ Tests/NextcloudUnitTests/ScanTests.swift | 111 ++ .../SettingsTestCases.swift | 341 +++++ Tests/NextcloudUnitTests/SharingTest.swift | 232 +++ iOSClient/Analytics/AnalyticsHelper.swift | 85 ++ iOSClient/Analytics/AnalyticsService.swift | 97 ++ .../MoEngage/MoEngageAnalytics.swift | 181 +++ iOSClient/AppUpdate/AppUpdater.swift | 94 ++ iOSClient/AppUtility.swift | 21 + iOSClient/EmptyView/NCEmptyDataSet.swift | 129 ++ iOSClient/EmptyView/NCEmptyView.xib | 71 + iOSClient/Helper/AdjustHelper.h | 47 + iOSClient/Helper/AdjustHelper.m | 153 ++ iOSClient/Helper/TealiumHelper.swift | 56 + iOSClient/Login/NCLoginWeb.swift | 370 +++++ ...mmon+SwipeCollectionViewCellDelegate.swift | 94 ++ .../NCSelectableNavigationView.swift | 116 ++ .../NCSectionHeaderMenu.swift | 329 +++++ .../NCSectionHeaderMenu.xib | 219 +++ .../NCCreateFormUploadDocuments.storyboard | 149 ++ .../Create/NCCreateFormUploadDocuments.swift | 567 ++++++++ .../NCCreateFormUploadVoiceNote.storyboard | 112 ++ .../Create/NCCreateFormUploadVoiceNote.swift | 370 +++++ iOSClient/Main/Create/TextTableViewCell.swift | 95 ++ iOSClient/Main/Create/TextTableViewCell.xib | 82 ++ iOSClient/Media/NCMediaCommandView.xib | 178 +++ .../FolderPathCustomCell.swift | 34 + .../NMC Custom Views/FolderPathCustomCell.xib | 74 + .../NCCreateDocumentCustomTextField.swift | 71 + .../NCCreateDocumentCustomTextField.xib | 80 ++ .../NCCreateFormUploadScanDocument.swift | 1271 +++++++++++++++++ .../NMC Views/FileNameInputTextField.swift | 67 + .../NMC Views/FileNameInputTextField.xib | 81 ++ .../NMC Views/JPGImageSaveSwitchView.swift | 43 + .../NMC Views/JPGImageSaveSwitchView.xib | 63 + .../NMC Views/PNGImageSaveSwitchView.swift | 43 + .../NMC Views/PNGImageSaveSwitchView.xib | 63 + .../NMC Views/PasswordInputField.swift | 73 + .../NMC Views/PasswordInputField.xib | 70 + .../NMC Views/PdfWithOcrSwitchView.swift | 43 + .../NMC Views/PdfWithOcrSwitchView.xib | 74 + .../NMC Views/PdfWithoutOcrSwitchView.swift | 43 + .../NMC Views/PdfWithoutOcrSwitchView.xib | 74 + .../NMC Views/ScanDocumentPathView.swift | 34 + .../NMC Views/ScanDocumentPathView.xib | 74 + .../NMC Views/SetPDFPasswordSwitchView.swift | 53 + .../NMC Views/SetPDFPasswordSwitchView.xib | 78 + .../NMC Views/TextFileWithOcrSwitchView.swift | 41 + .../NMC Views/TextFileWithOcrSwitchView.xib | 63 + .../AnalysisDataCollectionSwitch.swift | 34 + .../Settings/AnalysisDataCollectionSwitch.xib | 73 + iOSClient/Settings/CCAdvanced.h | 29 + iOSClient/Settings/CCAdvanced.m | 487 +++++++ iOSClient/Settings/CCManageAccount.h | 28 + iOSClient/Settings/CCManageAccount.m | 443 ++++++ iOSClient/Settings/CCManageAutoUpload.h | 28 + iOSClient/Settings/CCManageAutoUpload.m | 506 +++++++ iOSClient/Settings/HelpViewController.swift | 57 + .../Settings/ImprintViewController.swift | 70 + ...InitialPrivacySettingsViewController.swift | 170 +++ .../Settings/MagentaCloudVersionView.swift | 31 + .../Settings/MagentaCloudVersionView.xib | 76 + .../Settings/NCManageAutoUploadFileName.swift | 232 +++ iOSClient/Settings/NCManageE2EE.swift | 374 +++++ iOSClient/Settings/NCSettings.h | 33 + iOSClient/Settings/NCSettings.m | 435 ++++++ iOSClient/Settings/NCSettings.storyboard | 236 +++ .../OpenSourceSoftwareViewController.swift | 56 + .../PrivacyPolicyViewController.swift | 62 + .../PrivacySettingsViewController.swift | 147 ++ .../RequiredDataCollectionSwitch.swift | 34 + .../Settings/RequiredDataCollectionSwitch.xib | 73 + .../SaveSettingsCustomButtonCell.swift | 46 + .../Settings/SaveSettingsCustomButtonCell.xib | 46 + iOSClient/Settings/Settings.bundle/Root.plist | 31 + .../Settings.bundle/en.lproj/Root.strings | Bin 0 -> 512 bytes iOSClient/Share/NCShareEmailFieldCell.swift | 89 ++ iOSClient/Share/NCShareEmailFieldCell.xib | 128 ++ .../Share/ShareDownloadLimitNetwork.swift | 150 ++ 89 files changed, 12548 insertions(+), 408 deletions(-) create mode 100644 Tests/NextcloudUnitTests/AssetUploadTest.swift create mode 100644 Tests/NextcloudUnitTests/AudioUploadTests.swift create mode 100644 Tests/NextcloudUnitTests/CollaboraTestCase.swift create mode 100644 Tests/NextcloudUnitTests/E2EETests.swift create mode 100644 Tests/NextcloudUnitTests/MoreTests.swift create mode 100644 Tests/NextcloudUnitTests/MoveAndCopyTests.swift create mode 100644 Tests/NextcloudUnitTests/NCNotificationText.swift create mode 100644 Tests/NextcloudUnitTests/OnboardingTestCase.swift create mode 100644 Tests/NextcloudUnitTests/PrivacyPolicyTest.swift create mode 100644 Tests/NextcloudUnitTests/RenameFileTests.swift create mode 100644 Tests/NextcloudUnitTests/ScanTests.swift create mode 100644 Tests/NextcloudUnitTests/SettingsTestCases.swift create mode 100644 Tests/NextcloudUnitTests/SharingTest.swift create mode 100644 iOSClient/Analytics/AnalyticsHelper.swift create mode 100644 iOSClient/Analytics/AnalyticsService.swift create mode 100644 iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift create mode 100644 iOSClient/AppUpdate/AppUpdater.swift create mode 100644 iOSClient/AppUtility.swift create mode 100644 iOSClient/EmptyView/NCEmptyDataSet.swift create mode 100644 iOSClient/EmptyView/NCEmptyView.xib create mode 100644 iOSClient/Helper/AdjustHelper.h create mode 100644 iOSClient/Helper/AdjustHelper.m create mode 100644 iOSClient/Helper/TealiumHelper.swift create mode 100644 iOSClient/Login/NCLoginWeb.swift create mode 100644 iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift create mode 100644 iOSClient/Main/Collection Common/NCSelectableNavigationView.swift create mode 100644 iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift create mode 100644 iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.xib create mode 100644 iOSClient/Main/Create/NCCreateFormUploadDocuments.storyboard create mode 100644 iOSClient/Main/Create/NCCreateFormUploadDocuments.swift create mode 100644 iOSClient/Main/Create/NCCreateFormUploadVoiceNote.storyboard create mode 100644 iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift create mode 100644 iOSClient/Main/Create/TextTableViewCell.swift create mode 100644 iOSClient/Main/Create/TextTableViewCell.xib create mode 100644 iOSClient/Media/NCMediaCommandView.xib create mode 100644 iOSClient/NMC Custom Views/FolderPathCustomCell.swift create mode 100644 iOSClient/NMC Custom Views/FolderPathCustomCell.xib create mode 100644 iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.swift create mode 100644 iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.xib create mode 100644 iOSClient/Scan document/NCCreateFormUploadScanDocument.swift create mode 100644 iOSClient/Scan document/NMC Views/FileNameInputTextField.swift create mode 100644 iOSClient/Scan document/NMC Views/FileNameInputTextField.xib create mode 100644 iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.xib create mode 100644 iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.xib create mode 100644 iOSClient/Scan document/NMC Views/PasswordInputField.swift create mode 100644 iOSClient/Scan document/NMC Views/PasswordInputField.xib create mode 100644 iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.xib create mode 100644 iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.xib create mode 100644 iOSClient/Scan document/NMC Views/ScanDocumentPathView.swift create mode 100644 iOSClient/Scan document/NMC Views/ScanDocumentPathView.xib create mode 100644 iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.xib create mode 100644 iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.swift create mode 100644 iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.xib create mode 100644 iOSClient/Settings/AnalysisDataCollectionSwitch.swift create mode 100644 iOSClient/Settings/AnalysisDataCollectionSwitch.xib create mode 100755 iOSClient/Settings/CCAdvanced.h create mode 100755 iOSClient/Settings/CCAdvanced.m create mode 100644 iOSClient/Settings/CCManageAccount.h create mode 100644 iOSClient/Settings/CCManageAccount.m create mode 100644 iOSClient/Settings/CCManageAutoUpload.h create mode 100644 iOSClient/Settings/CCManageAutoUpload.m create mode 100644 iOSClient/Settings/HelpViewController.swift create mode 100644 iOSClient/Settings/ImprintViewController.swift create mode 100644 iOSClient/Settings/InitialPrivacySettingsViewController.swift create mode 100644 iOSClient/Settings/MagentaCloudVersionView.swift create mode 100644 iOSClient/Settings/MagentaCloudVersionView.xib create mode 100644 iOSClient/Settings/NCManageAutoUploadFileName.swift create mode 100644 iOSClient/Settings/NCManageE2EE.swift create mode 100644 iOSClient/Settings/NCSettings.h create mode 100644 iOSClient/Settings/NCSettings.m create mode 100644 iOSClient/Settings/NCSettings.storyboard create mode 100644 iOSClient/Settings/OpenSourceSoftwareViewController.swift create mode 100644 iOSClient/Settings/PrivacyPolicyViewController.swift create mode 100644 iOSClient/Settings/PrivacySettingsViewController.swift create mode 100644 iOSClient/Settings/RequiredDataCollectionSwitch.swift create mode 100644 iOSClient/Settings/RequiredDataCollectionSwitch.xib create mode 100644 iOSClient/Settings/SaveSettingsCustomButtonCell.swift create mode 100644 iOSClient/Settings/SaveSettingsCustomButtonCell.xib create mode 100644 iOSClient/Settings/Settings.bundle/Root.plist create mode 100644 iOSClient/Settings/Settings.bundle/en.lproj/Root.strings create mode 100644 iOSClient/Share/NCShareEmailFieldCell.swift create mode 100644 iOSClient/Share/NCShareEmailFieldCell.xib create mode 100644 iOSClient/Share/ShareDownloadLimitNetwork.swift diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 7aa141e538..8cb19cb647 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -15,88 +15,71 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; - 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */; }; - 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */; }; - 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */; }; - 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */; }; - 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */; }; - 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; - 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; - 56AB289B2B8351720089D373 /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; - 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289C2B8351730089D373 /* TealiumLocation */; }; - 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289E2B8351730089D373 /* TealiumRemoteCommands */; }; - 56AB28A12B8351730089D373 /* TealiumTagManagement in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A02B8351730089D373 /* TealiumTagManagement */; }; - 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A22B8351740089D373 /* TealiumVisitorService */; }; - 56AB28942B833E2D0089D373 /* Adjust in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28932B833E2D0089D373 /* Adjust */; }; - 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; - 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; - 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; - 566FCF522B3EBADE00168DEA /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */; }; - 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; - 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; - 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */; }; - 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; - 566FCF432B3EB4E800168DEA /* AnalysisDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */; }; - 566FCF442B3EB4E800168DEA /* PrivacyPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */; }; - 566FCF452B3EB4E800168DEA /* InitialPrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */; }; - 566FCF462B3EB4E800168DEA /* AnalysisDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */; }; - 566FCF472B3EB4E800168DEA /* PrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */; }; - 566FCF482B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */; }; - 566FCF492B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */; }; - 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */; }; - 566FCF4B2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */; }; - 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; - 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; - 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */; }; - 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; - 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; - 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; - 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */; }; - 566EB8252B3D8CB300FB7CAD /* ImprintViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */; }; - 566EB8262B3D8CB300FB7CAD /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */; }; - 566EB8272B3D8CB300FB7CAD /* MagentaCloudVersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */; }; - 566EB8282B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */; }; - 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */; }; - 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; - 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; - 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */; }; - 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */; }; - 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */; }; - 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */; }; - 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; - 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; - 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */; }; - 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */; }; - 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */; }; - 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */; }; - 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */; }; - 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */; }; - 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */; }; - 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */; }; - 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */; }; - 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */; }; - 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */; }; - 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */; }; - 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */; }; - 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */; }; - 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */; }; - 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */; }; - 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */; }; - 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */; }; - 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; - 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */; }; - 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */; }; - 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */; }; - 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */; }; - 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */; }; - 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */; }; - 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */; }; - 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */; }; - 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */; }; - 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */; }; - 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */; }; - 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */; }; - 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; + 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; + 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; + 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */; }; + 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */; }; + 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */; }; + 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */; }; + 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */; }; + 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */; }; + 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */; }; + 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */; }; + 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */; }; + 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */; }; + 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */; }; + 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */; }; + 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; + 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; + 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */; }; + 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */; }; + 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */; }; + 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */; }; + 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */; }; + 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */; }; + 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */; }; + 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */; }; + 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */; }; + 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */; }; + 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */; }; + 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */; }; + 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */; }; + 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */; }; + 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */; }; + 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */; }; + 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */; }; + 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */; }; + 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */; }; + 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; + 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; + 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */; }; + 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */; }; + 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */; }; + 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */; }; + 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; + 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; + 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; + 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; + 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */; }; + 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; + 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; + 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; + 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */; }; + 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; + 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; + 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; + 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; + 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */; }; + 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */; }; + 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */; }; + 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */; }; + 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */; }; + 56AB28942B833E2D0089D373 /* Adjust in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28932B833E2D0089D373 /* Adjust */; }; + 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; + 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; + 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289C2B8351730089D373 /* TealiumLocation */; }; + 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289E2B8351730089D373 /* TealiumRemoteCommands */; }; + 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A22B8351740089D373 /* TealiumVisitorService */; }; 8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */; }; AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */; }; AA3C85EB2D36BBFB00F74F12 /* OCSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */; }; @@ -173,7 +156,45 @@ AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; }; - CB3666201AF7550816B5CD6A /* NCContextMenuComment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */; }; + AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */; }; + B5E2E6F12DAE854D00AB2EDD /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; + B5E2E6F22DAE854D00AB2EDD /* TealiumTagManagement in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A02B8351730089D373 /* TealiumTagManagement */; }; + B5E2E70D2DAE86DC00AB2EDD /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */; }; + B5E2E70E2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */; }; + B5E2E70F2DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */; }; + B5E2E7102DAE86DC00AB2EDD /* CCAdvanced.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */; }; + B5E2E7112DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */; }; + B5E2E7122DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */; }; + B5E2E7132DAE86DC00AB2EDD /* ImprintViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */; }; + B5E2E7152DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */; }; + B5E2E7162DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */; }; + B5E2E7172DAE86DC00AB2EDD /* NCSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */; }; + B5E2E7182DAE86DC00AB2EDD /* CCManageAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */; }; + B5E2E7192DAE86DC00AB2EDD /* CCManageAutoUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */; }; + B5E2E71A2DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */; }; + B5E2E71B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */; }; + B5E2E71C2DAE86DC00AB2EDD /* PrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */; }; + B5E2E71D2DAE86DC00AB2EDD /* NCSettings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */; }; + B5E2E71E2DAE86DC00AB2EDD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */; }; + B5E2E71F2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */; }; + B5E2E7202DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */; }; + B5E2E7212DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */; }; + B5E2E7232DAE873D00AB2EDD /* NCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */; }; + B5E2E7282DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */; }; + B5E2E7292DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */; }; + B5E2E72A2DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */; }; + B5E2E72B2DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */; }; + B5E2E7322DAE894C00AB2EDD /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */; }; + B5E2E7332DAE894C00AB2EDD /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */; }; + B5E2E7342DAE896200AB2EDD /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */; }; + B5E2E7352DAE896200AB2EDD /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */; }; + B5E2E73B2DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */; }; + B5E2E73C2DAE89D700AB2EDD /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */; }; + B5E2E73D2DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; + B5E2E7412DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */; }; + B5E2E7432DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; + C04E2F232A17BB4D001BAD85 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C04E2F222A17BB4D001BAD85 /* FilesIntegrationTests.swift */; }; + D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; }; D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; }; F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */; }; F31165022F9674A1009A1E37 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = F31165012F9674A1009A1E37 /* AppIcon.icon */; }; @@ -869,6 +890,7 @@ F7CADEFD2EA159210057849E /* NCMetadataTranfersSuccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CADEFA2EA1591D0057849E /* NCMetadataTranfersSuccess.swift */; }; F7CA212D25F1333300826ABB /* ces */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; + F7CA212D25F1333300826ABB /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; }; F7CB689A2541676B0050EC94 /* NCMore.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CB68992541676B0050EC94 /* NCMore.storyboard */; }; F7CBC1232BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */; }; @@ -1235,80 +1257,65 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; - 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; - 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; - 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; - 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; - 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; - 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; - 566FCF592B3ECD3400168DEA /* AdjustHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; - 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; - 566FCF502B3EBADE00168DEA /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; - 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; - 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; - 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; - 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; - 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; - 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyViewController.swift; sourceTree = ""; }; - 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InitialPrivacySettingsViewController.swift; sourceTree = ""; }; - 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalysisDataCollectionSwitch.swift; sourceTree = ""; }; - 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacySettingsViewController.swift; sourceTree = ""; }; - 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequiredDataCollectionSwitch.swift; sourceTree = ""; }; - 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RequiredDataCollectionSwitch.xib; sourceTree = ""; }; - 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveSettingsCustomButtonCell.swift; sourceTree = ""; }; - 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SaveSettingsCustomButtonCell.xib; sourceTree = ""; }; - 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; - 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; - 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; - 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; - 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; - 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; - 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; - 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImprintViewController.swift; sourceTree = ""; }; - 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HelpViewController.swift; sourceTree = ""; }; - 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MagentaCloudVersionView.swift; sourceTree = ""; }; - 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OpenSourceSoftwareViewController.swift; sourceTree = ""; }; - 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; - 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; - 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; - 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; - 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; - 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; - 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; - 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; - 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; - 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; - 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; - 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; - 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; - 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; - 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; - 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; - 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; - 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; - 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; - 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; - 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; - 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; - 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; - 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; - 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; - 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = ""; }; - 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionEditCell.swift; sourceTree = ""; }; - 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionEditCell.xib; sourceTree = ""; }; - 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionCell.swift; sourceTree = ""; }; - 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionCell.xib; sourceTree = ""; }; - 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareHeaderCustomCell.xib; sourceTree = ""; }; - 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareHeaderCustomCell.swift; sourceTree = ""; }; - 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareTextInputCell.xib; sourceTree = ""; }; - 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareTextInputCell.swift; sourceTree = ""; }; - 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareEmailFieldCell.xib; sourceTree = ""; }; - 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareEmailFieldCell.swift; sourceTree = ""; }; - 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareDownloadLimitNetwork.swift; sourceTree = ""; }; - 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; + 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = ""; }; + 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionEditCell.swift; sourceTree = ""; }; + 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionEditCell.xib; sourceTree = ""; }; + 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionCell.swift; sourceTree = ""; }; + 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionCell.xib; sourceTree = ""; }; + 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareHeaderCustomCell.xib; sourceTree = ""; }; + 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareHeaderCustomCell.swift; sourceTree = ""; }; + 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareTextInputCell.xib; sourceTree = ""; }; + 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareTextInputCell.swift; sourceTree = ""; }; + 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareEmailFieldCell.xib; sourceTree = ""; }; + 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareEmailFieldCell.swift; sourceTree = ""; }; + 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareDownloadLimitNetwork.swift; sourceTree = ""; }; + 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; + 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; + 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; + 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; + 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; + 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; + 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; + 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; + 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; + 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; + 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; + 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; + 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; + 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; + 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; + 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; + 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; + 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; + 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; + 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; + 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; + 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; + 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; + 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; + 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; + 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; + 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; + 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; + 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; + 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; + 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; + 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; + 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; + 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; + 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; + 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; + 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; + 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; + 566FCF592B3ECD3400168DEA /* AdjustHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; + 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; + 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; + 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; + 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = ""; }; AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestBackend.swift; sourceTree = ""; }; AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCSResponse.swift; sourceTree = ""; }; @@ -1432,8 +1439,41 @@ AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = ""; }; AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = ""; }; AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = ""; }; - B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuPlayerTracks.swift; sourceTree = ""; }; - BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuProfile.swift; sourceTree = ""; }; + AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+Helper.swift"; sourceTree = ""; }; + B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisDataCollectionSwitch.swift; sourceTree = ""; }; + B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; + B5E2E6F62DAE86DC00AB2EDD /* CCAdvanced.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCAdvanced.h; sourceTree = ""; }; + B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCAdvanced.m; sourceTree = ""; }; + B5E2E6F82DAE86DC00AB2EDD /* CCManageAccount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCManageAccount.h; sourceTree = ""; }; + B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCManageAccount.m; sourceTree = ""; }; + B5E2E6FA2DAE86DC00AB2EDD /* CCManageAutoUpload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCManageAutoUpload.h; sourceTree = ""; }; + B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCManageAutoUpload.m; sourceTree = ""; }; + B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpViewController.swift; sourceTree = ""; }; + B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImprintViewController.swift; sourceTree = ""; }; + B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPrivacySettingsViewController.swift; sourceTree = ""; }; + B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MagentaCloudVersionView.swift; sourceTree = ""; }; + B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; + B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCManageAutoUploadFileName.swift; sourceTree = ""; }; + B5E2E7032DAE86DC00AB2EDD /* NCSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NCSettings.h; sourceTree = ""; }; + B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NCSettings.m; sourceTree = ""; }; + B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCSettings.storyboard; sourceTree = ""; }; + B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSourceSoftwareViewController.swift; sourceTree = ""; }; + B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyViewController.swift; sourceTree = ""; }; + B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettingsViewController.swift; sourceTree = ""; }; + B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequiredDataCollectionSwitch.swift; sourceTree = ""; }; + B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RequiredDataCollectionSwitch.xib; sourceTree = ""; }; + B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveSettingsCustomButtonCell.swift; sourceTree = ""; }; + B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SaveSettingsCustomButtonCell.xib; sourceTree = ""; }; + B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginWeb.swift; sourceTree = ""; }; + B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadDocuments.storyboard; sourceTree = ""; }; + B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadDocuments.swift; sourceTree = ""; }; + B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadVoiceNote.storyboard; sourceTree = ""; }; + B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadVoiceNote.swift; sourceTree = ""; }; + B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSectionHeaderMenu.swift; sourceTree = ""; }; + B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCSectionHeaderMenu.xib; sourceTree = ""; }; + B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; + B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEmptyDataSet.swift; sourceTree = ""; }; + B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCEmptyView.xib; sourceTree = ""; }; C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityTableViewCell.swift; sourceTree = ""; }; @@ -2152,6 +2192,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B5E2E6F22DAE854D00AB2EDD /* TealiumTagManagement in Frameworks */, + B5E2E6F12DAE854D00AB2EDD /* TealiumLifecycle in Frameworks */, F7D4BF542CA2ED9D00A5E746 /* VLCKitSPM in Frameworks */, F7D56B1A2972405500FA46C4 /* Mantis in Frameworks */, F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */, @@ -2185,8 +2227,7 @@ F76DA969277B77EA0082465B /* DropDown in Frameworks */, F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */, F75EAED826D2552E00F4320E /* MarqueeLabel in Frameworks */, - F710FC7A277B7D0000AA9FBF /* Realm in Frameworks */, - 56AB28942B833E2D0089D373 /* Adjust in Frameworks */, + 56AB28942B833E2D0089D373 /* Adjust in Frameworks */, F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */, F76B649E2ADFFDEC00014640 /* LRUCache in Frameworks */, ); @@ -2288,30 +2329,26 @@ ); path = Helper; sourceTree = ""; - }; -<<<<<<< HEAD + } + 56A32E6C2CE4B75C0020EFF5 /* MoEngage */ = { + isa = PBXGroup; + children = ( + 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */, + ); + path = MoEngage; + sourceTree = ""; + }; + 56A32E6F2CE4B75C0020EFF5 /* Analytics */ = { + isa = PBXGroup; + children = ( + 56A32E6C2CE4B75C0020EFF5 /* MoEngage */, + 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */, + 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */, + ); + path = Analytics; + sourceTree = ""; + }; AA3C85EC2D36BC8400F74F12 /* Responses */ = { -======= - 56A32E6C2CE4B75C0020EFF5 /* MoEngage */ = { - isa = PBXGroup; - children = ( - 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */, - ); - path = MoEngage; - sourceTree = ""; - }; - 56A32E6F2CE4B75C0020EFF5 /* Analytics */ = { - isa = PBXGroup; - children = ( - 56A32E6C2CE4B75C0020EFF5 /* MoEngage */, - 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */, - 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */, - ); - path = Analytics; - sourceTree = ""; - }; - AF8ED1FA2757821000B8DBC4 /* NextcloudUnitTests */ = { ->>>>>>> 431d4304ec (NMC 2015 - Moengage customisation changes) isa = PBXGroup; children = ( AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, @@ -2369,14 +2406,14 @@ isa = PBXGroup; children = ( AA8D316D2D4123B200FE2775 /* DownloadLimit */, - 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */, - 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */, - 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */, - 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */, - 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */, - 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */, - 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */, - 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */, + 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */, + 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */, + 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */, + 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */, + 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */, + 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */, + 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */, + 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */, AF93471627E2361E002537EE /* NCShareAdvancePermission.swift */, AF93471827E2361E002537EE /* NCShareAdvancePermissionFooter.swift */, AF93471427E2361E002537EE /* NCShareAdvancePermissionFooter.xib */, @@ -2388,6 +2425,32 @@ path = Advanced; sourceTree = ""; }; + B5E2E6F32DAE854D00AB2EDD /* Recovered References */ = { + isa = PBXGroup; + children = ( + 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */, + 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */, + ); + name = "Recovered References"; + sourceTree = ""; + }; + B5E2E7372DAE89D700AB2EDD /* AppUpdate */ = { + isa = PBXGroup; + children = ( + B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */, + ); + path = AppUpdate; + sourceTree = ""; + }; + B5E2E73A2DAE89D700AB2EDD /* EmptyView */ = { + isa = PBXGroup; + children = ( + B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */, + B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */, + ); + path = EmptyView; + sourceTree = ""; + }; C0046CDB2A17B98400D87C9D /* NextcloudUITests */ = { isa = PBXGroup; children = ( @@ -2654,9 +2717,9 @@ F728CE741BF6322C00E69702 /* Share */ = { isa = PBXGroup; children = ( - 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */, - 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */, - 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */, + 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */, + 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */, + 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */, AF93471327E235EB002537EE /* Advanced */, F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */, F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */, @@ -2786,8 +2849,8 @@ F758B41E212C516300515F55 /* Scan document */ = { isa = PBXGroup; children = ( - 566EB7E92B3D7B5F00FB7CAD /* NMC Views */, - 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */, + 566EB7E92B3D7B5F00FB7CAD /* NMC Views */, + 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */, F758B457212C564000515F55 /* NCScan.storyboard */, F758B45D212C569C00515F55 /* NCScanCell.swift */, F758B45F212C56A400515F55 /* NCScan.swift */, @@ -2881,6 +2944,30 @@ F76882042C0DD1E7001CF441 /* Settings */ = { isa = PBXGroup; children = ( + B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */, + B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */, + B5E2E6F62DAE86DC00AB2EDD /* CCAdvanced.h */, + B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */, + B5E2E6F82DAE86DC00AB2EDD /* CCManageAccount.h */, + B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */, + B5E2E6FA2DAE86DC00AB2EDD /* CCManageAutoUpload.h */, + B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */, + B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */, + B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */, + B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */, + B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */, + B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */, + B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */, + B5E2E7032DAE86DC00AB2EDD /* NCSettings.h */, + B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */, + B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */, + B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */, + B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */, + B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */, + B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */, + B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */, + B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */, + B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */, F768820B2C0DD1E7001CF441 /* Settings */, F76882162C0DD1E7001CF441 /* AutoUpload */, F389C9F32CEE381E00049762 /* SelectAlbum */, @@ -3053,7 +3140,6 @@ F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */, F7CEE5FE2BA9A5C9003EFD89 /* NCTrashGridCell.xib */, F78ACD4821903F850088454D /* NCTrashListCell.swift */, - F78ACD4821903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift */, F78ACD4921903F850088454D /* NCTrashListCell.xib */, ); path = Cell; @@ -3062,6 +3148,8 @@ F78ACD50219046AC0088454D /* Section Header Footer */ = { isa = PBXGroup; children = ( + B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */, + B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */, F78ACD51219046DC0088454D /* NCSectionFirstHeader.swift */, F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */, F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */, @@ -3202,38 +3290,6 @@ isa = PBXGroup; children = ( F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */, - 566EB8212B3D8CB300FB7CAD /* HelpViewController.swift */, - 566EB8202B3D8CB300FB7CAD /* ImprintViewController.swift */, - 566EB8222B3D8CB300FB7CAD /* MagentaCloudVersionView.swift */, - 566EB81F2B3D8CB300FB7CAD /* MagentaCloudVersionView.xib */, - 566EB8232B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift */, - 566FCF3D2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.swift */, - 566FCF3A2B3EB4E700168DEA /* AnalysisDataCollectionSwitch.xib */, - 566FCF3C2B3EB4E700168DEA /* InitialPrivacySettingsViewController.swift */, - 566FCF3B2B3EB4E700168DEA /* PrivacyPolicyViewController.swift */, - 566FCF3E2B3EB4E800168DEA /* PrivacySettingsViewController.swift */, - 566FCF3F2B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift */, - 566FCF402B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib */, - 566FCF412B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift */, - 566FCF422B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib */, - F7ACE4291BAC0268006C0017 /* Acknowledgements.h */, - F7ACE42A1BAC0268006C0017 /* Acknowledgements.m */, - F7ACE42B1BAC0268006C0017 /* Acknowledgements.rtf */, - F7A321AB1E9E6AD50069AD1B /* CCAdvanced.h */, - F7A321AC1E9E6AD50069AD1B /* CCAdvanced.m */, - F7ACE42C1BAC0268006C0017 /* CCManageAccount.h */, - F7ACE42D1BAC0268006C0017 /* CCManageAccount.m */, - F7ACE42E1BAC0268006C0017 /* CCManageAutoUpload.h */, - F7ACE42F1BAC0268006C0017 /* CCManageAutoUpload.m */, - F726EEEB1FED1C820030B9C8 /* NCEndToEndInitialize.swift */, - F760DE162AE66F350027D78A /* NCKeychain.swift */, - F75AC2421F1F62450073EC19 /* NCManageAutoUploadFileName.swift */, - F7A7FA6229265CF4000603EF /* NCManageE2EE.swift */, - F7ACE4301BAC0268006C0017 /* NCSettings.h */, - F7ACE4311BAC0268006C0017 /* NCSettings.m */, - F7CB689F254169530050EC94 /* NCSettings.storyboard */, - F77910AA25DD53C700CEDB9E /* NCSettingsBundleHelper.swift */, - F77910A425DD517B00CEDB9E /* Settings.bundle */, ); path = DeepLink; sourceTree = ""; @@ -3288,6 +3344,8 @@ F7BFFA621A24D7300044ED85 /* Login */ = { isa = PBXGroup; children = ( + B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */, + F3CA33802D106FF900672333 /* Poll */, F702F2F025EE5CDA008F8E80 /* NCLogin.storyboard */, F702F2F625EE5CEC008F8E80 /* NCLogin.swift */, F745B252222D88AE00346520 /* NCLoginQRCode.swift */, @@ -3508,12 +3566,15 @@ F7DFB7E9219C5A0500680748 /* Create */ = { isa = PBXGroup; children = ( + B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */, + B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */, + B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */, + B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */, F7FA7FFD2C0F4F3B0072FC60 /* Upload Assets */, F7A509242C26BD5D00326106 /* NCCreate.swift */, F7A509242C26BD5D00326106 /* NCCreateDocument.swift */, - 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */, - 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */, - F769CA162965AB7C00039397 /* NCUploadAssets.swift */, + 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */, + 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */, F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */, F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */, F704B5E82430C0B800632F5F /* NCCreateFormUploadConflictCell.swift */, @@ -3534,7 +3595,7 @@ F7EC9CB921185F2000F1C5CE /* Media */ = { isa = PBXGroup; children = ( - 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */, + 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */, F720B5B72507B9A5008C94E5 /* Cell */, F7501C302212E57400FB1415 /* NCMedia.storyboard */, F7501C312212E57400FB1415 /* NCMedia.swift */, @@ -3630,19 +3691,19 @@ F70716E32987F81500E72C1D /* File Provider Extension UI.appex */, C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */, C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */, - F7F1FBA62E27D13700C79E20 /* Frameworks */, - F31165012F9674A1009A1E37 /* AppIcon.icon */, - F7C55C7A2FB5AEF7004A974F /* Action Assistant.appex */, + B5E2E6F32DAE854D00AB2EDD /* Recovered References */, ); sourceTree = ""; }; F7F67BAA1A24D27800EE80DA /* iOSClient */ = { isa = PBXGroup; children = ( - 566EB8122B3D861400FB7CAD /* NMC Custom Views */, - 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, - 566FCF562B3ECD3400168DEA /* Helper */, - 56A32E6F2CE4B75C0020EFF5 /* Analytics */, + B5E2E7372DAE89D700AB2EDD /* AppUpdate */, + B5E2E73A2DAE89D700AB2EDD /* EmptyView */, + 566EB8122B3D861400FB7CAD /* NMC Custom Views */, + 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, + 566FCF562B3ECD3400168DEA /* Helper */, + 56A32E6F2CE4B75C0020EFF5 /* Analytics */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -4029,14 +4090,15 @@ F70557B62ED44E2700135623 /* LucidBanner */, 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */, F327FA422B8CC0B900E5B743 /* SwipeCellKit */, - 56AB28932B833E2D0089D373 /* Adjust */, - 56AB28962B8351720089D373 /* TealiumAutotracking */, - 56AB28982B8351720089D373 /* TealiumCore */, - 56AB289A2B8351720089D373 /* TealiumLifecycle */, - 56AB289C2B8351730089D373 /* TealiumLocation */, - 56AB289E2B8351730089D373 /* TealiumRemoteCommands */, - 56AB28A02B8351730089D373 /* TealiumTagManagement */, - 56AB28A22B8351740089D373 /* TealiumVisitorService */, + 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */, + 56AB28932B833E2D0089D373 /* Adjust */, + 56AB28962B8351720089D373 /* TealiumAutotracking */, + 56AB28982B8351720089D373 /* TealiumCore */, + 56AB289A2B8351720089D373 /* TealiumLifecycle */, + 56AB289C2B8351730089D373 /* TealiumLocation */, + 56AB289E2B8351730089D373 /* TealiumRemoteCommands */, + 56AB28A02B8351730089D373 /* TealiumTagManagement */, + 56AB28A22B8351740089D373 /* TealiumVisitorService */, ); productName = "Crypto Cloud"; productReference = F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */; @@ -4240,6 +4302,7 @@ F70557B52ED44E2700135623 /* XCRemoteSwiftPackageReference "LucidBanner" */, 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */, F327FA412B8CC0B900E5B743 /* XCRemoteSwiftPackageReference "SwipeCellKit" */, + 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */, 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */, 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */, ); @@ -4313,12 +4376,14 @@ F7148054262ED51000693E51 /* NCListCell.xib in Resources */, F7E4022C2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, AF22B209277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.xib in Resources */, + B5E2E7352DAE896200AB2EDD /* NCSectionHeaderMenu.xib in Resources */, F7CBC1242BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */, F7B398432A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, AF22B207277B4E4C00DAB0CC /* NCCreateFormUploadConflict.storyboard in Resources */, AA517B822D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F7145A231D12E3B700CAFEEC /* Localizable.strings in Resources */, F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, + B5E2E7432DAE89D700AB2EDD /* NCEmptyView.xib in Resources */, F76C26A62850D3A500E42BDF /* Images.xcassets in Resources */, F714805E262ED52900693E51 /* NCSectionFooter.xib in Resources */, F700222D1EC479840080073F /* Custom.xcassets in Resources */, @@ -4354,32 +4419,35 @@ files = ( F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */, F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, - 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */, - 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, - F77444F622281649000D5EB0 /* NCGridMediaCell.xib in Resources */, + 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */, + 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, + F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, - 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, + 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, - 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */, + 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */, + B5E2E7332DAE894C00AB2EDD /* NCSectionHeaderMenu.xib in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, F7F4F10827ECDBDB008676F9 /* Inconsolata-ExtraLight.ttf in Resources */, F72685E727C78E490019EF5E /* InfoPlist.strings in Resources */, - 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */, + 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */, F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */, - 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */, + 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */, F7F4F10927ECDBDB008676F9 /* Inconsolata-Bold.ttf in Resources */, F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, F700222C1EC479840080073F /* Custom.xcassets in Resources */, - 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */, - 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */, + 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */, + B5E2E71D2DAE86DC00AB2EDD /* NCSettings.storyboard in Resources */, + B5E2E71E2DAE86DC00AB2EDD /* MagentaCloudVersionView.xib in Resources */, + B5E2E71F2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib in Resources */, + B5E2E7202DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib in Resources */, + B5E2E7212DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib in Resources */, + 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */, F702F2F125EE5CDB008F8E80 /* NCLogin.storyboard in Resources */, F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */, F758B45A212C564000515F55 /* NCScan.storyboard in Resources */, - F70D87CF25EE6E58008CBBBD /* NCRenameFile.storyboard in Resources */, - F33AAF9A2A60394C006ECCBD /* NCMoreUserCell.xib in Resources */, - 566FCF432B3EB4E800168DEA /* AnalysisDataCollectionSwitch.xib in Resources */, F765F73225237E3F00391DBE /* NCRecent.storyboard in Resources */, F31165022F9674A1009A1E37 /* AppIcon.icon in Resources */, F78F74342163757000C2ADAD /* NCTrash.storyboard in Resources */, @@ -4387,26 +4455,23 @@ F757CC8C29E82D0500F31428 /* NCGroupfolders.storyboard in Resources */, F79A65C32191D90F00FF6DCC /* NCSelect.storyboard in Resources */, F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */, - F31F69612A2F907800162F76 /* __Snapshots__ in Resources */, - F702F2E725EE5C86008F8E80 /* NCAudioRecorderViewController.storyboard in Resources */, - 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */, - 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */, + 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */, + 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */, AF56C1DC2784856200D8BAE2 /* NCActivityCommentView.xib in Resources */, - 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */, + 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */, F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */, F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */, F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, - 566FCF292B3EAD0E00168DEA /* FolderPathCustomCell.xib in Resources */, - AF93471C27E2361E002537EE /* NCShareAdvancePermissionHeader.xib in Resources */, - 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, + AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, + 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, - 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */, + 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */, F7A48415297028FC00BD1B49 /* Nextcloud Hub.png in Resources */, - 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */, + 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */, F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */, F7F4F10C27ECDBDB008676F9 /* Inconsolata-Regular.ttf in Resources */, F7B8B83025681C3400967775 /* GoogleService-Info.plist in Resources */, @@ -4414,21 +4479,20 @@ F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */, F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */, F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */, - 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */, + 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */, F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */, F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */, F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */, AF93471927E2361E002537EE /* NCShareAdvancePermissionFooter.xib in Resources */, F7725A61251F33BB00D125E0 /* NCFiles.storyboard in Resources */, F7CBC1232BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */, + B5E2E73D2DAE89D700AB2EDD /* NCEmptyView.xib in Resources */, F700510122DF63AC003A3356 /* NCShare.storyboard in Resources */, F787704F22E7019900F287A9 /* NCShareLinkCell.xib in Resources */, F70753F72542A9C000972D44 /* NCViewerMediaPage.storyboard in Resources */, F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */, F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */, F761856A29E98543006EB3B0 /* NCIntro.storyboard in Resources */, - F747BA1F22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, - 566FCF492B3EB4E800168DEA /* RequiredDataCollectionSwitch.xib in Resources */, F719D9E0288D37A300762E33 /* NCColorPicker.storyboard in Resources */, AA517B802D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F7F4F10A27ECDBDB008676F9 /* Inconsolata-ExtraBold.ttf in Resources */, @@ -4443,26 +4507,24 @@ F732D23327CF8AED000B0F1B /* NCPlayerToolBar.xib in Resources */, F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */, F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */, - 566FCF4B2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.xib in Resources */, F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, - 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, + 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, - 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */, + 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, - 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */, + 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */, F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */, F77B0F7D1D118A16002130FE /* Images.xcassets in Resources */, F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */, F7AE00FA230E81EB007ACF8A /* NCBrowserWeb.storyboard in Resources */, F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */, + B5E2E72A2DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard in Resources */, + B5E2E72B2DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard in Resources */, F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */, F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */, - 566EB8242B3D8CB300FB7CAD /* MagentaCloudVersionView.xib in Resources */, - F77910A525DD517B00CEDB9E /* Settings.bundle in Resources */, - 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */, - F7CB68A0254169530050EC94 /* NCSettings.storyboard in Resources */, + 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */, F76687082B7D067400779E3F /* NCAudioRecorderViewController.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4599,17 +4661,17 @@ AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, - 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */, - 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, - 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, + 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */, + 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, + 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, - 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */, - 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */, - 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, - 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, + 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */, + 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */, + 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, + 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, - 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */, - 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, + 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */, + 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4694,10 +4756,13 @@ F7C30DFB291BCF790017149B /* NCNetworkingE2EECreateFolder.swift in Sources */, F73EF7DA2B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, F70557BF2ED44F1800135623 /* UploadBannerView.swift in Sources */, + B5E2E7342DAE896200AB2EDD /* NCSectionHeaderMenu.swift in Sources */, + F79ED0F32D2FCA7100A389D9 /* NCRecommendationsCell.swift in Sources */, F7817CFB29801A3500FFBC65 /* Data+Extension.swift in Sources */, F72429362AFE39860040AEF3 /* NCLivePhoto.swift in Sources */, F74B91E82F51D45A0050813D /* ErrorBannerView.swift in Sources */, AF4BF61F27562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, + B5E2E7412DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */, F7CBC1262BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F7A0D1362591FBC5008F8A13 /* String+Extension.swift in Sources */, F7236DDE2F7C00E600F9D722 /* HudIndeterminateBannerView.swift in Sources */, @@ -4931,15 +4996,15 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B5E2E73B2DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */, + B5E2E73C2DAE89D700AB2EDD /* AppUpdater.swift in Sources */, + F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, + 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */, + B5E2E7322DAE894C00AB2EDD /* NCSectionHeaderMenu.swift in Sources */, F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, - F30A96312A27AEBF00D7BCFE /* EnvVars.generated.swift in Sources */, - 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */, - F77444F522281649000D5EB0 /* NCGridMediaCell.swift in Sources */, F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, F7E7AEA72BA32D0000512E52 /* NCCollectionViewUnifiedSearch.swift in Sources */, - F769CA172965AB7C00039397 /* NCUploadAssets.swift in Sources */, - 566EB8252B3D8CB300FB7CAD /* ImprintViewController.swift in Sources */, F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, F33918C42C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, F39170AD2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, @@ -4950,22 +5015,21 @@ F3C6F6F62F34CC0900C531B6 /* NCAssistantChatConversationsModel.swift in Sources */, F76340FC2EBDF64D0056F538 /* NCManageDatabase+Tag.swift in Sources */, F3CA33842D10726E00672333 /* NCLoginPollModel.swift in Sources */, - 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */, + B5E2E7282DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift in Sources */, + B5E2E7292DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift in Sources */, + 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */, F733598125C1C188002ABA72 /* NCAskAuthorization.swift in Sources */, -<<<<<<< HEAD 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */, -======= - 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */, - 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */, - 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */, + 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */, + 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */, + 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */, 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */, ->>>>>>> 431d4304ec (NMC 2015 - Moengage customisation changes) F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, F7DF7B3F2F1A2EF900514020 /* WarningBannerView.swift in Sources */, F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */, F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */, F7BFFD282C8846020029A201 /* NCHud.swift in Sources */, - 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */, + 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */, F71CD6CA2930D7B1006C95C1 /* NCApplicationHandle.swift in Sources */, F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */, F73EF7D72B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, @@ -4991,7 +5055,6 @@ F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */, F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */, F73F537F1E929C8500F8678D /* NCMore.swift in Sources */, - 566FCF462B3EB4E800168DEA /* AnalysisDataCollectionSwitch.swift in Sources */, F702F2CF25EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F794E13F2BBC0F70003693D7 /* SceneDelegate.swift in Sources */, F714A1472ED84AF90050A43B /* HudBannerView.swift in Sources */, @@ -5023,7 +5086,6 @@ AF4BF61927562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */, AFA2AC8527849604008E1EA7 /* NCActivityCommentView.swift in Sources */, - 566FCF472B3EB4E800168DEA /* PrivacySettingsViewController.swift in Sources */, AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */, F75A9EE623796C6F0044CFCE /* NCNetworking.swift in Sources */, F72EC7282F45FF1400A2135C /* NCContextMenuPlus.swift in Sources */, @@ -5037,7 +5099,7 @@ F765E9CD295C585800A09ED8 /* NCUploadScanDocument.swift in Sources */, F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */, F77A697D250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift in Sources */, - 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */, + 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */, F7BF9D822934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F7110AE02F9773230095AA5C /* AppDelegate+AppRefresh.swift in Sources */, AA8D31662D411FA100FE2775 /* NCShareDateCell.swift in Sources */, @@ -5048,7 +5110,6 @@ F7A846DE2BB01ACB0024816F /* NCTrashCellProtocol.swift in Sources */, F7236DDF2F7C00E600F9D722 /* HudIndeterminateBannerView.swift in Sources */, F799DF852C4B7E56003410B5 /* NCSectionHeader.swift in Sources */, - 566FCF442B3EB4E800168DEA /* PrivacyPolicyViewController.swift in Sources */, F78A10BF29322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */, F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */, @@ -5058,12 +5119,11 @@ AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, - 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, + 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */, F71638942FA0F65A00A913B7 /* NCMoreModel.swift in Sources */, F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */, - 566EB8272B3D8CB300FB7CAD /* MagentaCloudVersionView.swift in Sources */, - 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */, + 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */, F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */, F724377B2C10B83E00C7C68D /* NCSharePermissions.swift in Sources */, F317C82E2E844C5300761AEA /* ClientIntegrationUIViewer.swift in Sources */, @@ -5092,8 +5152,7 @@ F7D4BF4B2CA2E8D800A5E746 /* TOPasscodeViewContentLayout.m in Sources */, F7D4BF4C2CA2E8D800A5E746 /* TOPasscodeSettingsKeypadButton.m in Sources */, F7D4BF4D2CA2E8D800A5E746 /* TOPasscodeViewController.m in Sources */, - F7CBC1252BAC8B0000EC1D55 /* NCSectionHeaderEmptyData.swift in Sources */, - 566EB8262B3D8CB300FB7CAD /* HelpViewController.swift in Sources */, + F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */, AAE330042D2ED20200B04903 /* NCShareNavigationTitleSetting.swift in Sources */, F71CFA672F2A07DB007A3AE9 /* NCMedia+Netwoking.swift in Sources */, @@ -5103,13 +5162,12 @@ F76882352C0DD1E7001CF441 /* NCWebBrowserView.swift in Sources */, F72CA0572F5048C3002E2F06 /* UIApplication+Extension.swift in Sources */, F3A047972BD2668800658E7B /* NCAssistantEmptyView.swift in Sources */, - 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, - F78ACD4A21903F850088454D /* NCTrashListCell+NCTrashCellProtocol.swift in Sources */, + 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, + F78ACD4A21903F850088454D /* NCTrashListCell.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, - 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */, - 566FCF4A2B3EB4E800168DEA /* SaveSettingsCustomButtonCell.swift in Sources */, + 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */, AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, @@ -5118,21 +5176,34 @@ F70557BE2ED44F1800135623 /* ErrorBannerView.swift in Sources */, 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, F77B0E5F1D118A16002130FE /* NCSettings.m in Sources */, + 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */, F7E7AEA52BA32C6500512E52 /* NCCollectionViewDownloadThumbnail.swift in Sources */, + B5E2E70D2DAE86DC00AB2EDD /* HelpViewController.swift in Sources */, + B5E2E70E2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift in Sources */, + B5E2E70F2DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift in Sources */, + B5E2E7102DAE86DC00AB2EDD /* CCAdvanced.m in Sources */, + B5E2E7112DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift in Sources */, + B5E2E7122DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift in Sources */, + B5E2E7132DAE86DC00AB2EDD /* ImprintViewController.swift in Sources */, + B5E2E7152DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift in Sources */, + B5E2E7162DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift in Sources */, + B5E2E7172DAE86DC00AB2EDD /* NCSettings.m in Sources */, + B5E2E7182DAE86DC00AB2EDD /* CCManageAccount.m in Sources */, + B5E2E7192DAE86DC00AB2EDD /* CCManageAutoUpload.m in Sources */, + B5E2E71A2DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift in Sources */, + B5E2E71B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift in Sources */, + B5E2E71C2DAE86DC00AB2EDD /* PrivacySettingsViewController.swift in Sources */, AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, F78F74362163781100C2ADAD /* NCTrash.swift in Sources */, - AF817EF1274BC781009ED85B /* NCUserBaseUrl.swift in Sources */, - 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */, + 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */, F39298972A3B12CB00509762 /* BaseNCMoreCell.swift in Sources */, - 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */, + 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */, AF2D7C7C2742556F00ADF566 /* NCShareLinkCell.swift in Sources */, F7C55C512FB4A658004A974F /* NCAssistantInputModel.swift in Sources */, F7E41316294A19B300839300 /* UIView+Extension.swift in Sources */, F7C30E00291BD2610017149B /* NCNetworkingE2EERename.swift in Sources */, - F7651A8B23A2A3F2001403D2 /* NCCreateFormUploadDocuments.swift in Sources */, - 566FCF452B3EB4E800168DEA /* InitialPrivacySettingsViewController.swift in Sources */, F74AF3A4247FB6AE00AC767B /* NCUtilityFileSystem.swift in Sources */, AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */, F73EF7BF2B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, @@ -5158,7 +5229,7 @@ F7B6B70427C4E7FA00A7F6EB /* NCScan+CollectionView.swift in Sources */, F7816EF22C2C3E1F00A52517 /* NCPushNotification.swift in Sources */, F76882342C0DD1E7001CF441 /* NCDisplayView.swift in Sources */, - 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */, + 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */, F7C30DF6291BC0CA0017149B /* NCNetworkingE2EEUpload.swift in Sources */, F3DDFE232F1FB4C300A784C8 /* NCAssistantChatModel.swift in Sources */, F7501C332212E57500FB1415 /* NCMedia.swift in Sources */, @@ -5194,6 +5265,7 @@ F7FA7FFC2C0F4EE40072FC60 /* NCViewerQuickLookView.swift in Sources */, F3A0479B2BD2668800658E7B /* NCAssistant.swift in Sources */, F359D8672A7D03420023F405 /* NCUtility+Exif.swift in Sources */, + B5E2E7232DAE873D00AB2EDD /* NCLoginWeb.swift in Sources */, F7A03E352D427312007AA677 /* NCMainNavigationController.swift in Sources */, F769CA192966EA3C00039397 /* ComponentView.swift in Sources */, F7C9B91D2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, @@ -5216,10 +5288,9 @@ F7E8A391295DC5E0006CB2D0 /* View+Extension.swift in Sources */, F7CB77642F5843E500DE649A /* UIFont+Extension.swift in Sources */, F79B869B265E19D40085C0E0 /* NSMutableAttributedString+Extension.swift in Sources */, - 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */, + 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */, F7B7504B2397D38F004E13EC /* UIImage+Extension.swift in Sources */, AF3FDCC22796ECC300710F60 /* NCTrash+CollectionView.swift in Sources */, - 566EB8282B3D8CB300FB7CAD /* OpenSourceSoftwareViewController.swift in Sources */, F70D7C3725FFBF82002B9E34 /* NCCollectionViewCommon.swift in Sources */, F76D364628A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, F3A047992BD2668800658E7B /* NCAssistantModel.swift in Sources */, @@ -5230,12 +5301,10 @@ AAFC0D092F9AA10000F0A001 /* NCFocusedAutoUploadCloudAnimation.swift in Sources */, AAFC0D0B2F9AA10000F0A001 /* NCAutoUploadCounter.swift in Sources */, F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, - F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */, - F3BB464F2A39EBE500461F6E /* NCMoreUserCell.swift in Sources */, - F726EEEC1FED1C820030B9C8 /* NCEndToEndInitialize.swift in Sources */, - 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */, + F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, + 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */, F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */, - 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */, + 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */, F75D19E325EFE09000D74598 /* NCTrash+Menu.swift in Sources */, F34E1ADB2ECC842B00FA10C3 /* NCStatusMessageModel.swift in Sources */, F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */, @@ -5248,7 +5317,7 @@ AB6000032F60000200FE2775 /* NCTagEditorView.swift in Sources */, AF93471B27E2361E002537EE /* NCShareAdvancePermission.swift in Sources */, F77BC3ED293E528A005F2B08 /* NCConfigServer.swift in Sources */, - 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */, + 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */, F7A560422AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift in Sources */, F7D1C4AC2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift in Sources */, F7D368DF2DAFE19E0037E7C6 /* NCActivityNavigationController.swift in Sources */, @@ -5283,14 +5352,14 @@ F73EF7AF2B0224350087E6E9 /* NCManageDatabase+DirectEditing.swift in Sources */, D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, - 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, - F7CBC31C24F78E79004D3812 /* NCSortMenu.swift in Sources */, - 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */, - 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */, + 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, + F7CBC31C24F78E79004D3812 /* (null) in Sources */, + 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */, + 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, - 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */, + 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */, F7725A60251F33BB00D125E0 /* NCFiles.swift in Sources */, F704B5E52430AA8000632F5F /* NCCreateFormUploadConflict.swift in Sources */, F7865FF12F39D32F00D09AE4 /* NCCollectionViewCommon+Search.swift in Sources */, @@ -5298,7 +5367,7 @@ F76687072B7D067400779E3F /* NCAudioRecorderViewController.swift in Sources */, AA8E03DA2D2ED83300E7E89C /* TransientShare.swift in Sources */, F7A03E2F2D425A14007AA677 /* NCFavoriteNavigationController.swift in Sources */, - 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */, + 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */, F343A4BB2A1E734600DDA874 /* Optional+Extension.swift in Sources */, F76882232C0DD1E7001CF441 /* NCCapabilitiesModel.swift in Sources */, F3DDFE212F1F953000A784C8 /* NCAssistantChatConversations.swift in Sources */, @@ -5328,8 +5397,6 @@ F78B87E72B62527100C65ADC /* NCMediaDataSource.swift in Sources */, F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */, F7864ACC2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, - 566FCF482B3EB4E800168DEA /* RequiredDataCollectionSwitch.swift in Sources */, - F7F4F11027ECDC4A008676F9 /* UIDevice+Extension.swift in Sources */, F7327E302B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, F3DDFE1E2F1F8EC600A784C8 /* ChatInputField.swift in Sources */, F74B91E52F51D4170050813D /* InfoBannerView.swift in Sources */, @@ -6679,14 +6746,30 @@ minimumVersion = 1.1.4; }; }; - 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/moengage/MoEngage-iOS-SDK.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 9.18.1; - }; - }; + 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Tealium/tealium-swift.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.0.0; + }; + }; + 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/adjust/ios_sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.29.5; + }; + }; + 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/moengage/MoEngage-iOS-SDK.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 9.18.1; + }; + }; F33EE6DF2BF4BDA500CA1A51 /* XCRemoteSwiftPackageReference "swift-nio-ssl" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-nio-ssl"; @@ -6695,22 +6778,6 @@ minimumVersion = 2.26.0; }; }; - 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Tealium/tealium-swift.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; - 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/adjust/ios_sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.29.5; - }; - }; F33EE6EE2BF4C0FF00CA1A51 /* XCRemoteSwiftPackageReference "swift-nio" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-nio.git"; @@ -6915,51 +6982,43 @@ package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; productName = HeapModule; }; - 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */ = { - isa = XCSwiftPackageProductDependency; - package = 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */; - productName = "MoEngage-iOS-SDK"; - }; - 56AB28962B8351720089D373 /* TealiumAutotracking */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumAutotracking; - }; - 56AB28982B8351720089D373 /* TealiumCore */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumCore; - }; - 56AB289A2B8351720089D373 /* TealiumLifecycle */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumLifecycle; - }; - 56AB289C2B8351730089D373 /* TealiumLocation */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumLocation; - }; - 56AB289E2B8351730089D373 /* TealiumRemoteCommands */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumRemoteCommands; - }; - 56AB28A02B8351730089D373 /* TealiumTagManagement */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumTagManagement; - }; - 56AB28A22B8351740089D373 /* TealiumVisitorService */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28952B8350F20089D373 /* XCRemoteSwiftPackageReference "tealium-swift" */; - productName = TealiumVisitorService; - }; - 56AB28932B833E2D0089D373 /* Adjust */ = { - isa = XCSwiftPackageProductDependency; - package = 56AB28922B833DEA0089D373 /* XCRemoteSwiftPackageReference "ios_sdk" */; - productName = Adjust; - }; + 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */ = { + isa = XCSwiftPackageProductDependency; + package = 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */; + productName = "MoEngage-iOS-SDK"; + }; + 56AB28932B833E2D0089D373 /* Adjust */ = { + isa = XCSwiftPackageProductDependency; + productName = Adjust; + }; + 56AB28962B8351720089D373 /* TealiumAutotracking */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumAutotracking; + }; + 56AB28982B8351720089D373 /* TealiumCore */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumCore; + }; + 56AB289A2B8351720089D373 /* TealiumLifecycle */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumLifecycle; + }; + 56AB289C2B8351730089D373 /* TealiumLocation */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumLocation; + }; + 56AB289E2B8351730089D373 /* TealiumRemoteCommands */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumRemoteCommands; + }; + 56AB28A02B8351730089D373 /* TealiumTagManagement */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumTagManagement; + }; + 56AB28A22B8351740089D373 /* TealiumVisitorService */ = { + isa = XCSwiftPackageProductDependency; + productName = TealiumVisitorService; + }; F3391B072B4C52C5001C0C4B /* FirebaseDatabase */ = { isa = XCSwiftPackageProductDependency; package = F70B86732642CE3B00ED5349 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; diff --git a/Tests/NextcloudUnitTests/AssetUploadTest.swift b/Tests/NextcloudUnitTests/AssetUploadTest.swift new file mode 100644 index 0000000000..72f541042b --- /dev/null +++ b/Tests/NextcloudUnitTests/AssetUploadTest.swift @@ -0,0 +1,36 @@ +// +// AssetUploadTest.swift +// NextcloudTests +// +// Created by A200020526 on 12/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import XCTest + +final class AssetUploadTest: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Tests/NextcloudUnitTests/AudioUploadTests.swift b/Tests/NextcloudUnitTests/AudioUploadTests.swift new file mode 100644 index 0000000000..2ea01a8085 --- /dev/null +++ b/Tests/NextcloudUnitTests/AudioUploadTests.swift @@ -0,0 +1,52 @@ +// +// AudioUploadTests.swift +// NextcloudTests +// +// Created by A200020526 on 13/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import XCTest +@testable import Nextcloud + +final class AudioUploadTests: XCTestCase { + var viewController:NCAudioRecorderViewController? + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + // Step 1. Create an instance of UIStoryboard + let viewController = UIStoryboard(name: "NCAudioRecorderViewController", bundle: nil).instantiateInitialViewController() as? NCAudioRecorderViewController + // Step 3. Make the viewDidLoad() execute. + viewController?.loadViewIfNeeded() + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + viewController = nil + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + + func testAudioMeterUpdateAfterDb(){ + viewController?.audioMeterDidUpdate(0.5) + XCTAssertNotNil(!(viewController?.durationLabel.text?.isEmpty ?? false)) + } + + func testStartRecorder(){ + viewController?.startStop() + XCTAssertEqual(viewController?.recording.state, nil, "Test start audio recorder") + } +} diff --git a/Tests/NextcloudUnitTests/CollaboraTestCase.swift b/Tests/NextcloudUnitTests/CollaboraTestCase.swift new file mode 100644 index 0000000000..51b3ecce1f --- /dev/null +++ b/Tests/NextcloudUnitTests/CollaboraTestCase.swift @@ -0,0 +1,142 @@ +// +// CollaboraTestCase.swift +// NextcloudTests +// +// Created by A200073704 on 06/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit + +class CollaboraTestCase: XCTestCase { + + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testCollaboraDocumentIsPresent() { + + var viewForDocument: NCMenuAction? + + if let image = UIImage(named: "create_file_document") { + viewForDocument = NCMenuAction(title: NSLocalizedString("_create_new_document_", comment: ""), icon: image, action: { _ in + guard let navigationController = UIStoryboard(name: "NCCreateFormUploadDocuments", bundle: nil).instantiateInitialViewController() as? UINavigationController else { + return + } + + let viewController = navigationController.topViewController as? NCCreateFormUploadDocuments + viewController?.titleForm = NSLocalizedString("_create_new_document_", comment: "") + }) + } + + XCTAssertNotNil(viewForDocument) + + } + + func testCollaboraPresentationIsPresent() { + + var viewForPresentation: NCMenuAction? + + if let image = UIImage(named: "create_file_ppt") { + viewForPresentation = NCMenuAction(title: NSLocalizedString("_create_new_presentation_", comment: ""), icon: image, action: { _ in + guard let navigationController = UIStoryboard(name: "NCCreateFormUploadDocuments", bundle: nil).instantiateInitialViewController() as? UINavigationController else { + return + } + + let viewController = navigationController.topViewController as? NCCreateFormUploadDocuments + viewController?.titleForm = NSLocalizedString("_create_new_presentation_", comment: "") + }) + } + + XCTAssertNotNil(viewForPresentation) + + } + + func testCollaboraSpreadsheetIsPresent() { + + var viewForSpreadsheet: NCMenuAction? + + if let image = UIImage(named: "create_file_xls") { + viewForSpreadsheet = NCMenuAction(title: NSLocalizedString("_create_new_spreadsheet_", comment: ""), icon: image, action: { _ in + guard let navigationController = UIStoryboard(name: "NCCreateFormUploadDocuments", bundle: nil).instantiateInitialViewController() as? UINavigationController else { + return + } + + let viewController = navigationController.topViewController as? NCCreateFormUploadDocuments + viewController?.titleForm = NSLocalizedString("_create_new_spreadsheet_", comment: "") + }) + } + + XCTAssertNotNil(viewForSpreadsheet) + + } + + func testTextDocumentIsPresent() { + + var textMenu: NCMenuAction? + + if let image = UIImage(named: "file_txt_menu") { + textMenu = NCMenuAction(title: NSLocalizedString("_create_nextcloudtext_document_", comment: ""), icon: image, action: { _ in + guard let navigationController = UIStoryboard(name: "NCCreateFormUploadDocuments", bundle: nil).instantiateInitialViewController() as? UINavigationController else { + return + } + + let viewController = navigationController.topViewController as? NCCreateFormUploadDocuments + viewController?.titleForm = NSLocalizedString("_create_nextcloudtext_document_", comment: "") + }) + } + + XCTAssertNotNil(textMenu) + + } + + func testTextDocumentAction() { + + let text = NCGlobal.shared.actionTextDocument + XCTAssertNotNil(text, "Text Editor Should be opened") + } + + func testTextFieldIsPresent() { + + let storyboard = UIStoryboard(name: "NCCreateFormUploadDocuments", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCCreateFormUploadDocuments else { + return + } + + // Verify that a text field is present in the view controller + let textFields = viewController.view.subviews.filter { $0 is UITextField } + XCTAssertFalse(textFields.isEmpty, "No text field found in NCCreateFormUploadDocuments") + } + + func testSavePathFolder() { + + let viewController = NCCreateFormUploadDocuments() + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var row : XLFormRowDescriptor + + // the section with the title "Folder Destination" + + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: "") + row.action.formSelector = #selector(viewController.changeDestinationFolder(_:)) + + // Verify that section was found + XCTAssertNotNil(row, "Expected save path section to exist in form.") + + } + + + + + + +} diff --git a/Tests/NextcloudUnitTests/E2EETests.swift b/Tests/NextcloudUnitTests/E2EETests.swift new file mode 100644 index 0000000000..bee1c1aa3f --- /dev/null +++ b/Tests/NextcloudUnitTests/E2EETests.swift @@ -0,0 +1,90 @@ +// +// E2EETests.swift +// NextcloudTests +// +// Created by A200020526 on 26/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import TOPasscodeViewController + +final class E2EETests: XCTestCase { + + var manageE2EE: NCManageE2EE! + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + manageE2EE = NCManageE2EE() + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + manageE2EE = nil + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + + // MARK: - Initialization + + func testInitialization() { + XCTAssertTrue(manageE2EE.endToEndInitialize.delegate === manageE2EE) + XCTAssertFalse(manageE2EE.isEndToEndEnabled) + XCTAssertEqual(manageE2EE.statusOfService, NSLocalizedString("_status_in_progress_", comment: "")) + } + + // MARK: - Delegate + + func testEndToEndInitializeSuccess() { + manageE2EE.endToEndInitializeSuccess() + XCTAssertTrue(manageE2EE.isEndToEndEnabled) + } + + // MARK: - Passcode + + func testRequestPasscodeType() { + // TODO: Implement this test case + } + + func testCorrectPasscode_startE2E() { + manageE2EE.passcodeType = "startE2E" + manageE2EE.correctPasscode() + // TODO: Add assertions for the expected behavior after entering the correct passcode for starting E2E + } + + func testCorrectPasscode_readPassphrase() { + manageE2EE.passcodeType = "readPassphrase" + // TODO: Simulate entering the correct passcode and verify the expected behavior + } + + func testCorrectPasscode_removeLocallyEncryption() { + manageE2EE.passcodeType = "removeLocallyEncryption" + // TODO: Simulate entering the correct passcode and verify the expected behavior + } + + func testDidPerformBiometricValidationRequest() { + let passcodeViewController = TOPasscodeViewController(passcodeType: .sixDigits, allowCancel: true) + manageE2EE.didPerformBiometricValidationRequest(in: passcodeViewController) + // TODO: Add assertions for the expected behavior after performing biometric validation + } + + func testDidTapCancel() { + let passcodeViewController = TOPasscodeViewController(passcodeType: .sixDigits, allowCancel: true) + manageE2EE.didTapCancel(in: passcodeViewController) + // TODO: Add assertions for the expected behavior after tapping cancel + } +} diff --git a/Tests/NextcloudUnitTests/MoreTests.swift b/Tests/NextcloudUnitTests/MoreTests.swift new file mode 100644 index 0000000000..0a96912994 --- /dev/null +++ b/Tests/NextcloudUnitTests/MoreTests.swift @@ -0,0 +1,37 @@ +// +// MoreTests.swift +// NextcloudTests +// +// Created by A200020526 on 09/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest + +final class MoreTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Tests/NextcloudUnitTests/MoveAndCopyTests.swift b/Tests/NextcloudUnitTests/MoveAndCopyTests.swift new file mode 100644 index 0000000000..bd674a472f --- /dev/null +++ b/Tests/NextcloudUnitTests/MoveAndCopyTests.swift @@ -0,0 +1,106 @@ +// +// MoveAndCopyTests.swift +// NextcloudTests +// +// Created by A200073704 on 05/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit + + + class MoveAndCopyTests: XCTestCase { + + var view : NCSelectCommandView? + var viewController : NCSelect? + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + let storyboard = UIStoryboard(name: "NCSelect", bundle: nil) + if let navigationController = storyboard.instantiateInitialViewController() as? UINavigationController { + let viewController = navigationController.topViewController as? NCSelect + + let _ = viewController?.view + viewController?.loadViewIfNeeded() + } + view = NCSelectCommandView() + + } + + override func setUp() { + super.setUp() + let nib = Bundle.main.loadNibNamed("NCSelectCommandViewCopyMove", owner: nil, options: nil) + view = nib?.first as? NCSelectCommandView + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + + viewController = nil + view = nil + + } + + func testCreateFolderButton() { + + let image: Void? = view?.createFolderButton?.setImage(UIImage(named: "addFolder")?.withTintColor(UIColor.label), for: .normal) + + XCTAssertNotNil(image) + } + + func testOverwriteSwitch() { + + let mySwitch = view?.overwriteSwitch + + XCTAssertNotNil(mySwitch) + + } + + func testCopyButton() { + + let copy = view?.copyButton + + XCTAssertNotNil(copy) + } + + + func testOverwriteSwitchAlwaysOn() { + + XCTAssertTrue(view?.overwriteSwitch?.isOn ?? false, "Overwrite Switch should always be on") + } + + func testCopyButtonandMoveButtonCondition() { + + // Disable copy and move + view?.copyButton?.isEnabled = false + view?.moveButton?.isEnabled = false + + // Creating a test item + let item = tableMetadata() + item.serverUrl = "serverUrl" // Set the serverUrl property of the item + + let items: [tableMetadata] = [item] + + // Update the items in the view controller + viewController?.items = items + + // Verify that the copy and move buttons are still disabled + XCTAssertFalse(view?.copyButton?.isEnabled ?? true, "Copy Button should remain disabled when items.first matches the condition") + XCTAssertFalse(view?.moveButton?.isEnabled ?? true, "Move Button should remain disabled when items.first matches the condition") + + // Enable copy and move + view?.copyButton?.isEnabled = true + view?.moveButton?.isEnabled = true + + // Update the items in the view controller + viewController?.items = [] // Empty items + + // Verify that the copyButton is still enabled + XCTAssertTrue(view?.copyButton?.isEnabled ?? false, "Copy Button should remain enabled when items.first doesn't match the condition") + XCTAssertTrue(view?.moveButton?.isEnabled ?? false, "Move Button should remain enabled when items.first doesn't match the condition") + } + +} diff --git a/Tests/NextcloudUnitTests/NCNotificationText.swift b/Tests/NextcloudUnitTests/NCNotificationText.swift new file mode 100644 index 0000000000..1a7e0b2345 --- /dev/null +++ b/Tests/NextcloudUnitTests/NCNotificationText.swift @@ -0,0 +1,85 @@ +// +// NCNotificationText.swift +// NextcloudUnitTests +// +// Created by Amrut Waghmare on 18/10/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit + +class NCNotificationText: XCTestCase { + var viewController : NCNotification! + + override func setUpWithError() throws { + // Step 1. Create an instance of UIStoryboard + let storyboard = UIStoryboard(name: "NCNotification", bundle: nil) + // Step 2. Instantiate UIViewController with Storyboard ID + viewController = storyboard.instantiateViewController(withIdentifier: "NCNotification.storyboard") as? NCNotification + + // Step 3. Make the viewDidLoad() execute. + viewController.loadViewIfNeeded() + } + + override func tearDownWithError() throws { + viewController = nil + } + + //Test that a cell with the correct reuse identifier is dequeued + func testTableViewCellDequeue() { + let notification = NKNotifications() + viewController.notifications = [notification] + let tableView = UITableView() + tableView.register(NCNotificationCell.self, forCellReuseIdentifier: "Cell") + let indexPath = IndexPath(row: 0, section: 0) + let cell = viewController.tableView(tableView, cellForRowAt: indexPath) as? NCNotificationCell + XCTAssertNotNil(cell) + XCTAssertEqual(cell?.reuseIdentifier, "Cell") + } + + //Test that the cell's icon is set image + func testTableViewCellIcon() { + let notification = NKNotifications() + viewController.notifications = [notification] + let tableView = UITableView() + tableView.register(NCNotificationCell.self, forCellReuseIdentifier: "Cell") + let indexPath = IndexPath(row: 0, section: 0) + let cell = viewController.tableView(tableView, cellForRowAt: indexPath) as? NCNotificationCell + XCTAssertNotNil(cell?.icon.image) + } + + //Test that the cell's primary and secondary buttons are set up correctly + func testTableViewCellButtons() { + let notification = NKNotifications() + notification.actions = Data("[{\"label\":\"OK\",\"primary\":true},{\"label\":\"Cancel\",\"primary\":false}]".utf8) + viewController.notifications = [notification] + let tableView = UITableView() + tableView.register(NCNotificationCell.self, forCellReuseIdentifier: "Cell") + let indexPath = IndexPath(row: 0, section: 0) + let cell = viewController.tableView(tableView, cellForRowAt: indexPath) as? NCNotificationCell + XCTAssertEqual(cell?.primary.title(for: .normal), "OK") + XCTAssertEqual(cell?.secondary.title(for: .normal), "Cancel") + } + + //Test that the cell's date label is set correctly + func testTableViewCellDate() { + let notification = NKNotifications() + notification.date = NSDate() + viewController.notifications = [notification] + let tableView = UITableView() + tableView.register(NCNotificationCell.self, forCellReuseIdentifier: "Cell") + let indexPath = IndexPath(row: 0, section: 0) + let cell = viewController.tableView(tableView, cellForRowAt: indexPath) as? NCNotificationCell + XCTAssertEqual(cell?.date.text, "less than a minute ago") + } + + //Test with a color that is image not nil + func testImageNotNil() { + let color = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0) + let image = UIImage().imageColor(color) + XCTAssertNotNil(image, "Image should not be nil.") + + } +} diff --git a/Tests/NextcloudUnitTests/OnboardingTestCase.swift b/Tests/NextcloudUnitTests/OnboardingTestCase.swift new file mode 100644 index 0000000000..161b3a9258 --- /dev/null +++ b/Tests/NextcloudUnitTests/OnboardingTestCase.swift @@ -0,0 +1,158 @@ +// +// OnboardingTestCase.swift +// NextcloudTests +// +// Created by A200073704 on 21/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit + + class OnboardingTestCase: XCTestCase { + + var viewController = NCIntroViewController() + + + var images:[UIImage?] = [] + let imagesLandscape = [UIImage(named: "introSlideLand1"), UIImage(named: "introSlideLand2"), UIImage(named: "introSlideLand3")] + let imagesPortrait = [UIImage(named: "introSlide1"), UIImage(named: "introSlide2"), UIImage(named: "introSlide3")] + let imagesEightPortrait = [UIImage(named: "introSlideEight1"), UIImage(named: "introSlideEight2"), UIImage(named: "introSlideEight3")] + + + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + + func testValidImage() { + + // onscreen images should not be nill + let image = [UIImage(named: "introSlideLand1"), UIImage(named: "introSlideLand2"), UIImage(named: "introSlideLand3")] + XCTAssertNotNil(image, "Image should not be nil") + + } + + func testImageDimensionsLandscape() { + + // testing height and width of the image + let introCollectionView = UIImage(named: "introSlideLand1") + XCTAssertEqual(introCollectionView?.size.width, 390, "Image width should be 390") + XCTAssertEqual(introCollectionView?.size.height, 844.3333333333334, "Image height should be 844.3333333333334") + } + + func testImageDimensionsPortrait() { + + // testing height and width of the image + let introCollectionView = UIImage(named: "introSlide1") + + XCTAssertEqual(introCollectionView?.size.width, 390, "Image width should be 390") + XCTAssertEqual(introCollectionView?.size.height, 844.3333333333334, "Image height should be 844.3333333333334") + } + + + func testImageDimentionsNotEqual() { + + // testing width and height if not equal + let introCollectionView = UIImage(named: "introSlide2") + + XCTAssertNotEqual(introCollectionView?.size.width, 100, "Image width should be 390") + XCTAssertNotEqual(introCollectionView?.size.height, 820, "Image height should be 844.3333333333334") + + } + + + func testImageContentMode() { + + // imageview content mode should be scaleAspectFill + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = UIImage(named: "introSlideLand2") + XCTAssertEqual(imageView.contentMode, .scaleAspectFill, "Image content mode should be scaleAspectFill") + + } + + + // Background color of view should be customer + func testBackgroundcolor() { + + let backgroundColor = NCBrandColor.shared.customer + XCTAssertNotNil(backgroundColor, "NCBrandColor.shared.customer should not be nil") + + } + + + // Button login text color shouyld be white + func testButtonLoginTextColor() { + + let textColor: UIColor = .white + viewController.buttonLogin?.backgroundColor = textColor + + XCTAssertEqual(textColor, textColor) + + } + + // images at loginscreen should not be empty + func testImagesNotEmpty() { + + let isEightPlusDevice = UIScreen.main.bounds.height == 736 + images = UIDevice.current.orientation.isLandscape ? imagesLandscape : (isEightPlusDevice ? imagesEightPortrait : imagesPortrait) + + XCTAssertFalse(images.isEmpty) + } + + + // Status bar and navigation bar color should not be blue color + func testStatueBarColorNotEqualToCustomer() { + + + let view = NCLoginWeb() + var color = view.navigationController?.navigationBar.backgroundColor + let navigationBarColor: UIColor = NCBrandColor.shared.customer + color = .systemBlue + + XCTAssertNotEqual(navigationBarColor, color) + + } + + //NavigationBar and status Bar color should be equal + func testNavigationBarColorEqualToCustomer() { + + let statusBarColor = NCBrandColor.shared.customer + let navigationBarColor: UIColor = NCBrandColor.shared.customer + + XCTAssertEqual(navigationBarColor, statusBarColor) + } + + func testEightPlusDeviceHeight() { + + let eightPlusDevice = UIScreen.main.bounds.height >= 736 + + XCTAssertTrue(eightPlusDevice) + + } + + func testLoginButtonTapped() { + + let viewController = NCIntroViewController() + + let loginButton = UIButton() + loginButton.addTarget(nil, action: #selector(viewController.login(_:)), for: .touchUpInside) + loginButton.sendActions(for: .touchUpInside) + + viewController.login(loginButton) + + XCTAssertNotNil(loginButton) + } + + + + +} diff --git a/Tests/NextcloudUnitTests/PrivacyPolicyTest.swift b/Tests/NextcloudUnitTests/PrivacyPolicyTest.swift new file mode 100644 index 0000000000..f6265f48e7 --- /dev/null +++ b/Tests/NextcloudUnitTests/PrivacyPolicyTest.swift @@ -0,0 +1,154 @@ +// +// PrivacyPolicyTest.swift +// NextcloudTests +// +// Created by A200073704 on 27/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit +import XLForm + + + class PrivacyPolicyTest: XCTestCase { + + var viewController: InitialPrivacySettingsViewController? + var privacySettingsView = PrivacySettingsViewController() + + override func setUpWithError() throws { + + // To Create an instance of UIStoryboard + let storyboard = UIStoryboard(name: "NCSettings", bundle: nil) + + // To Instantiate UIViewController with Storyboard ID + viewController = storyboard.instantiateViewController(withIdentifier: "privacyPolicyViewController") as? InitialPrivacySettingsViewController + + // Outlets are connected + let _ = viewController?.view + + // Make the viewDidLoad() execute. + viewController?.loadViewIfNeeded() + + } + + override func tearDownWithError() throws { + viewController = nil + } + + func testPrivacyPolicyViewControllerIsOpen() { + + // Check that the InitialPrivacyPolicyViewController gets opened + let storyboard = UIStoryboard(name: "NCSettings", bundle: nil) + if let privacyPolicyViewController = storyboard.instantiateViewController(withIdentifier: "privacyPolicyViewController") as? InitialPrivacySettingsViewController { + let navigationController = UINavigationController(rootViewController: privacyPolicyViewController) + + privacyPolicyViewController.loadViewIfNeeded() + + XCTAssertTrue(navigationController.topViewController is InitialPrivacySettingsViewController, "Privacy policy view controller should be open") + } + } + + func testTextViewHasCorrectText() { + + //Check that the text displayed is correct + let expectedText = NSLocalizedString("_privacy_help_text_after_login_", comment: "") + viewController?.privacySettingsHelpText?.text = expectedText + + let actualText = viewController?.privacySettingsHelpText?.text + XCTAssertEqual(actualText, expectedText, "The text view does not have the expected text") + } + + func testHasAcceptButton() { + + // Check that view has the accept button + let acceptButton = viewController?.acceptButton + + XCTAssertNotNil(acceptButton, "View controller does not have an accept button") + + } + + func testSettingsLinkTypeNavigatesToPrivacySettingsViewController() { + + // Simulate tapping the "Settings" link type + let linkType = LinkType.settings + + UserDefaults.standard.set(true, forKey: "showSettingsButton") + viewController?.privacySettingsHelpText.hyperLink(originalText: viewController?.privacyHelpText ?? "", linkTextsAndTypes: [NSLocalizedString("_key_settings_help_", comment: ""): linkType.rawValue]) + + // Check that the correct view controller was pushed onto the navigation stack + XCTAssertNotNil(viewController?.navigationController?.visibleViewController is PrivacySettingsViewController) + } + + func testPrivacyPolicyLinkType_NavigatesToPrivacyPolicyViewController() { + + // Simulate tapping the "Privacy Policy" link type + let linkType = LinkType.privacyPolicy + + viewController?.privacySettingsHelpText.hyperLink(originalText: viewController?.privacyHelpText ?? "", linkTextsAndTypes: [NSLocalizedString("_key_privacy_help_", comment: ""): linkType.rawValue]) + + // Check that the correct view controller was pushed onto the navigation + XCTAssertNotNil(viewController?.navigationController?.visibleViewController is PrivacyPolicyViewController) + } + + func testCorrectImagePresentOnInitialPrivacySettingsViewController() { + + // Check that the image view has the correct image + let expectedImage = UIImage(named: "dataPrivacy") + XCTAssertNotNil(expectedImage) + } + + func testAcceptButtonHasBackgroundColor() { + + // Check that the accept button has the correct background color + let expectedColor = NCBrandColor.shared.brand + XCTAssertEqual(viewController?.acceptButton.backgroundColor, expectedColor) + + } + + func testShowSaveSettingsButton() { + + privacySettingsView.isShowSettingsButton = UserDefaults.standard.bool(forKey: "showSettingsButton") + + XCTAssertTrue(privacySettingsView.isShowSettingsButton) + + } + + func testRequiredDataCollectionSectionExists() { + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + // the section with the title "Required Data Collection" + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "RequiredDataCollectionCustomCellType", title: "") + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.footerTitle = NSLocalizedString("_required_data_collection_help_text_", comment: "") + + // Verify that section was found + XCTAssertNotNil(row, "Expected 'Required Data Collection' section to exist in form.") + } + + func testAnalysisDataCollectionSection() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + // row with tag "AnalysisDataCollectionSwitch" + row = XLFormRowDescriptor(tag: "AnalysisDataCollectionSwitch", rowType: "AnalysisDataCollectionCustomCellType", title: "") + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.footerTitle = NSLocalizedString("_analysis_data_acqusition_help_text_", comment: "") + + // Assert that the row exists + XCTAssertNotNil(row, "Expected row with tag 'AnalysisDataCollectionSwitch' to exist in form.") + + // Verify the switch is off + XCTAssertFalse(UserDefaults.standard.bool(forKey: "isAnalysisDataCollectionSwitchOn"), "Expected isAnalysisDataCollectionSwitchOn to be false.") + } + + +} diff --git a/Tests/NextcloudUnitTests/RenameFileTests.swift b/Tests/NextcloudUnitTests/RenameFileTests.swift new file mode 100644 index 0000000000..c0aa06f029 --- /dev/null +++ b/Tests/NextcloudUnitTests/RenameFileTests.swift @@ -0,0 +1,108 @@ +// +// RenameFileTests.swift +// NextcloudTests +// +// Created by A200073704 on 14/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit + +class RenameFileTests: XCTestCase { + + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + + func testStoryboardPresence() { + + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + XCTAssertNotNil(storyboard, "Storyboard 'NCRenameFile' should be present") + + } + + func testRenameButtonPresence() { + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCRenameFile else { + XCTFail("Failed to instantiate view controller from storyboard") + return + } + + _ = viewController.view // Load the view + + let renameButton = viewController.renameButton + XCTAssertNotNil(renameButton, "Rename button should be present") + } + + func testRenameButtonBackgroundColor() { + + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCRenameFile else { + XCTFail("Failed to instantiate view controller from storyboard") + return + } + + _ = viewController.view // Load the view + + let color = NCBrandColor.shared.brand.cgColor + let renameButton = viewController.renameButton.layer.backgroundColor + + XCTAssertEqual(renameButton,color, "Rename Button Bcakground Color should be brand") + } + + func testCancelButtonPresence() { + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCRenameFile else { + XCTFail("Failed to instantiate view controller from storyboard") + return + } + + _ = viewController.view // Load the view + + let cancelButton = viewController.cancelButton + XCTAssertNotNil(cancelButton, "Cancel button should be present") + } + + func testImageViewPresence() { + + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCRenameFile else { + XCTFail("Failed to instantiate view controller from storyboard") + return + } + + _ = viewController.view // Load the view + + let imageView = viewController.previewFile + XCTAssertNotNil(imageView, "UIImageView should be present on the storyboard") + } + + func testTextFiledPresence() { + + let storyboard = UIStoryboard(name: "NCRenameFile", bundle: nil) + guard let viewController = storyboard.instantiateInitialViewController() as? NCRenameFile else { + XCTFail("Failed to instantiate view controller from storyboard") + return + } + + _ = viewController.view // Load the view + + let textField = viewController.fileNameNoExtension + let textFieldExt = viewController.ext + + XCTAssertNotNil(textField, "FileNameNoExtention TextFiled should be present on the storyboard") + XCTAssertNotNil(textFieldExt, "Extension TextFiled should be present on the storyboard") + + } + + + +} diff --git a/Tests/NextcloudUnitTests/ScanTests.swift b/Tests/NextcloudUnitTests/ScanTests.swift new file mode 100644 index 0000000000..750fc86d01 --- /dev/null +++ b/Tests/NextcloudUnitTests/ScanTests.swift @@ -0,0 +1,111 @@ +// +// ScanTests.swift +// NextcloudTests +// +// Created by A200020526 on 18/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import XLForm + +final class ScanTests: XCTestCase { + + var viewController: NCCreateFormUploadScanDocument? + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + viewController = NCCreateFormUploadScanDocument() + } + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + viewController = nil + } + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + public func testImageColor() { + // Create a test color + let testColor = UIColor.red + // Create a test image + let testImage = UIImage(named: "activityTypeInfo") // Replace "your_image_name" with the name of your test image + // Call the imageColor function with the test color + let resultImage = testImage?.imageColor(testColor) + // Assert that the result image is not nil + XCTAssertNotNil(resultImage, "Result image should not be nil") + // Assert that the result image has the same size as the test image + XCTAssertEqual(resultImage?.size, testImage?.size, "Result image should have the same size as the test image") + } + func testIsAtleastOneFiletypeSelected() { + // Set up the initial switch states + viewController?.isPDFWithOCRSwitchOn = false + viewController?.isPDFWithoutOCRSwitchOn = false + viewController?.isTextFileSwitchOn = false + viewController?.isPNGFormatSwitchOn = false + viewController?.isJPGFormatSwitchOn = false + + // Call the function under test + let result1 = viewController?.isAtleastOneFiletypeSelected() ?? false + + // Assert the initial result + XCTAssertFalse(result1, "None of the file types are selected initially") + + // Update switch states + viewController?.isPDFWithOCRSwitchOn = true + + // Call the function under test again + let result2 = viewController?.isAtleastOneFiletypeSelected() ?? false + + // Assert the updated result + XCTAssertTrue(result2, "At least one file type is selected") + } + + func testBestFittingFont() { + // Set up the initial values + let text = "Hello, World!" + let bounds = CGRect(x: 0, y: 0, width: 200, height: 100) + let fontDescriptor = UIFontDescriptor(name: "Helvetica", size: 20) + let fontColor = UIColor.black + + // Call the function under test + let attributes = viewController?.bestFittingFont(for: text, in: bounds, fontDescriptor: fontDescriptor, fontColor: fontColor) + + // Assert the results + XCTAssertNotNil(attributes?[NSAttributedString.Key.font], "Font attribute should not be nil") + XCTAssertNotNil(attributes?[NSAttributedString.Key.foregroundColor], "Font color attribute should not be nil") + XCTAssertNotNil(attributes?[NSAttributedString.Key.kern], "Kern attribute should not be nil") + + XCTAssertEqual(attributes?[NSAttributedString.Key.foregroundColor] as? UIColor, fontColor, "Font color should match the input value") + + let font = attributes?[NSAttributedString.Key.font] as? UIFont + XCTAssertNotNil(font, "Font should not be nil") + XCTAssertEqual(font?.fontName, fontDescriptor.fontAttributes[.name] as? String, "Font name should match the input value") + } + + func testChangeCompressionImage() { + // Set up the initial values + guard let image = UIImage(named: "activityTypeInfo") else { + return + } + + // Call the function under test + let compressedImage = viewController?.changeCompressionImage(image) + + // Assert the results + XCTAssertNotNil(compressedImage, "Compressed image should not be nil") + if let width = compressedImage?.size.width, let height = compressedImage?.size.height { + XCTAssertTrue(width <= 841.8, "Compressed image width should be less than or equal to the base width") + XCTAssertTrue(height <= 595.2, "Compressed image height should be less than or equal to the base height") + } + } +} diff --git a/Tests/NextcloudUnitTests/SettingsTestCases.swift b/Tests/NextcloudUnitTests/SettingsTestCases.swift new file mode 100644 index 0000000000..4b16db93f3 --- /dev/null +++ b/Tests/NextcloudUnitTests/SettingsTestCases.swift @@ -0,0 +1,341 @@ +// +// SettingsTestCases.swift +// NextcloudTests +// +// Created by A200073704 on 12/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +@testable import Nextcloud +import XCTest +import NextcloudKit +import XLForm + + class SettingsTestCases: XCTestCase { + + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + // MARK: - Settings + + func testAutoUploadSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + let image = UIImage(named: "autoUpload") + row = XLFormRowDescriptor(tag: "autoUpload", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_settings_autoupload_", comment: "")); + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.addFormRow(row) + + XCTAssertNotNil(image) + // Verify that section was found + XCTAssertNotNil(row, "Expected 'Auto Upload' section to exist in form.") + + + } + + func testLockSectionIsPresent() { + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + let image = UIImage(named: "lock_open") + row = XLFormRowDescriptor(tag: "bloccopasscode", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_lock_not_active_", comment: "")); + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.addFormRow(row) + + XCTAssertNotNil(image) + + XCTAssertNotNil(row, "Expected 'Lock Active / Off ' section exists") + + + } + + func testEnableTouchIDSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + row = XLFormRowDescriptor(tag: "enableTouchDaceID", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_enable_touch_face_id_", comment: "")); + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Enable/Disable touch ID' is present") + + } + + func testEndToEndEncryptionSectionIsPresent() { + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + row = XLFormRowDescriptor(tag: "e2eEncryption", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_e2e_settings_", comment: "")); + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'End to End encryption' section exists") + + + } + + func testAdvancedSectionIsPresent() { + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + row = XLFormRowDescriptor(tag: "advanced", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_e2e_settings_", comment: "")); + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.addFormRow(row) + + XCTAssertNotNil(row, " Expected 'Advanced' Section exists") + } + + + + func testNavigatesToOpenSourceViewController() { + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "buttonLeftAligned", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_used_opensource_software_", comment: "")) + section.addFormRow(row) + + // Create a view controller with the form and add it to a navigation controller + let viewController = OpenSourceSoftwareViewController() + let window = UIApplication.shared.windows.first { $0.isKeyWindow } + let navigationController = UINavigationController(rootViewController: viewController) + window?.rootViewController = navigationController + + viewController.loadViewIfNeeded() + let indexPath = IndexPath(row: 0, section: 0) + print("Calling didSelectRowAt for row at \(indexPath)") + + // Verify that the OpenSourceSoftwareViewController class is opened + XCTAssertTrue(navigationController.topViewController is OpenSourceSoftwareViewController) + + } + + func testHelpSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "buttonLeftAligned", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_help_", comment: "")) + section.addFormRow(row) + + // Create a view controller with the form and add it to a navigation controller + let viewController = HelpViewController() + let window = UIApplication.shared.windows.first { $0.isKeyWindow } + let navigationController = UINavigationController(rootViewController: viewController) + window?.rootViewController = navigationController + + viewController.loadViewIfNeeded() + let indexPath = IndexPath(row: 0, section: 0) + print("Calling didSelectRowAt for row at \(indexPath)") + + // Verify that the HelpViewController class is opened + XCTAssertTrue(navigationController.topViewController is HelpViewController) + + XCTAssertNotNil(row, "Expected 'Help' Section is present") + + } + + func testImprintSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "buttonLeftAligned", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_imprint_", comment: "")) + section.addFormRow(row) + + // Create a view controller with the form and add it to a navigation controller + let viewController = ImprintViewController() + let window = UIApplication.shared.windows.first { $0.isKeyWindow } + let navigationController = UINavigationController(rootViewController: viewController) + window?.rootViewController = navigationController + + viewController.loadViewIfNeeded() + let indexPath = IndexPath(row: 0, section: 0) + print("Calling didSelectRowAt for row at \(indexPath)") + + // Verify that the ImprintViewController class is opened + XCTAssertTrue(navigationController.topViewController is ImprintViewController) + + XCTAssertNotNil(row, "Expected 'Imprint' Section is present") + } + + func testMagentaCloudVersionSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "disablefilesapp", rowType: "kNMCCustomCellType", title: NSLocalizedString("_magentacloud_version_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'MagentaCloud Version' is present") + + + } + + // MARK: - Advanced + + func testShowHiddenFilesSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "showHiddenFiles", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_show_hidden_files_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Show hidden files' section is present") + + } + + func testMostCompatibleSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "formatCompatibility", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_format_compatibility_", comment: "")) + row.value = "1" + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Most Compatible' is present") + } + + func testLivePhotoSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "livePhoto", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_upload_mov_livephoto_", comment: "")) + if CCUtility.getLivePhoto() { + row.value = "1" + } else { + row.value = "0" + } + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Live Photo' section is present") + + } + + func testImageResolutionSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "automaticDownloadImage", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_automatic_Download_Image_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Use images in full resolution' section is present") + } + + func testAppIntegrationSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "disablefilesapp", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_disable_files_app_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Disable Files App Integration' section is present") + } + + func testDeleteFilesSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let row = XLFormRowDescriptor(tag: "deleteoldfiles", rowType: XLFormRowDescriptorTypeSelectorPush, title: NSLocalizedString("_delete_old_files_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(row, "Expected 'Delete all files older than..' section is present") + } + + func testClearCacheSectionIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let image = UIImage(named: "trash") + + let row = XLFormRowDescriptor(tag: "azzeracache", rowType:XLFormRowDescriptorTypeButton, title: NSLocalizedString("_clear_cache_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(image) + + XCTAssertNotNil(row, "Expected 'Clear Cache' section is present") + + } + + func testLogoutButtonIsPresent() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + let section = XLFormSectionDescriptor.formSection() + form.addFormSection(section) + + let image = UIImage(named: "xmark") + + let row = XLFormRowDescriptor(tag: "esci", rowType: XLFormRowDescriptorTypeButton, title: NSLocalizedString("_exit_", comment: "")) + section.addFormRow(row) + + XCTAssertNotNil(image) + + XCTAssertNotNil(row, "Expected 'Logout' Button is present") + + + } + + + + + + + + + + + +} diff --git a/Tests/NextcloudUnitTests/SharingTest.swift b/Tests/NextcloudUnitTests/SharingTest.swift new file mode 100644 index 0000000000..66d94dbfbb --- /dev/null +++ b/Tests/NextcloudUnitTests/SharingTest.swift @@ -0,0 +1,232 @@ +// +// SharingTest.swift +// NextcloudTests +// +// Created by A200020526 on 07/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import XCTest +@testable import Nextcloud +final class SharingTest: XCTestCase { + + var button: UIButton? + var ncShare: NCShare? + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + super.setUp() + button = UIButton() + ncShare = NCShare() + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + button = nil + ncShare = nil + super.tearDown() + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + + + //Date exntesion test case + func testTomorrow() { + let tomorrow = Date.tomorrow + let expectedTomorrow = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + XCTAssertEqual(tomorrow.extendedIso8601String, expectedTomorrow.extendedIso8601String, "Tomorrow date should be correct.") + } + func testToday() { + let today = Date.today + let currentDate = Date() + XCTAssertEqual(today.extendedIso8601String, currentDate.extendedIso8601String, "Today date should be correct.") + } + + func testDayAfter() { + let date = Date() + let dayAfter = date.dayAfter + let expectedDayAfter = Calendar.current.date(byAdding: .day, value: 1, to: date)! + XCTAssertEqual(dayAfter.extendedIso8601String, expectedDayAfter.extendedIso8601String, "Day after date should be correct.") + } + + //Date Formatter extension Test Case + func testShareExpDate() { + let dateFormatter = DateFormatter.shareExpDate + + XCTAssertEqual(dateFormatter.formatterBehavior, .behavior10_4, "Formatter behavior should be correct.") + XCTAssertEqual(dateFormatter.dateStyle, .medium, "Date style should be correct.") + XCTAssertEqual(dateFormatter.dateFormat, NCShareAdvancePermission.displayDateFormat, "Date format should be correct.") + } + + //Button Extension test case + func testSetBackgroundColor() { + // Arrange + let color = UIColor.red + let state: UIControl.State = .normal + + // Act + button?.setBackgroundColor(color, for: state) + + // Assert + XCTAssertNotNil(button?.currentBackgroundImage, "Button background image not nil") + } + + func testSetBackgroundColorForDifferentStates() { + // Arrange + + let selectedColor = UIColor.green + + // Act + button?.isSelected = true + button?.setBackgroundColor(selectedColor, for: .selected) + + // Assert + XCTAssertNotNil(button?.currentBackgroundImage, "Button background image not nil") + button?.isSelected = false + XCTAssertNil(button?.currentBackgroundImage,"Button background image will be nil") + button?.isHighlighted = true + XCTAssertNil(button?.currentBackgroundImage, "Button background image will be nil") + } + + //UIView extension shadow test case + func testAddShadowWithLocation() { + // Create a UIView instance + let view = UIView() + + // Set the shadow with bottom location + view.addShadow(location: .bottom, height: 2, color: .red, opacity: 0.4, radius: 2) + + // Verify that the shadow offset is set correctly for the bottom location + let bottomShadowOffset = view.layer.shadowOffset + XCTAssertEqual(bottomShadowOffset, CGSize(width: 0, height: 2), "Shadow offset not set correctly for bottom location") + + // Verify that the shadow color is set correctly + let shadowColor = view.layer.shadowColor + XCTAssertEqual(shadowColor, UIColor.red.cgColor, "Shadow color not set correctly") + + // Verify that the shadow opacity is set correctly + let shadowOpacity = view.layer.shadowOpacity + XCTAssertEqual(shadowOpacity, 0.4, "Shadow opacity not set correctly") + + // Verify that the shadow radius is set correctly + let shadowRadius = view.layer.shadowRadius + XCTAssertEqual(shadowRadius, 2.0, "Shadow radius not set correctly") + } + + func testAddShadowWithOffset() { + // Create a UIView instance + let view = UIView() + + // Set the shadow with a custom offset + view.addShadow(offset: CGSize(width: 0, height: -4), color: .blue, opacity: 0.6, radius: 3) + + // Verify that the shadow offset is set correctly + let shadowOffset = view.layer.shadowOffset + XCTAssertEqual(shadowOffset, CGSize(width: 0, height: -4), "Shadow offset not set correctly") + + // Verify that the shadow color is set correctly + let shadowColor = view.layer.shadowColor + XCTAssertEqual(shadowColor, UIColor.blue.cgColor, "Shadow color not set correctly") + + // Verify that the shadow opacity is set correctly + let shadowOpacity = view.layer.shadowOpacity + XCTAssertEqual(shadowOpacity, 0.6, "Shadow opacity not set correctly") + + // Verify that the shadow radius is set correctly + let shadowRadius = view.layer.shadowRadius + XCTAssertEqual(shadowRadius, 3.0, "Shadow radius not set correctly") + } + + func testAddShadowForLocation() { + // Create a UIView instance + let view = UIView() + + // Add shadow to the bottom + view.addShadow(location: .bottom, color: UIColor.black) + + // Verify that the shadow properties are set correctly for the bottom location + XCTAssertEqual(view.layer.shadowOffset, CGSize(width: 0, height: 2), "Shadow offset not set correctly for bottom location") + XCTAssertEqual(view.layer.shadowColor, UIColor.black.cgColor, "Shadow color not set correctly for bottom location") + XCTAssertEqual(view.layer.shadowOpacity, 0.4, "Shadow opacity not set correctly for bottom location") + XCTAssertEqual(view.layer.shadowRadius, 2.0, "Shadow radius not set correctly for bottom location") + + // Add shadow to the top + view.addShadow(location: .top) + + // Verify that the shadow properties are set correctly for the top location + XCTAssertEqual(view.layer.shadowOffset, CGSize(width: 0, height: -2), "Shadow offset not set correctly for top location") + XCTAssertEqual(view.layer.shadowColor, NCBrandColor.shared.customerDarkGrey.cgColor, "Shadow color not set correctly for top location") + XCTAssertEqual(view.layer.shadowOpacity, 0.4, "Shadow opacity not set correctly for top location") + XCTAssertEqual(view.layer.shadowRadius, 2.0, "Shadow radius not set correctly for top location") + } + + func testAddShadowForOffset() { + // Create a UIView instance + let view = UIView() + + // Add shadow with custom offset + view.addShadow(offset: CGSize(width: 2, height: 2)) + + // Verify that the shadow properties are set correctly for the custom offset + XCTAssertEqual(view.layer.shadowOffset, CGSize(width: 2, height: 2), "Shadow offset not set correctly for custom offset") + XCTAssertEqual(view.layer.shadowColor, UIColor.black.cgColor, "Shadow color not set correctly for custom offset") + XCTAssertEqual(view.layer.shadowOpacity, 0.5, "Shadow opacity not set correctly for custom offset") + XCTAssertEqual(view.layer.shadowRadius, 5.0, "Shadow radius not set correctly for custom offset") + } + + + func testHasUploadPermission() { + // Create an instance of NCShare + let share = NCShare() + + // Define the input parameters + let tableShareWithUploadPermission = tableShare() + tableShareWithUploadPermission.permissions = NCGlobal.shared.permissionMaxFileShare + + let tableShareWithoutUploadPermission = tableShare() + tableShareWithoutUploadPermission.permissions = NCGlobal.shared.permissionReadShare + + // Call the hasUploadPermission function + let hasUploadPermission1 = share.hasUploadPermission(tableShare: tableShareWithUploadPermission) + let hasUploadPermission2 = share.hasUploadPermission(tableShare: tableShareWithoutUploadPermission) + + // Verify the results + XCTAssertTrue(hasUploadPermission1, "hasUploadPermission returned false for a tableShare with upload permission") + XCTAssertFalse(hasUploadPermission2, "hasUploadPermission returned true for a tableShare without upload permission") + } + + func testGetImageShareType() { + let sut = NCShareCommon() // Replace with the actual class containing the getImageShareType function + + // Test case 1: SHARE_TYPE_USER + let shareType1 = sut.SHARE_TYPE_USER + let result1 = sut.getImageShareType(shareType: shareType1) + XCTAssertEqual(result1, UIImage(named: "shareTypeEmail")?.imageColor(NCBrandColor.shared.label)) + + // Test case 2: SHARE_TYPE_GROUP + let shareType2 = sut.SHARE_TYPE_GROUP + let result2 = sut.getImageShareType(shareType: shareType2) + XCTAssertEqual(result2, UIImage(named: "shareTypeGroup")?.imageColor(NCBrandColor.shared.label)) + + // Test case 3: SHARE_TYPE_LINK + let shareType3 = sut.SHARE_TYPE_LINK + let result3 = sut.getImageShareType(shareType: shareType3) + XCTAssertEqual(result3, UIImage(named: "shareTypeLink")?.imageColor(NCBrandColor.shared.label)) + + // Test case 4: SHARE_TYPE_EMAIL (with isDropDown=false) + let shareType4 = sut.SHARE_TYPE_EMAIL + let result4 = sut.getImageShareType(shareType: shareType4) + XCTAssertEqual(result4, UIImage(named: "shareTypeUser")?.imageColor(NCBrandColor.shared.label)) + + // Test case 5: SHARE_TYPE_EMAIL (with isDropDown=true) + let shareType5 = sut.SHARE_TYPE_EMAIL + let isDropDown5 = true + let result5 = sut.getImageShareType(shareType: shareType5, isDropDown: isDropDown5) + XCTAssertEqual(result5, UIImage(named: "email")?.imageColor(NCBrandColor.shared.label)) + } +} diff --git a/iOSClient/Analytics/AnalyticsHelper.swift b/iOSClient/Analytics/AnalyticsHelper.swift new file mode 100644 index 0000000000..ef86eb7cf0 --- /dev/null +++ b/iOSClient/Analytics/AnalyticsHelper.swift @@ -0,0 +1,85 @@ +// +// AnalyticsHelper.swift +// Nextcloud +// +// Created by Amrut Waghmare on 10/06/24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// + +import Foundation + +class AnalyticsHelper: NSObject, AnalyticsService { + + @objc static let shared = AnalyticsHelper() + + private var analyticsServices: [AnalyticsService] + + private override init() { + // Initialize the analytics services + let moEngageAnalytics = MoEngageAnalytics() + moEngageAnalytics.trackAppId() + analyticsServices = [moEngageAnalytics] + super.init() + } + + func trackEvent(eventName: AnalyticEvents, properties: [String: Any]? = nil) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackEvent(eventName: eventName, properties: properties) } + } + } + + func trackUserData() { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackUserData() } + } + } + + func trackUsedStorageData(quotaUsed: Int64) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackUsedStorageData(quotaUsed: quotaUsed) } + } + } + + @objc func trackAutoUpload(isEnable: Bool) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackAutoUpload(isEnable: isEnable) } + } + } + + func trackAppVersion(oldVersion: String?) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackAppVersion(oldVersion: oldVersion) } + } + } + + func trackLogout() { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackLogout() } + } + } + + func trackCreateFile(metadata: tableMetadata) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackCreateFile(metadata: metadata) } + } + } + + func trackEventWithMetadata(eventName: AnalyticEvents, metadata: tableMetadata) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackEventWithMetadata(eventName: eventName, metadata: metadata) } + } + } + + func trackCreateVoiceMemo(size: Int64, date: Date) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackCreateVoiceMemo(size: size, date: date) } + } + } + + func trackCreateFolder(isEncrypted: Bool, creationDate: Date) { + DispatchQueue.global(qos: .background).async { + self.analyticsServices.forEach { $0.trackCreateFolder(isEncrypted: isEncrypted, creationDate: creationDate) } + } + } + +} diff --git a/iOSClient/Analytics/AnalyticsService.swift b/iOSClient/Analytics/AnalyticsService.swift new file mode 100644 index 0000000000..8c57108ba4 --- /dev/null +++ b/iOSClient/Analytics/AnalyticsService.swift @@ -0,0 +1,97 @@ +// +// AnalyticsService.swift +// Nextcloud +// +// Created by Amrut Waghmare on 10/06/24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// + +import Foundation + +protocol AnalyticsService { + func trackEvent(eventName: AnalyticEvents, properties: [String: Any]?) + func trackUserData() + func trackUsedStorageData(quotaUsed: Int64) + func trackAutoUpload(isEnable: Bool) + func trackAppVersion(oldVersion: String?) + func trackLogout() + func trackCreateFile(metadata: tableMetadata) + func trackCreateVoiceMemo(size: Int64, date: Date) + func trackCreateFolder(isEncrypted: Bool, creationDate: Date) + func trackEventWithMetadata(eventName: AnalyticEvents, metadata: tableMetadata) +} + +// swiftlint:disable identifier_name +enum AnalyticEvents: String { + case USER_PROPERTIES_STORAGE_CAPACITY = "storage_capacity" // in GB + case USER_PROPERTIES_STORAGE_USED = "storage_used" // % of storage used + case USER_PROPERTIES_AUTO_UPLOAD = "auto_upload_on" + case USER_PROPERTIES_APP_VERSION = "app_version" + case EVENT__ACTION_BUTTON = "action_button_clicked" // when user clicks on fab + button + case EVENT__UPLOAD_FILE = "upload_file" // when user uploads any file (not applicable for folder) from other apps + case EVENT__CREATE_FILE = "create_file" // when user creates any file in app + case EVENT__CREATE_FOLDER = "create_folder" + case EVENT__CREATE_VOICE_MEMO = "create_voice_memo" + case EVENT__ADD_FAVORITE = "add_favorite" + case EVENT__SHARE_FILE = "share_file" // when user share any file using link + case EVENT__OFFLINE_AVAILABLE = "offline_available" + case EVENT__ONLINE_OFFICE_USED = "online_office_used" // when user opens any office files + + // screen view events when user open specific screen + case SCREEN_EVENT__FAVOURITES = "favorites" + case SCREEN_EVENT__MEDIA = "medien" + case SCREEN_EVENT__OFFLINE_FILES = "offline_files" + case SCREEN_EVENT__SHARED = "shared" + case SCREEN_EVENT__DELETED_FILES = "deleted_files" + case SCREEN_EVENT__NOTIFICATIONS = "notifications" + + var moEngageEvent: String { + switch self { + default: + return self.rawValue + } + } + + var teliumEvent: String { + return self.rawValue + } + + var adjustEvent: String { + return self.rawValue + } +} + +// swiftlint:disable identifier_name +enum AnalyticPropertyAttributes: String { + // properties attributes key + case PROPERTIES__FILE_TYPE = "file_type" + case PROPERTIES__FOLDER_TYPE = "folder_type" + case PROPERTIES__FILE_SIZE = "file_size" // in MB + case PROPERTIES__CREATION_DATE = "creation_date" // yyyy-MM-dd + case PROPERTIES__UPLOAD_DATE = "upload_date" // // yyyy-MM-dd +} + +enum FolderType: String { + // properties attributes key + case FOLDER_ENCRYPTED = "encrypted" + case FOLDER_NORMAL = "not encrypted" +} + + +enum Size { + static let KILOBYTE = 1024 + static let MEGABYTE = KILOBYTE * 1024 + static let GIGABYTE = MEGABYTE * 1024 +} + +enum FileType: String { + case FOTO = "foto" + case AUDIO = "audio" + case VIDEO = "video" + case PDF = "pdf" + case TEXT = "text" + case DOCX = "docx" + case XLSX = "xlsx" + case PPT = "ppt" + case OTHER = "other" +} diff --git a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift new file mode 100644 index 0000000000..29b4a9ecbc --- /dev/null +++ b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift @@ -0,0 +1,181 @@ +// +// MoEngageAnalytics.swift +// Nextcloud +// +// Created by Amrut Waghmare on 10/06/24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// + +import Foundation +import MoEngageSDK + +class MoEngageAnalytics { + + // Initializer for the MoEngageAnalytics class + init() { + // Create a configuration object for MoEngage SDK with the given App ID and Data Center + let sdkConfig = MoEngageSDKConfig(appId: "7KWWUKA6OKXGP8Q6DMCXLDX5", dataCenter: MoEngageDataCenter.data_center_02) + + // Disable periodic flushing of analytics data + sdkConfig.analyticsDisablePeriodicFlush = true + + // Initialize the MoEngage SDK + // Use different initialization methods for Debug and Production environments + +#if DEBUG + MoEngage.sharedInstance.initializeDefaultTestInstance(sdkConfig) +#else + MoEngage.sharedInstance.initializeDefaultLiveInstance(sdkConfig) +#endif + } + + // Method to track the App ID + func trackAppId() { + MoEngageSDKAnalytics.sharedInstance.trackLocale(forAppID: "312838242") + } +} + +// AnalyticsService protocol +extension MoEngageAnalytics: AnalyticsService { + // Method to track a specific event with optional properties + func trackEvent(eventName: AnalyticEvents, properties: [String: Any]?) { + let eventProperties = MoEngageProperties(withAttributes: properties) + MoEngageSDKAnalytics.sharedInstance.trackEvent(eventName.moEngageEvent, withProperties: eventProperties) + } + + // Method to track user data + func trackUserData() { + // Get the active user account from the database + guard let user = NCManageDatabase.shared.getActiveTableAccount() else { return } + + // Set user attributes in the MoEngage SDK + MoEngageSDKAnalytics.sharedInstance.setUniqueID(user.userId) + MoEngageSDKAnalytics.sharedInstance.setName(user.displayName) + MoEngageSDKAnalytics.sharedInstance.setEmailID(user.email) + + // Convert the user's total storage quota to a readable format and set it as a user attribute + let storageCapacity = NCUtilityFileSystem().transformedSize(user.quotaTotal) + MoEngageSDKAnalytics.sharedInstance.setUserAttribute(storageCapacity, withAttributeName: AnalyticEvents.USER_PROPERTIES_STORAGE_CAPACITY.rawValue) + + // Track whether auto-upload is enabled for the user + trackAutoUpload(isEnable: user.autoUpload) + } + + // Method to track the used storage data + func trackUsedStorageData(quotaUsed: Int64) { + MoEngageSDKAnalytics.sharedInstance.setUserAttribute(quotaUsed, withAttributeName: AnalyticEvents.USER_PROPERTIES_STORAGE_USED.rawValue) + } + + // Method to track the auto-upload setting + func trackAutoUpload(isEnable: Bool) { + if isEnable { + MoEngageSDKAnalytics.sharedInstance.setUserAttribute(isEnable, withAttributeName: AnalyticEvents.USER_PROPERTIES_AUTO_UPLOAD.rawValue) + } + } + + // Method to track the app version + func trackAppVersion(oldVersion: String?) { + // Get the app version and set it as a user attribute + let version = NCUtility().getVersionApp() as String + + // Check if a build version key is present in UserDefaults + if let oldVersion { + if version != oldVersion { + MoEngageSDKAnalytics.sharedInstance.appStatus(.update) + if let oldAppVersion = Int(oldVersion.dropLast().replacingOccurrences(of: ".", with: "")) { + if oldAppVersion < NCGlobal.shared.moEngageAppVersion { + trackUserData() + } + } + } + } else { + MoEngageSDKAnalytics.sharedInstance.appStatus(.install) + } + + MoEngageSDKAnalytics.sharedInstance.setUserAttribute(version, withAttributeName: AnalyticEvents.USER_PROPERTIES_APP_VERSION.rawValue) + } + + //Method to track user logout + func trackLogout() { + MoEngageSDKAnalytics.sharedInstance.resetUser() + } + + //Method to track create file + func trackCreateFile(metadata: tableMetadata) { + let properties = MoEngageProperties() + properties.addAttribute(getFileType(contentType: metadata.contentType), withName: AnalyticPropertyAttributes.PROPERTIES__FILE_TYPE.rawValue) + properties.addAttribute(String(getFileSizeInMB(bytes: Int(metadata.size))), withName: AnalyticPropertyAttributes.PROPERTIES__FILE_SIZE.rawValue) + properties.addAttribute(getDate(date: metadata.creationDate as Date), withName: AnalyticPropertyAttributes.PROPERTIES__CREATION_DATE.rawValue) + MoEngageSDKAnalytics.sharedInstance.trackEvent(AnalyticEvents.EVENT__CREATE_FILE.rawValue, withProperties: properties) + } + + //Method to track upload file + func trackEventWithMetadata(eventName: AnalyticEvents, metadata: tableMetadata) { + let properties = MoEngageProperties() + properties.addAttribute(getFileType(contentType: metadata.contentType), withName: AnalyticPropertyAttributes.PROPERTIES__FILE_TYPE.rawValue) + properties.addAttribute(String(getFileSizeInMB(bytes: Int(metadata.size))), withName: AnalyticPropertyAttributes.PROPERTIES__FILE_SIZE.rawValue) + properties.addAttribute(getDate(date: metadata.creationDate as Date), withName: AnalyticPropertyAttributes.PROPERTIES__CREATION_DATE.rawValue) + properties.addAttribute(getDate(date: metadata.uploadDate as Date), withName: AnalyticPropertyAttributes.PROPERTIES__UPLOAD_DATE.rawValue) + MoEngageSDKAnalytics.sharedInstance.trackEvent(eventName.rawValue, withProperties: properties) + } + + //Method to track create folder + func trackCreateFolder(isEncrypted: Bool, creationDate: Date) { + let properties = MoEngageProperties() + properties.addAttribute(isEncrypted ? FolderType.FOLDER_ENCRYPTED.rawValue : FolderType.FOLDER_NORMAL.rawValue , withName: AnalyticPropertyAttributes.PROPERTIES__FILE_TYPE.rawValue) + properties.addAttribute(getDate(date: creationDate), withName: AnalyticPropertyAttributes.PROPERTIES__CREATION_DATE.rawValue) + MoEngageSDKAnalytics.sharedInstance.trackEvent(AnalyticEvents.EVENT__CREATE_FOLDER.rawValue, withProperties: properties) + } + + //Method to track create voice memo + func trackCreateVoiceMemo(size: Int64, date: Date) { + let properties = MoEngageProperties() + properties.addAttribute(FileType.AUDIO.rawValue, withName: AnalyticPropertyAttributes.PROPERTIES__FILE_TYPE.rawValue) + properties.addAttribute(String(getFileSizeInMB(bytes: Int(size))), withName: AnalyticPropertyAttributes.PROPERTIES__FILE_SIZE.rawValue) + properties.addAttribute(getDate(date: date), withName: AnalyticPropertyAttributes.PROPERTIES__CREATION_DATE.rawValue) + MoEngageSDKAnalytics.sharedInstance.trackEvent(AnalyticEvents.EVENT__CREATE_VOICE_MEMO.rawValue, withProperties: properties) + } + + +} + +// Functions +extension MoEngageAnalytics { + private func getFileType(contentType: String) -> String? { + switch contentType { + case "image/png": + return FileType.FOTO.rawValue + case "audio/x-m4a", "audio/mp4": + return FileType.AUDIO.rawValue + case "video/mp4": + return FileType.VIDEO.rawValue + case "application/pdf": + return FileType.PDF.rawValue + case "text/x-markdown","text/plain": + return FileType.TEXT.rawValue + case "application/vnd.openxmlformats-officedocument.wordprocessingml.document": + return FileType.DOCX.rawValue + case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","text/csv": + return FileType.XLSX.rawValue + case "application/vnd.openxmlformats-officedocument.presentationml.presentation": + return FileType.PPT.rawValue + default: + return FileType.OTHER.rawValue + } + } + + private func getDate(date: Date) -> String { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + return dateFormatter.string(from: date) + } + + private func getFileSizeInMB(bytes: Int) -> Float { + return round((Float(bytes) / Float(Size.MEGABYTE)) * 10) / 10 + } + +} + +// SCAN("scan"), + + diff --git a/iOSClient/AppUpdate/AppUpdater.swift b/iOSClient/AppUpdate/AppUpdater.swift new file mode 100644 index 0000000000..631490a28b --- /dev/null +++ b/iOSClient/AppUpdate/AppUpdater.swift @@ -0,0 +1,94 @@ +// +// AppUpdater.swift +// Nextcloud +// +// Created by Amrut Waghmare on 09/10/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation +import FirebaseRemoteConfig + +struct AppUpdaterKey { + static let lastUpdateCheckDate : String = "lastUpdateCheckDate" +} + +class AppUpdater { + func checkForUpdate() { + checkUpdate{ (version, isForceupdate) in + DispatchQueue.main.async { + if let version = version, let isForceupdate = isForceupdate { + if (isForceupdate) { + self.showUpdateAlert(version: version, isForceUpdate: isForceupdate) + } else { + if self.checkLastUpdate() { + self.showUpdateAlert(version: version, isForceUpdate: isForceupdate) + } + } + } + } + } + } + + func showUpdateAlert(version: String, isForceUpdate: Bool){ + guard let appDelegate = UIApplication.shared.delegate as? AppDelegate, let viewControlller = appDelegate.window?.rootViewController else { return } + let descriptionMsg = String(format: NSLocalizedString("update_description", comment: ""), version) + let alert = UIAlertController(title: NSLocalizedString("update_available", comment: ""), message: descriptionMsg, preferredStyle: .alert) + let updateAction = UIAlertAction(title: NSLocalizedString("update", comment: ""), style: .default, handler: { action in + guard let url = URL(string: NCBrandOptions.shared.appStoreUrl) else { return } + UIApplication.shared.open(url) + }) + alert.addAction(updateAction) + if !isForceUpdate { + alert.addAction(UIAlertAction(title: NSLocalizedString("not_now", comment: ""), style: .default, handler: { action in + self.saveAppUpdateCheckDate() + })) + } + alert.preferredAction = updateAction + viewControlller.present(alert, animated: true, completion: {}) + } + + func checkLastUpdate() -> Bool { + if let lastUpdateCheckDate = UserDefaults.standard.object(forKey: AppUpdaterKey.lastUpdateCheckDate) as? Date { + return daysBetweenDate(from: lastUpdateCheckDate) > 7 + } else { + return true + } + } + + func checkUpdate(completion: @escaping (String?, Bool?) -> Void) { + let remoteConfig = RemoteConfig.remoteConfig() + remoteConfig.fetch(withExpirationDuration: 1) { (status, error) in + if status == .success { + remoteConfig.activate { value, error in + // Remote config values fetched successfully + let iOSVersionString = remoteConfig["ios_app_version"].stringValue ?? "default_value" + let isForcheUpdate = remoteConfig["ios_force_update"].boolValue + if let currentVersionString = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String, + let currentVersion = Int(currentVersionString.replacingOccurrences(of: ".", with: "")), + let iOSVersion = Int(iOSVersionString.replacingOccurrences(of: ".", with: "")) { +// if let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { + if iOSVersion != currentVersion { + // There is an update available + completion(iOSVersionString,isForcheUpdate) + } else { + completion(nil, nil) + } + } + } + } else { + // Handle error + print("Error fetching remote config: \(error?.localizedDescription ?? "Unknown error")") + completion(nil, nil) + } + } + } + + func saveAppUpdateCheckDate() { + UserDefaults.standard.setValue(Date(), forKey: AppUpdaterKey.lastUpdateCheckDate) + } + + func daysBetweenDate(from date: Date) -> Int { + return Calendar.current.dateComponents([.day], from: date, to: Date()).day ?? 0 + } +} diff --git a/iOSClient/AppUtility.swift b/iOSClient/AppUtility.swift new file mode 100644 index 0000000000..bb7c625e53 --- /dev/null +++ b/iOSClient/AppUtility.swift @@ -0,0 +1,21 @@ +// +// AppUtility.swift +// Nextcloud +// +// Created by Amrut Waghmare on 17/10/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation +struct AppUtility { + static func lockOrientation(_ orientation: UIInterfaceOrientationMask) { + if let delegate = UIApplication.shared.delegate as? AppDelegate { + delegate.orientationLock = orientation + } + } + + static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) { + self.lockOrientation(orientation) + UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation") + } +} diff --git a/iOSClient/EmptyView/NCEmptyDataSet.swift b/iOSClient/EmptyView/NCEmptyDataSet.swift new file mode 100644 index 0000000000..389a11d651 --- /dev/null +++ b/iOSClient/EmptyView/NCEmptyDataSet.swift @@ -0,0 +1,129 @@ +// +// NCEmptyDataSet.swift +// Nextcloud +// +// Created by Marino Faggiana on 19/10/2020. +// Copyright © 2020 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit + +public protocol NCEmptyDataSetDelegate: AnyObject { + func emptyDataSetView(_ view: NCEmptyView) +} + +// optional func +public extension NCEmptyDataSetDelegate { + func emptyDataSetView(_ view: NCEmptyView) {} +} + +class NCEmptyDataSet: NSObject { + + private var emptyView: NCEmptyView? + private var timer: Timer? + private var numberItemsForSections: Int = 0 + private weak var delegate: NCEmptyDataSetDelegate? + + private var fillBackgroundName: String = "" + private var fillBackgroundView = UIImageView() + + private var centerXAnchor: NSLayoutConstraint? + private var centerYAnchor: NSLayoutConstraint? + + init(view: UIView, offset: CGFloat = 0, delegate: NCEmptyDataSetDelegate?) { + super.init() + + guard let emptyView = NCEmptyView.fromNib().instantiate(withOwner: self, options: nil).first as? NCEmptyView else { return } + + self.delegate = delegate + self.emptyView = emptyView + + emptyView.isHidden = true + emptyView.translatesAutoresizingMaskIntoConstraints = false + + view.addSubview(emptyView) + + emptyView.widthAnchor.constraint(equalToConstant: 350).isActive = true + emptyView.heightAnchor.constraint(equalToConstant: 250).isActive = true + + if let view = view.superview { + centerXAnchor = emptyView.centerXAnchor.constraint(equalTo: view.centerXAnchor) + centerYAnchor = emptyView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: offset) + } else { + centerXAnchor = emptyView.centerXAnchor.constraint(equalTo: view.centerXAnchor) + centerYAnchor = emptyView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: offset) + } + + centerXAnchor?.isActive = true + centerYAnchor?.isActive = true + + } + + func setOffset(_ offset: CGFloat) { + + centerYAnchor?.constant = offset + } + + func numberOfItemsInSection(_ num: Int, section: Int) { + + if section == 0 { + numberItemsForSections = num + } else { + numberItemsForSections += num + } + + if let emptyView = emptyView { + + self.delegate?.emptyDataSetView(emptyView) + + if !(timer?.isValid ?? false) && emptyView.isHidden == true { + timer = Timer.scheduledTimer(timeInterval: 0.3, target: self, selector: #selector(timerHandler(_:)), userInfo: nil, repeats: false) + } + + if numberItemsForSections > 0 { + self.emptyView?.isHidden = true + } + } + } + + @objc func timerHandler(_ timer: Timer) { + + if numberItemsForSections == 0 { + self.emptyView?.isHidden = false + } else { + self.emptyView?.isHidden = true + } + } +} + +public class NCEmptyView: UIView { + + @IBOutlet weak var emptyImage: UIImageView! + @IBOutlet weak var emptyTitle: UILabel! + @IBOutlet weak var emptyDescription: UILabel! + + static func fromNib() -> UINib { + return UINib(nibName: "NCEmptyView", bundle: nil) + } + + public override func awakeFromNib() { + super.awakeFromNib() + + emptyTitle.textColor = .label + } +} diff --git a/iOSClient/EmptyView/NCEmptyView.xib b/iOSClient/EmptyView/NCEmptyView.xib new file mode 100644 index 0000000000..0b5ebbe133 --- /dev/null +++ b/iOSClient/EmptyView/NCEmptyView.xib @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Helper/AdjustHelper.h b/iOSClient/Helper/AdjustHelper.h new file mode 100644 index 0000000000..3323a8fab0 --- /dev/null +++ b/iOSClient/Helper/AdjustHelper.h @@ -0,0 +1,47 @@ +// +// AdjustHelper.h +// Nextcloud +// +// Created by A200073704 on 17/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef enum : NSUInteger { + Login, + LoginSuccessful, + Sharing, + CreateLink, + DocumentScan, + CameraUpload, + FileUpload, + UseCamera, + Logout, + ResetsApp, + AutomaticUploadPhotosOn, + AutomaticUploadPhotosOff, + ManualBackup, + AutomaticBackup +} TriggerEvent; + +@interface AdjustHelper : NSObject + +@property (nonatomic, strong) NSString *yourAppToken; +@property (nonatomic, strong) NSString *environment; +@property (nonatomic, strong) ADJConfig *adjustConfig; +@property (nonatomic, strong) ADJEvent *eventLogin; +@property (nonatomic, strong) ADJEvent *event; +@property (nonatomic, assign) TriggerEvent triggerEvent; + +-(void)configAdjust; +-(void)subsessionEnd; +-(void)subsessionStart; +-(void)trackLogin; +-(void)trackEvent:(TriggerEvent)event; + +@end + +NS_ASSUME_NONNULL_END diff --git a/iOSClient/Helper/AdjustHelper.m b/iOSClient/Helper/AdjustHelper.m new file mode 100644 index 0000000000..7ff8ad7aee --- /dev/null +++ b/iOSClient/Helper/AdjustHelper.m @@ -0,0 +1,153 @@ +// +// AdjustHelper.m +// Nextcloud +// +// Created by A200073704 on 17/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +#import "AdjustHelper.h" +//#import + +@implementation AdjustHelper + +-(void)configAdjust { + self.yourAppToken = @"1zfaxn19pd7k"; + self.environment = ADJEnvironmentProduction; + self.adjustConfig = [ADJConfig configWithAppToken:self.yourAppToken + environment:self.environment]; + [self.adjustConfig setLogLevel:ADJLogLevelVerbose]; + [Adjust appDidLaunch:self.adjustConfig]; +} + +-(void)subsessionEnd { + [Adjust trackSubsessionEnd]; +} + +-(void)subsessionStart { + [Adjust trackSubsessionStart]; +} + +- (void)trackLogin { + self.eventLogin = [ADJEvent eventWithEventToken:@"p8hl78"]; + [Adjust trackEvent: self.eventLogin]; +} + +-(void)trackEvent:(TriggerEvent)event { +// self.event = [ADJEvent eventWithEventToken:@"gb97gb"]; + BOOL track = [[NSUserDefaults standardUserDefaults] valueForKey:@"isAnalysisDataCollectionSwitchOn"]; + if (!track) { + return; + } + + switch(event){ + case Login: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"p8hl78"]; +// event = [ADJEvent eventWithEventToken:@"gb97gb"]; +// self.event = [ADJEvent eventWithEventToken:@"gb97gb"]; + [Adjust trackEvent:event]; + } + break; + case LoginSuccessful: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"dowf81"]; + // event = [ADJEvent eventWithEventToken:@"gb97gb"]; + // self.event = [ADJEvent eventWithEventToken:@"gb97gb"]; + [Adjust trackEvent:event]; + } + break; + case Sharing: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"mbeoyd"]; + [Adjust trackEvent:event]; + NSLog(@"%@", [event debugDescription]); + } +// self.event = [ADJEvent eventWithEventToken:@"fqtiu7"]; + break; + case CreateLink: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"29b333"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"qeyql3"]; + break; + case DocumentScan: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"im963g"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"7fec8n"]; + break; + case CameraUpload: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"hf9paq"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"v1g6ly"]; + break; + case FileUpload: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"hsbk2m"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"4rd8r4"]; + break; + case UseCamera: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"3czack"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"3czack"]; + break; + case Logout: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"n5q2qu"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"g6mj9y"]; + break; + case ResetsApp: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"3sj1xp"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"zi18r0"]; + break; + case AutomaticUploadPhotosOn: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"5lxz6h"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"vwd9yk"]; + break; + case AutomaticUploadPhotosOff: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"176496"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"e95w5t"]; + break; + case ManualBackup: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"oojr4y"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"oojr4y"]; + break; + case AutomaticBackup: + { + ADJEvent *event = [ADJEvent eventWithEventToken:@"7dkhkx"]; + [Adjust trackEvent:event]; + } +// self.event = [ADJEvent eventWithEventToken:@"7dkhkx"]; + break; + + default : + break; + } +// [Adjust trackEvent: self.event]; +} + +@end + diff --git a/iOSClient/Helper/TealiumHelper.swift b/iOSClient/Helper/TealiumHelper.swift new file mode 100644 index 0000000000..9680da8e0a --- /dev/null +++ b/iOSClient/Helper/TealiumHelper.swift @@ -0,0 +1,56 @@ +// +// TealiumHelper.swift +// Nextcloud +// +// Created by A200073704 on 17/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// +import TealiumCore +import TealiumLifecycle +import TealiumAutotracking +import TealiumLocation +import TealiumRemoteCommands +import TealiumTagManagement +import TealiumVisitorService +import Foundation + +class TealiumHelper: NSObject { + static let shared = TealiumHelper() + let config = TealiumConfig(account: "telekom", + profile: "magentacloud-app", + environment: "dev") + var tealium: Tealium? + + @objc override init() { + + config.batchingEnabled = true + config.logLevel = .debug + + config.collectors = [Collectors.Lifecycle, + Collectors.Location, + Collectors.VisitorService] + + config.dispatchers = [Dispatchers.TagManagement, + Dispatchers.RemoteCommands] + + tealium = Tealium(config: config, enableCompletion: {value in + print(value) + } + ) + } + + func start() { + _ = TealiumHelper.shared + } + + @objc func trackView(title: String, data: [String: Any]?) { + let tealView = TealiumView(title, dataLayer: data) + TealiumHelper.shared.tealium?.track(tealView) + } + + @objc func trackEvent(title: String, data: [String: Any]?) { + let tealEvent = TealiumEvent(title, dataLayer: data) + TealiumHelper.shared.tealium?.track(tealEvent) + } +} + diff --git a/iOSClient/Login/NCLoginWeb.swift b/iOSClient/Login/NCLoginWeb.swift new file mode 100644 index 0000000000..daa39f5e6c --- /dev/null +++ b/iOSClient/Login/NCLoginWeb.swift @@ -0,0 +1,370 @@ +// +// NCLoginWeb.swift +// Nextcloud +// +// Created by Marino Faggiana on 21/08/2019. +// Copyright © 2019 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import WebKit +import NextcloudKit +import FloatingPanel + +class NCLoginWeb: UIViewController { + + var webView: WKWebView? + var newWebView: WKWebView? + + let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + let utility = NCUtility() + + var titleView: String = "" + + var urlBase = "" + var user: String? + + var configServerUrl: String? + var configUsername: String? + var configPassword: String? + var configAppPassword: String? + + var loginFlowV2Available = false + var loginFlowV2Token = "" + var loginFlowV2Endpoint = "" + var loginFlowV2Login = "" + + // MARK: - View Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + let accountCount = NCManageDatabase.shared.getAccounts()?.count ?? 0 + + // load AppConfig + if (NCBrandOptions.shared.disable_multiaccount == false) || (NCBrandOptions.shared.disable_multiaccount == true && accountCount == 0) { + if let configurationManaged = UserDefaults.standard.dictionary(forKey: "com.apple.configuration.managed"), NCBrandOptions.shared.use_AppConfig { + + if let serverUrl = configurationManaged[NCGlobal.shared.configuration_serverUrl] as? String { + self.configServerUrl = serverUrl + } + if let username = configurationManaged[NCGlobal.shared.configuration_username] as? String, !username.isEmpty, username.lowercased() != "username" { + self.configUsername = username + } + if let password = configurationManaged[NCGlobal.shared.configuration_password] as? String, !password.isEmpty, password.lowercased() != "password" { + self.configPassword = password + } + if let apppassword = configurationManaged[NCGlobal.shared.configuration_apppassword] as? String, !apppassword.isEmpty, apppassword.lowercased() != "apppassword" { + self.configAppPassword = apppassword + } + } + } + + if (NCBrandOptions.shared.use_login_web_personalized || NCBrandOptions.shared.use_AppConfig) && accountCount > 0 { + navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(self.closeView(sender:))) + } + + if accountCount > 0 { + navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "users")!.image(color: .label, size: 35), style: .plain, target: self, action: #selector(self.changeUser(sender:))) + } + + let config = WKWebViewConfiguration() + config.websiteDataStore = WKWebsiteDataStore.nonPersistent() + + webView = WKWebView(frame: CGRect.zero, configuration: config) + webView!.navigationDelegate = self +// webView!.uiDelegate = self + view.addSubview(webView!) + + webView!.translatesAutoresizingMaskIntoConstraints = false + webView!.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true + webView!.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true + webView!.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true + webView!.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true + + // AppConfig + if let serverUrl = configServerUrl { + if let username = self.configUsername, let password = configAppPassword { + self.createAccount(urlBase: serverUrl, user: username, password: password) + return + } else if let username = self.configUsername, let password = configPassword { + getAppPassword(urlBase: serverUrl, user: username, password: password) + return + } else { + urlBase = serverUrl + } + } + + // ADD end point for Web Flow + if urlBase != NCBrandOptions.shared.linkloginPreferredProviders { + if loginFlowV2Available { + urlBase = loginFlowV2Login + } else { + urlBase += "/index.php/login/flow" + if let user = self.user { + urlBase += "?user=\(user)" + } + } + } + + if let url = URL(string: urlBase) { + loadWebPage(webView: webView!, url: url) + } else { + let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_login_url_error_") + NCContentPresenter().showError(error: error, priority: .max) + } + + if #available(iOS 13, *) { + let keyWindow = UIApplication.shared.connectedScenes + .filter({$0.activationState == .foregroundActive}) + .map({$0 as? UIWindowScene}) + .compactMap({$0}) + .first?.windows + .filter({$0.isKeyWindow}).first + let statusBar = UIView(frame: (keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!) + statusBar.backgroundColor = NCBrandColor.shared.customer + keyWindow?.addSubview(statusBar) + } else { + if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView { + statusBar.backgroundColor = NCBrandColor.shared.customer + } + } + self.navigationController?.navigationBar.backgroundColor = NCBrandColor.shared.customer + self.edgesForExtendedLayout = [] // iphone 16, white gap between navigaiton and status bar. + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + // Stop timer error network + appDelegate.timerErrorNetworking?.invalidate() + + if let account = NCManageDatabase.shared.getActiveTableAccount(), NCKeychain().getPassword(account: account.account).isEmpty { + + let message = "\n" + NSLocalizedString("_password_not_present_", comment: "") + let alertController = UIAlertController(title: titleView, message: message, preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) + present(alertController, animated: true) + } + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + NCActivityIndicator.shared.stop() + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + + // Start timer error network + appDelegate.startTimerErrorNetworking() + } + + func loadWebPage(webView: WKWebView, url: URL) { + + let language = NSLocale.preferredLanguages[0] as String + var request = URLRequest(url: url) + + if let deviceName = "\(UIDevice.current.name) (\(NCBrandOptions.shared.brand) iOS)".cString(using: .utf8), + let deviceUserAgent = String(cString: deviceName, encoding: .ascii) { + webView.customUserAgent = deviceUserAgent + } else { + webView.customUserAgent = userAgent + } + + request.addValue("true", forHTTPHeaderField: "OCS-APIRequest") + request.addValue(language, forHTTPHeaderField: "Accept-Language") + + webView.load(request) + } + + func getAppPassword(urlBase: String, user: String, password: String) { + + NextcloudKit.shared.getAppPassword(url: urlBase, user: user, password: password) { token, _, error in + if error == .success, let password = token { + self.createAccount(urlBase: urlBase, user: user, password: password) + } else { + NCContentPresenter().showError(error: error) + self.dismiss(animated: true, completion: nil) + } + } + } + + @objc func closeView(sender: UIBarButtonItem) { + self.dismiss(animated: true, completion: nil) + } + + @objc func changeUser(sender: UIBarButtonItem) { +// toggleMenu() + } +} + +extension NCLoginWeb: WKNavigationDelegate { + + func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) { + + guard let url = webView.url else { return } + + let urlString: String = url.absoluteString.lowercased() + + // prevent http redirection + if urlBase.lowercased().hasPrefix("https://") && urlString.lowercased().hasPrefix("http://") { + let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_prevent_http_redirection_", comment: ""), preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in + _ = self.navigationController?.popViewController(animated: true) + })) + self.present(alertController, animated: true) + return + } + + if urlString.hasPrefix(NCBrandOptions.shared.webLoginAutenticationProtocol) == true && urlString.contains("login") == true { + + var server: String = "" + var user: String = "" + var password: String = "" + + let keyValue = url.path.components(separatedBy: "&") + for value in keyValue { + if value.contains("server:") { server = value } + if value.contains("user:") { user = value } + if value.contains("password:") { password = value } + } + + if !server.isEmpty, !user.isEmpty, !password.isEmpty { + + let server: String = server.replacingOccurrences(of: "/server:", with: "") + let username: String = user.replacingOccurrences(of: "user:", with: "").replacingOccurrences(of: "+", with: " ") + let password: String = password.replacingOccurrences(of: "password:", with: "") + + self.createAccount(urlBase: server, user: username, password: password) + + } + } + } + + func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + DispatchQueue.global().async { + if let serverTrust = challenge.protectionSpace.serverTrust { + completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: serverTrust)) + } else { + completionHandler(URLSession.AuthChallengeDisposition.useCredential, nil) + } + } + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + decisionHandler(.allow) + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { + if let httpResponse = navigationResponse.response as? HTTPURLResponse { + print("Response status code: \(httpResponse.statusCode)") + + if httpResponse.statusCode == 403 { +// showAccessDeniedAlert() + closeApp() + decisionHandler(.cancel) // Stop loading the page + } else { + decisionHandler(.allow) + } + } else { + decisionHandler(.allow) + } + } + + + // Show an alert instead of closing the app + private func showAccessDeniedAlert() { + DispatchQueue.main.async { + let alert = UIAlertController(title: "Access Denied", message: "You are not authorized to view this page.", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in + // Optionally, redirect user + self.webView?.load(URLRequest(url: URL(string: "https://www.google.com")!)) + })) + self.present(alert, animated: true, completion: nil) + } + } + + func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { + NCActivityIndicator.shared.startActivity(style: .medium, blurEffect: false) + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + + NCActivityIndicator.shared.stop() + + if loginFlowV2Available { + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + NextcloudKit.shared.getLoginFlowV2Poll(token: self.loginFlowV2Token, endpoint: self.loginFlowV2Endpoint) { server, loginName, appPassword, _, error in + if error == .success && server != nil && loginName != nil && appPassword != nil { + self.createAccount(urlBase: server!, user: loginName!, password: appPassword!) + } + } + } + } + } + + + private func closeApp() { + // Exit the app immediately + exit(0) + } + + + // MARK: - + + func createAccount(urlBase: String, user: String, password: String) { + let controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController + if let host = URL(string: urlBase)?.host { + NCNetworking.shared.writeCertificate(host: host) + } + NCAccount().createAccount(urlBase: urlBase, user: user, password: password, controller: controller) { account, error in + if error == .success { + let window = UIApplication.shared.firstWindow + if let controller = window?.rootViewController as? NCMainTabBarController { + controller.account = account + self.dismiss(animated: true) + } else { + if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? NCMainTabBarController { + AnalyticsHelper.shared.trackUserData() + controller.account = account + controller.modalPresentationStyle = .fullScreen + controller.view.alpha = 0 + + window?.rootViewController = controller + window?.makeKeyAndVisible() + + if let scene = window?.windowScene { + SceneManager.shared.register(scene: scene, withRootViewController: controller) + } + + UIView.animate(withDuration: 0.5) { + controller.view.alpha = 1 + } + } + } + } else { + let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: error.errorDescription, preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) + self.present(alertController, animated: true) + } + } + } + +} diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift new file mode 100644 index 0000000000..8a08faca4e --- /dev/null +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift @@ -0,0 +1,94 @@ +// +// NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift +// Nextcloud +// +// Created by Milen on 01.03.24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import Foundation +import SwipeCellKit + +extension NCCollectionViewCommon: SwipeCollectionViewCellDelegate { + func collectionView(_ collectionView: UICollectionView, editActionsForItemAt indexPath: IndexPath, for orientation: SwipeCellKit.SwipeActionsOrientation) -> [SwipeCellKit.SwipeAction]? { + guard orientation == .right, let metadata = self.dataSource.cellForItemAt(indexPath: indexPath) else { return nil } + + let scaleTransition = ScaleTransition(duration: 0.3, initialScale: 0.8, threshold: 0.8) + + // wait a fix for truncate the text .. ? .. + let favoriteAction = SwipeAction(style: .default, title: NSLocalizedString(metadata.favorite ? "_favorite_short_" : "_favorite_short_", comment: "") ) { _, _ in + NCNetworking.shared.favoriteMetadata(metadata) { error in + if error != .success { + NCContentPresenter().showError(error: error) + } + } + } + favoriteAction.backgroundColor = NCBrandColor.shared.yellowFavorite + favoriteAction.image = .init(systemName: "star.fill") + favoriteAction.transitionDelegate = scaleTransition + favoriteAction.hidesWhenSelected = true + + var actions = [favoriteAction] + + let shareAction = SwipeAction(style: .default, title: NSLocalizedString("_share_", comment: "")) { _, _ in + NCActionCenter.shared.openActivityViewController(selectedMetadata: [metadata], controller: self.controller) + } + shareAction.backgroundColor = .blue + shareAction.image = .init(systemName: "square.and.arrow.up") + shareAction.transitionDelegate = scaleTransition + shareAction.hidesWhenSelected = true + + let deleteAction = SwipeAction(style: .destructive, title: NSLocalizedString("_delete_", comment: "")) { _, _ in + let titleDelete: String + + if metadata.directory { + titleDelete = NSLocalizedString("_delete_folder_", comment: "") + } else { + titleDelete = NSLocalizedString("_delete_file_", comment: "") + } + + let message = NSLocalizedString("_want_delete_", comment: "") + "\n - " + metadata.fileNameView + + let alertController = UIAlertController.deleteFileOrFolder(titleString: titleDelete + "?", message: message, canDeleteServer: !metadata.lock, selectedMetadatas: [metadata], sceneIdentifier: self.controller?.sceneIdentifier) { _ in } + + self.viewController.present(alertController, animated: true, completion: nil) + } + deleteAction.image = UIImage.init(systemName: "trash") + deleteAction.style = .destructive + deleteAction.transitionDelegate = scaleTransition + deleteAction.hidesWhenSelected = true + + if !NCManageDatabase.shared.isMetadataShareOrMounted(metadata: metadata, metadataFolder: metadataFolder) { + actions.insert(deleteAction, at: 0) + } + + if metadata.canShare { + actions.append(shareAction) + } + + return actions + } + + func collectionView(_ collectionView: UICollectionView, editActionsOptionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeOptions { + var options = SwipeOptions() + options.expansionStyle = .selection + options.transitionStyle = .border + options.backgroundColor = .clear + return options + } +} diff --git a/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift new file mode 100644 index 0000000000..5f99d9ac21 --- /dev/null +++ b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift @@ -0,0 +1,116 @@ +// +// NCSelectableNavigationView.swift +// Nextcloud +// +// Created by Henrik Storch on 27.01.22. +// Copyright © 2022 Henrik Storch. All rights reserved. +// +// Author Marino Faggiana +// Author Henrik Storch +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import NextcloudKit +import Realm +import UIKit + +extension RealmSwiftObject { + var primaryKeyValue: String? { + guard let primaryKeyName = self.objectSchema.primaryKeyProperty?.name else { return nil } + return value(forKey: primaryKeyName) as? String + } +} + +public protocol NCSelectableViewTabBar { + var tabBarController: UITabBarController? { get } + var hostingController: UIViewController? { get } +} + +protocol NCSelectableNavigationView: AnyObject { + var viewController: UIViewController { get } +// var appDelegate: AppDelegate { get } + var selectableDataSource: [RealmSwiftObject] { get } + var collectionView: UICollectionView! { get set } + var isEditMode: Bool { get set } + var fileSelect: [String] { get set } +// var selectIndexPaths: [IndexPath] { get set } + var titleCurrentFolder: String { get } + var navigationItem: UINavigationItem { get } + var navigationController: UINavigationController? { get } + var layoutKey: String { get } + var serverUrl: String { get } +// var tabBarSelect: NCSelectableViewTabBar? { get set } +// var dataSource: NCCollectionViewDataSource { get set } + +// func reloadDataSource(withQueryDB: Bool) + func setNavigationLeftItems() + func setNavigationRightItems(enableMenu: Bool) + func createMenuActions() -> [NCMenuAction] + + func toggleSelect(isOn: Bool?) + func onListSelected() + func onGridSelected() +} + +extension NCSelectableNavigationView { + func setNavigationLeftItems() {} + + func saveLayout(_ layoutForView: NCDBLayoutForView) { + NCManageDatabase.shared.setLayoutForView(layoutForView: layoutForView) + NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource) + setNavigationRightItems(enableMenu: false) + } + + /// If explicit `isOn` is not set, it will invert `isEditMode` + func toggleSelect(isOn: Bool? = nil) { + DispatchQueue.main.async { + self.isEditMode = isOn ?? !self.isEditMode + self.fileSelect.removeAll() +// self.selectIndexPaths.removeAll() + self.setNavigationLeftItems() + self.setNavigationRightItems(enableMenu: true) + self.collectionView.reloadData() + } + } + + func collectionViewSelectAll() { + + fileSelect = selectableDataSource.compactMap({ $0.primaryKeyValue }) +// fileSelect = NCCollectionViewDataSource().getMetadataSourceForAllSections().compactMap({ $0.primaryKeyValue }) + collectionView.reloadData() + setNavigationRightItems(enableMenu: false) + } + + func tapNotification() { + if let viewController = UIStoryboard(name: "NCNotification", bundle: nil).instantiateInitialViewController() as? NCNotification { + navigationController?.pushViewController(viewController, animated: true) + } + } + + func tapTransfer() { + if let navController = UIStoryboard(name: "NCTransfers", bundle: nil).instantiateInitialViewController() as? UINavigationController, + let viewController = navController.topViewController as? NCTransfers { + viewController.modalPresentationStyle = .pageSheet +// self.present(navigationController, animated: true, completion: nil) + navigationController?.present(navController, animated: true, completion: nil) + } + } +} + +extension NCSelectableNavigationView where Self: UIViewController { + var viewController: UIViewController { + self + } +} diff --git a/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift new file mode 100644 index 0000000000..d9e0fdb52c --- /dev/null +++ b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift @@ -0,0 +1,329 @@ +// +// NCSectionHeaderFooter.swift +// Nextcloud +// +// Created by Marino Faggiana on 09/10/2018. +// Copyright © 2018 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import MarkdownKit + +class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate { + + @IBOutlet weak var buttonSwitch: UIButton! + @IBOutlet weak var buttonOrder: UIButton! + @IBOutlet weak var buttonMore: UIButton! + @IBOutlet weak var buttonTransfer: UIButton! + @IBOutlet weak var imageButtonTransfer: UIImageView! + @IBOutlet weak var labelTransfer: UILabel! + @IBOutlet weak var progressTransfer: UIProgressView! + @IBOutlet weak var transferSeparatorBottom: UIView! + @IBOutlet weak var textViewRichWorkspace: UITextView! + @IBOutlet weak var labelSection: UILabel! + @IBOutlet weak var viewTransfer: UIView! + @IBOutlet weak var viewButtonsView: UIView! + @IBOutlet weak var viewSeparator: UIView! + @IBOutlet weak var viewRichWorkspace: UIView! + @IBOutlet weak var viewSection: UIView! + + @IBOutlet weak var viewTransferHeightConstraint: NSLayoutConstraint! + @IBOutlet weak var viewButtonsViewHeightConstraint: NSLayoutConstraint! + @IBOutlet weak var viewSeparatorHeightConstraint: NSLayoutConstraint! + @IBOutlet weak var viewRichWorkspaceHeightConstraint: NSLayoutConstraint! + @IBOutlet weak var viewSectionHeightConstraint: NSLayoutConstraint! + @IBOutlet weak var transferSeparatorBottomHeightConstraint: NSLayoutConstraint! + + weak var delegate: NCSectionHeaderMenuDelegate? + let utility = NCUtility() + private var markdownParser = MarkdownParser() + private var richWorkspaceText: String? + private var textViewColor: UIColor? + private let gradient: CAGradientLayer = CAGradientLayer() + + override func awakeFromNib() { + super.awakeFromNib() + + backgroundColor = .clear + + buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconColor, size: 25), for: .normal) + + buttonOrder.setTitle("", for: .normal) + buttonOrder.setTitleColor(NCBrandColor.shared.brand, for: .normal) + buttonMore.setImage(UIImage(named: "more")!.image(color: NCBrandColor.shared.iconColor, size: 25), for: .normal) + + // Gradient + gradient.startPoint = CGPoint(x: 0, y: 0.50) + gradient.endPoint = CGPoint(x: 0, y: 1) + viewRichWorkspace.layer.addSublayer(gradient) + + let tap = UITapGestureRecognizer(target: self, action: #selector(touchUpInsideViewRichWorkspace(_:))) + tap.delegate = self + viewRichWorkspace?.addGestureRecognizer(tap) + + viewSeparatorHeightConstraint.constant = 0.5 + viewSeparator.backgroundColor = .separator + + markdownParser = MarkdownParser(font: UIFont.systemFont(ofSize: 15), color: .label) + markdownParser.header.font = UIFont.systemFont(ofSize: 25) + if let richWorkspaceText = richWorkspaceText { + textViewRichWorkspace.attributedText = markdownParser.parse(richWorkspaceText) + } + textViewColor = .label + + labelSection.text = "" + viewSectionHeightConstraint.constant = 0 + + buttonTransfer.backgroundColor = .clear + buttonTransfer.setImage(nil, for: .normal) + buttonTransfer.layer.cornerRadius = 6 + buttonTransfer.layer.masksToBounds = true + imageButtonTransfer.image = UIImage(systemName: "stop.circle") + imageButtonTransfer.tintColor = .white + labelTransfer.text = "" + progressTransfer.progress = 0 + progressTransfer.tintColor = NCBrandColor.shared.brand + progressTransfer.trackTintColor = NCBrandColor.shared.brand.withAlphaComponent(0.2) + transferSeparatorBottom.backgroundColor = .separator + transferSeparatorBottomHeightConstraint.constant = 0.5 + } + + override func layoutSublayers(of layer: CALayer) { + super.layoutSublayers(of: layer) + + gradient.frame = viewRichWorkspace.bounds + setInterfaceColor() + } + + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + setInterfaceColor() + } + + // MARK: - View + + func setStatusButtonsView(enable: Bool) { + + buttonSwitch.isEnabled = enable + buttonOrder.isEnabled = enable + buttonMore.isEnabled = enable + } + + func buttonMoreIsHidden(_ isHidden: Bool) { + + buttonMore.isHidden = isHidden + } + + func setImageSwitchList() { + + buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconColor, width: 20, height: 15), for: .normal) + } + + func setImageSwitchGrid() { + + buttonSwitch.setImage(UIImage(systemName: "square.grid.2x2")!.image(color: NCBrandColor.shared.iconColor, size: 20), for: .normal) + } + + func setButtonsView(height: CGFloat) { + + viewButtonsViewHeightConstraint.constant = height + if height == 0 { + viewButtonsView.isHidden = true + } else { + viewButtonsView.isHidden = false + } + } + + func setSortedTitle(_ title: String) { + + let title = NSLocalizedString(title, comment: "") + buttonOrder.setTitle(title, for: .normal) + } + + // MARK: - RichWorkspace + + func setRichWorkspaceHeight(_ size: CGFloat) { + + viewRichWorkspaceHeightConstraint.constant = size + if size == 0 { + viewRichWorkspace.isHidden = true + } else { + viewRichWorkspace.isHidden = false + } + } + + func setInterfaceColor() { + + if traitCollection.userInterfaceStyle == .dark { + gradient.colors = [UIColor(white: 0, alpha: 0).cgColor, UIColor.black.cgColor] + } else { + gradient.colors = [UIColor(white: 1, alpha: 0).cgColor, UIColor.white.cgColor] + } + } + + func setRichWorkspaceText(_ text: String?) { + guard let text = text else { return } + + if text != self.richWorkspaceText { + textViewRichWorkspace.attributedText = markdownParser.parse(text) + self.richWorkspaceText = text + } + } + + // MARK: - Transfer + + func setViewTransfer(isHidden: Bool, ocId: String? = nil, text: String? = nil, progress: Float? = nil) { + + labelTransfer.text = text + viewTransfer.isHidden = isHidden + progressTransfer.progress = 0 + + if isHidden { + viewTransferHeightConstraint.constant = 0 + } else { + var image: UIImage? + if let ocId, + let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) { + image = utility.createFilePreviewImage(ocId: metadata.ocId, etag: metadata.etag, fileNameView: metadata.fileNameView, classFile: metadata.classFile, status: metadata.status, createPreviewMedia: true)?.darken() + if image == nil { + image = UIImage(named: metadata.iconName) + buttonTransfer.backgroundColor = .lightGray + } else { + buttonTransfer.backgroundColor = .clear + } + buttonTransfer.setImage(image, for: .normal) + } + viewTransferHeightConstraint.constant = NCGlobal.shared.heightHeaderTransfer + if let progress { + progressTransfer.progress = progress + } + } + } + + // MARK: - Section + + func setSectionHeight(_ size: CGFloat) { + + viewSectionHeightConstraint.constant = size + if size == 0 { + viewSection.isHidden = true + } else { + viewSection.isHidden = false + } + } + + // MARK: - Action + + @IBAction func touchUpInsideSwitch(_ sender: Any) { + delegate?.tapButtonSwitch(sender) + } + + @IBAction func touchUpInsideOrder(_ sender: Any) { + delegate?.tapButtonOrder(sender) + } + + @IBAction func touchUpInsideMore(_ sender: Any) { + delegate?.tapButtonMore(sender) + } + + @IBAction func touchUpTransfer(_ sender: Any) { + delegate?.tapButtonTransfer(sender) + } + + @objc func touchUpInsideViewRichWorkspace(_ sender: Any) { + delegate?.tapRichWorkspace(sender) + } +} + +protocol NCSectionHeaderMenuDelegate: AnyObject { + func tapButtonSwitch(_ sender: Any) + func tapButtonOrder(_ sender: Any) + func tapButtonMore(_ sender: Any) + func tapButtonTransfer(_ sender: Any) + func tapRichWorkspace(_ sender: Any) +} + +// optional func +extension NCSectionHeaderMenuDelegate { + func tapButtonSwitch(_ sender: Any) {} + func tapButtonOrder(_ sender: Any) {} + func tapButtonMore(_ sender: Any) {} + func tapButtonTransfer(_ sender: Any) {} + func tapRichWorkspace(_ sender: Any) {} +} + +// optional func +extension NCSectionFooterDelegate { + func tapButtonSection(_ sender: Any, metadataForSection: NCMetadataForSection?) {} +} + +//// https://stackoverflow.com/questions/16278463/darken-an-uiimage +//public extension UIImage { +// +// private enum BlendMode { +// case multiply // This results in colors that are at least as dark as either of the two contributing sample colors +// case screen // This results in colors that are at least as light as either of the two contributing sample colors +// } +// +// // A level of zero yeilds the original image, a level of 1 results in black +// func darken(level: CGFloat = 0.5) -> UIImage? { +// return blend(mode: .multiply, level: level) +// } +// +// // A level of zero yeilds the original image, a level of 1 results in white +// func lighten(level: CGFloat = 0.5) -> UIImage? { +// return blend(mode: .screen, level: level) +// } +// +// private func blend(mode: BlendMode, level: CGFloat) -> UIImage? { +// let context = CIContext(options: nil) +// +// var level = level +// if level < 0 { +// level = 0 +// } else if level > 1 { +// level = 1 +// } +// +// let filterName: String +// switch mode { +// case .multiply: // As the level increases we get less white +// level = abs(level - 1.0) +// filterName = "CIMultiplyBlendMode" +// case .screen: // As the level increases we get more white +// filterName = "CIScreenBlendMode" +// } +// +// let blender = CIFilter(name: filterName)! +// let backgroundColor = CIColor(color: UIColor(white: level, alpha: 1)) +// +// guard let inputImage = CIImage(image: self) else { return nil } +// blender.setValue(inputImage, forKey: kCIInputImageKey) +// +// guard let backgroundImageGenerator = CIFilter(name: "CIConstantColorGenerator") else { return nil } +// backgroundImageGenerator.setValue(backgroundColor, forKey: kCIInputColorKey) +// guard let backgroundImage = backgroundImageGenerator.outputImage?.cropped(to: CGRect(origin: CGPoint.zero, size: self.size)) else { return nil } +// blender.setValue(backgroundImage, forKey: kCIInputBackgroundImageKey) +// +// guard let blendedImage = blender.outputImage else { return nil } +// +// guard let cgImage = context.createCGImage(blendedImage, from: blendedImage.extent) else { return nil } +// return UIImage(cgImage: cgImage) +// } +//} diff --git a/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.xib b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.xib new file mode 100644 index 0000000000..5d206c1d2f --- /dev/null +++ b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.xib @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Main/Create/NCCreateFormUploadDocuments.storyboard b/iOSClient/Main/Create/NCCreateFormUploadDocuments.storyboard new file mode 100644 index 0000000000..6995ac52d9 --- /dev/null +++ b/iOSClient/Main/Create/NCCreateFormUploadDocuments.storyboard @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift new file mode 100644 index 0000000000..65e644cd64 --- /dev/null +++ b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift @@ -0,0 +1,567 @@ +// +// NCCreateFormUploadDocuments.swift +// Nextcloud +// +// Created by Marino Faggiana on 14/11/18. +// Copyright © 2018 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import NextcloudKit +import XLForm + +// MARK: - + +@objc class NCCreateFormUploadDocuments: XLFormViewController, NCSelectDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, NCCreateFormUploadConflictDelegate { + + @IBOutlet weak var indicator: UIActivityIndicatorView! + @IBOutlet weak var collectionView: UICollectionView! + @IBOutlet weak var collectionViewHeigth: NSLayoutConstraint! + + let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + var editorId = "" + var creatorId = "" + var typeTemplate = "" + var templateIdentifier = "" + var serverUrl = "" + var fileNameFolder = "" + var fileName = "" + var fileNameExtension = "" + var titleForm = "" + var listOfTemplate: [NKEditorTemplates] = [] + var selectTemplate: NKEditorTemplates? + let utilityFileSystem = NCUtilityFileSystem() + let utility = NCUtility() + + // Layout + let numItems = 2 + let sectionInsets: CGFloat = 10 + let highLabelName: CGFloat = 20 + + var controller: NCMainTabBarController! + var session: NCSession.Session { + NCSession.shared.getSession(controller: controller) + } + + // MARK: - View Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + fileNameFolder = "/" + } else { + fileNameFolder = utilityFileSystem.getTextServerUrl(session: session, serverUrl: serverUrl)//(serverUrl as NSString).lastPathComponent + } + + self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + + view.backgroundColor = .systemGroupedBackground + collectionView.backgroundColor = .systemGroupedBackground + tableView.backgroundColor = .secondarySystemGroupedBackground + + let cancelButton: UIBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_cancel_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(cancel)) + let saveButton: UIBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_save_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(save)) + cancelButton.tintColor = NCBrandColor.shared.brand + saveButton.tintColor = NCBrandColor.shared.brand + + self.navigationItem.leftBarButtonItem = cancelButton + self.navigationItem.rightBarButtonItem = saveButton + self.navigationItem.rightBarButtonItem?.isEnabled = false + + // title + self.title = titleForm + + fileName = NCUtilityFileSystem().createFileNameDate("Text", ext: getFileExtension()) + + initializeForm() + getTemplate() + } + + // MARK: - Tableview (XLForm) + + func initializeForm() { + + let form: XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section: XLFormSectionDescriptor + var row: XLFormRowDescriptor + + // Section: Destination Folder + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "").uppercased()) + section.footerTitle = " " + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["kNMCFolderCustomCellType"] = FolderPathCustomCell.self + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: "") + row.action.formSelector = #selector(changeDestinationFolder(_:)) + row.cellConfig["folderImage.image"] = UIImage(named: "folder")!.imageColor(NCBrandColor.shared.customer) + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.right.rawValue + row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["photoLabel.textColor"] = UIColor.label //photos + if(self.fileNameFolder == "/"){ + row.cellConfig["photoLabel.text"] = NSLocalizedString("_prefix_upload_path_", comment: "") + }else{ + row.cellConfig["photoLabel.text"] = self.fileNameFolder + } + row.cellConfig["textLabel.text"] = "" + + section.addFormRow(row) + + // Section: File Name + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_filename_", comment: "").uppercased()) + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["kMyAppCustomCellType"] = NCCreateDocumentCustomTextField.self + + row = XLFormRowDescriptor(tag: "fileName", rowType: "kMyAppCustomCellType", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = NCCreateDocumentCustomTextField.self + + row.cellConfigAtConfigure["backgroundColor"] = UIColor.secondarySystemGroupedBackground; + row.cellConfig["fileNameTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameTextField.textColor"] = UIColor.label + row.cellConfig["fileNameTextField.placeholder"] = self.fileName + + section.addFormRow(row) + + self.form = form + // tableView.reloadData() + // collectionView.reloadData() + } + + override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { + let header = view as? UITableViewHeaderFooterView + header?.textLabel?.font = UIFont.systemFont(ofSize: 13.0) + header?.textLabel?.textColor = .gray + header?.tintColor = tableView.backgroundColor + } + + override func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) { + let header = view as? UITableViewHeaderFooterView + header?.textLabel?.font = UIFont.systemFont(ofSize: 13.0) + header?.textLabel?.textColor = .gray + header?.tintColor = tableView.backgroundColor + } + + // MARK: - CollectionView + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return listOfTemplate.count + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + + let itemWidth: CGFloat = (collectionView.frame.width - (sectionInsets * 4) - CGFloat(numItems)) / CGFloat(numItems) + let itemHeight: CGFloat = itemWidth + highLabelName + + collectionViewHeigth.constant = itemHeight + sectionInsets + + return CGSize(width: itemWidth, height: itemHeight) + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) + + let template = listOfTemplate[indexPath.row] + + // image + let imagePreview = cell.viewWithTag(100) as? UIImageView + if !template.preview.isEmpty { + let fileNameLocalPath = utilityFileSystem.directoryUserData + "/" + template.name + ".png" + if FileManager.default.fileExists(atPath: fileNameLocalPath) { + let imageURL = URL(fileURLWithPath: fileNameLocalPath) + if let image = UIImage(contentsOfFile: imageURL.path) { + imagePreview?.image = image + } + } else { + getImageFromTemplate(name: template.name, preview: template.preview, indexPath: indexPath) + } + } + + // name + let name = cell.viewWithTag(200) as? UILabel + name?.text = template.name + name?.textColor = .secondarySystemGroupedBackground + + // select + let imageSelect = cell.viewWithTag(300) as? UIImageView + if selectTemplate != nil && selectTemplate?.name == template.name { + cell.backgroundColor = .label + imageSelect?.image = UIImage(named: "plus100") + imageSelect?.isHidden = false + } else { + cell.backgroundColor = .secondarySystemGroupedBackground + imageSelect?.isHidden = true + } + + return cell + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + + let template = listOfTemplate[indexPath.row] + + selectTemplate = template + fileNameExtension = template.ext + + collectionView.reloadData() + } + + // MARK: - Action + + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { + + guard let serverUrl = serverUrl else { return } + + self.serverUrl = serverUrl + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + fileNameFolder = "/" + } else { + fileNameFolder = (serverUrl as NSString).lastPathComponent + } + + let buttonDestinationFolder: XLFormRowDescriptor = self.form.formRow(withTag: "ButtonDestinationFolder")! + buttonDestinationFolder.cellConfig["photoLabel.text"] = fileNameFolder + + self.tableView.reloadData() + } + +// override func formRowDescriptorValueHasChanged(_ formRow: XLFormRowDescriptor!, oldValue: Any!, newValue: Any!) { +// super.formRowDescriptorValueHasChanged(formRow, oldValue: oldValue, newValue: newValue) +//// if formRow.tag == "fileName" { +//// self.form.delegate = nil +//// if let fileNameNew = formRow.value { +//// self.fileName = CCUtility.removeForbiddenCharactersServer(fileNameNew as? String) +//// } +//// formRow.value = self.fileName +//// self.form.delegate = self +//// } +// } + + @objc func changeDestinationFolder(_ sender: XLFormRowDescriptor) { + + self.deselectFormRow(sender) + + let storyboard = UIStoryboard(name: "NCSelect", bundle: nil) + if let navigationController = storyboard.instantiateInitialViewController() as? UINavigationController, + let viewController = navigationController.topViewController as? NCSelect { + + viewController.delegate = self + viewController.typeOfCommandView = .selectCreateFolder + + self.present(navigationController, animated: true, completion: nil) + } + } + + @objc func save() { + + guard let selectTemplate = self.selectTemplate else { return } + templateIdentifier = selectTemplate.identifier + + let rowFileName: XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + var fileName = rowFileName.value as? String + if fileName?.isEmpty ?? false || fileName == nil { + fileName = NCUtilityFileSystem().createFileNameDate("Text", ext: getFileExtension()) + } else if fileName?.trimmingCharacters(in: .whitespaces).isEmpty ?? false { + let alert = UIAlertController(title: "", message: NSLocalizedString("_please_enter_file_name_", comment: ""), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .cancel, handler: nil)) + self.present(alert, animated: true) + return + } + guard var fileNameForm: String = fileName, !fileNameForm.isEmpty else { return } + + // Trim whitespaces after checks above + fileNameForm = fileNameForm.trimmingCharacters(in: .whitespacesAndNewlines) + + let result = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileNameForm, mimeType: "", directory: false, account: session.account + ) + if utility.editorsDirectEditing(account: session.account, contentType: result.mimeType).isEmpty { + fileNameForm = (fileNameForm as NSString).deletingPathExtension + "." + fileNameExtension + } + + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: String(describing: fileNameForm), nativeFormat: false) != nil { + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate.account, user: appDelegate.user, userId: appDelegate.userId, fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: "", serverUrl: serverUrl, urlBase: appDelegate.urlBase, url: "", contentType: "") + + let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) + + guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } + + conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") + conflict.alwaysNewFileNameNumber = true + conflict.serverUrl = serverUrl + conflict.metadatasUploadInConflict = [metadataForUpload] + conflict.delegate = self + + self.present(conflict, animated: true, completion: nil) + + } else { + + let fileNamePath = utilityFileSystem.getFileNamePath(String(describing: fileNameForm), serverUrl: serverUrl, session: session) + createDocument(fileNamePath: fileNamePath, fileName: String(describing: fileNameForm)) + } + } + + func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) { + + if let metadatas, metadatas.count > 0 { + let fileName = metadatas[0].fileName + let fileNamePath = utilityFileSystem.getFileNamePath(fileName, serverUrl: serverUrl, session: session) + createDocument(fileNamePath: fileNamePath, fileName: fileName) + } else { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.cancel() + } + } + } + + func createDocument(fileNamePath: String, fileName: String) { + + self.navigationItem.rightBarButtonItem?.isEnabled = false + var UUID = NSUUID().uuidString + UUID = "TEMP" + UUID.replacingOccurrences(of: "-", with: "") + + if self.editorId == NCGlobal.shared.editorText || self.editorId == NCGlobal.shared.editorOnlyoffice { + + var options = NKRequestOptions() + if self.editorId == NCGlobal.shared.editorOnlyoffice { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentOnlyOffice()) + } else if editorId == NCGlobal.shared.editorText { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) + } + + NextcloudKit.shared.NCTextCreateFile(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account, options: options) { account, url, _, error in + guard error == .success, account == self.session.account, let url = url else { + self.navigationItem.rightBarButtonItem?.isEnabled = true + NCContentPresenter().showError(error: error) + return + } + + var results = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileName, mimeType: "", directory: false, account: self.session.account) + // FIXME: iOS 12.0,* don't detect UTI text/markdown, text/x-markdown + if results.mimeType.isEmpty { + results.mimeType = "text/x-markdown" + } + + self.dismiss(animated: true, completion: { + let metadata = NCManageDatabase.shared.createMetadata(fileName: fileName, fileNameView: fileName, ocId: UUID, serverUrl: self.serverUrl, url: url, contentType: results.mimeType, session: self.session, sceneIdentifier: self.appDelegate.sceneIdentifier) + if let viewController = self.appDelegate.activeViewController { +// NCViewer().view(viewController: viewController, metadata: metadata) + NCViewer().view(viewController: viewController, metadata: metadata, metadatas: [metadata]) + } + }) + } + } + + if self.editorId == NCGlobal.shared.editorCollabora { + + NextcloudKit.shared.createRichdocuments(path: fileNamePath, templateId: templateIdentifier, account: session.account) { account, url, _, error in + guard error == .success, account == self.session.account, let url = url else { + self.navigationItem.rightBarButtonItem?.isEnabled = true + NCContentPresenter().showError(error: error) + return + } + + self.dismiss(animated: true, completion: { + let createFileName = (fileName as NSString).deletingPathExtension + "." + self.fileNameExtension + let metadata = NCManageDatabase.shared.createMetadata(fileName: createFileName, fileNameView: createFileName, ocId: UUID, serverUrl: self.serverUrl, url: url, contentType: "", session: self.session, sceneIdentifier: self.appDelegate.sceneIdentifier) + AnalyticsHelper.shared.trackCreateFile(metadata: metadata) + if let viewController = self.appDelegate.activeViewController { +// NCViewer().view(viewController: viewController, metadata: metadata) + NCViewer().view(viewController: viewController, metadata: metadata, metadatas: [metadata]) + } + }) + } + } + } + + @objc func cancel() { + + self.dismiss(animated: true, completion: nil) + } + + // MARK: NC API + + func getTemplate() { + + indicator.color = NCBrandColor.shared.brandElement + indicator.startAnimating() + + if self.editorId == NCGlobal.shared.editorText || self.editorId == NCGlobal.shared.editorOnlyoffice { + + var options = NKRequestOptions() + if self.editorId == NCGlobal.shared.editorOnlyoffice { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentOnlyOffice()) + } else if editorId == NCGlobal.shared.editorText { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) + } + + NextcloudKit.shared.NCTextGetListOfTemplates(account: session.account, options: options) { account, templates, _, error in + + self.indicator.stopAnimating() + + if error == .success && account == self.session.account, let templates = templates { + + for template in templates { + + let temp = NKEditorTemplates() + + temp.identifier = template.identifier + temp.ext = template.ext + temp.name = template.name + temp.preview = template.preview + + self.listOfTemplate.append(temp) + + // default: template empty + if temp.preview.isEmpty { + self.selectTemplate = temp + self.fileNameExtension = template.ext + self.navigationItem.rightBarButtonItem?.isEnabled = true + } + } + } + + if self.listOfTemplate.isEmpty { + + let temp = NKEditorTemplates() + + temp.identifier = "" + if self.editorId == NCGlobal.shared.editorText { + temp.ext = "md" + } else if self.editorId == NCGlobal.shared.editorOnlyoffice && self.typeTemplate == NCGlobal.shared.templateDocument { + temp.ext = "docx" + } else if self.editorId == NCGlobal.shared.editorOnlyoffice && self.typeTemplate == NCGlobal.shared.templateSpreadsheet { + temp.ext = "xlsx" + } else if self.editorId == NCGlobal.shared.editorOnlyoffice && self.typeTemplate == NCGlobal.shared.templatePresentation { + temp.ext = "pptx" + } + temp.name = "Empty" + temp.preview = "" + + self.listOfTemplate.append(temp) + + self.selectTemplate = temp + self.fileNameExtension = temp.ext + self.navigationItem.rightBarButtonItem?.isEnabled = true + } + + self.collectionView.reloadData() + } + + } + + if self.editorId == NCGlobal.shared.editorCollabora { + + NextcloudKit.shared.getTemplatesRichdocuments(typeTemplate: typeTemplate, account: session.account) { account, templates, _, error in + + self.indicator.stopAnimating() + + if error == .success && account == self.session.account { + + for template in templates! { + + let temp = NKEditorTemplates() + + temp.identifier = "\(template.templateId)" + temp.delete = template.delete + temp.ext = template.ext + temp.name = template.name + temp.preview = template.preview + temp.type = template.type + + self.listOfTemplate.append(temp) + + // default: template empty + if temp.preview.isEmpty { + self.selectTemplate = temp + self.fileNameExtension = temp.ext + self.navigationItem.rightBarButtonItem?.isEnabled = true + } + } + } + + if self.listOfTemplate.isEmpty { + + let temp = NKEditorTemplates() + + temp.identifier = "" + if self.typeTemplate == NCGlobal.shared.templateDocument { + temp.ext = "docx" + } else if self.typeTemplate == NCGlobal.shared.templateSpreadsheet { + temp.ext = "xlsx" + } else if self.typeTemplate == NCGlobal.shared.templatePresentation { + temp.ext = "pptx" + } + temp.name = "Empty" + temp.preview = "" + + self.listOfTemplate.append(temp) + + self.selectTemplate = temp + self.fileNameExtension = temp.ext + self.navigationItem.rightBarButtonItem?.isEnabled = true + } + + self.collectionView.reloadData() + } + } + } + + func getImageFromTemplate(name: String, preview: String, indexPath: IndexPath) { + + let fileNameLocalPath = utilityFileSystem.directoryUserData + "/" + name + ".png" + + NextcloudKit.shared.download(serverUrlFileName: preview, fileNameLocalPath: fileNameLocalPath, account: session.account, requestHandler: { _ in + + }, taskHandler: { _ in + + }, progressHandler: { _ in + + }) { account, _, _, _, _, _, error in + + if error == .success && account == self.session.account { + self.collectionView.reloadItems(at: [indexPath]) + } else if error != .success { + print("\(error.errorCode)") + } else { + print("[ERROR] It has been changed user during networking process, error.") + } + } + } + + func getFileExtension() -> String { + switch typeTemplate { + case NCGlobal.shared.editorText: + return "md" + case NCGlobal.shared.templateDocument: + return "docx" + case NCGlobal.shared.templateSpreadsheet: + return "xlsx" + case NCGlobal.shared.templatePresentation: + return "pptx" + default: + return "" + } + } +} diff --git a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.storyboard b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.storyboard new file mode 100644 index 0000000000..1b5344ccee --- /dev/null +++ b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.storyboard @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift new file mode 100644 index 0000000000..56d769c51d --- /dev/null +++ b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift @@ -0,0 +1,370 @@ +// +// NCCreateFormUploadVoiceNote.swift +// Nextcloud +// +// Created by Marino Faggiana on 9/03/2019. +// Copyright © 2019 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import NextcloudKit +import XLForm +import AVFAudio + +class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAudioPlayerDelegate, NCCreateFormUploadConflictDelegate { + + @IBOutlet weak var buttonPlayStop: UIButton! + @IBOutlet weak var labelTimer: UILabel! + @IBOutlet weak var labelDuration: UILabel! + @IBOutlet weak var progressView: UIProgressView! + + private let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + let utilityFileSystem = NCUtilityFileSystem() + let utility = NCUtility() + private var serverUrl = "" + private var titleServerUrl = "" + private var fileName = "" + private var fileNamePath = "" + private var durationPlayer: TimeInterval = 0 + private var counterSecondPlayer: TimeInterval = 0 + + private var audioPlayer: AVAudioPlayer! + private var timer = Timer() + + var cellBackgoundColor = UIColor.secondarySystemGroupedBackground + + var controller: NCMainTabBarController! + var session: NCSession.Session { + NCSession.shared.getSession(controller: controller) + } + + // MARK: - View Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_cancel_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(cancel)) + self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_save_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(save)) + self.navigationItem.leftBarButtonItem?.tintColor = NCBrandColor.shared.brand + self.navigationItem.rightBarButtonItem?.tintColor = NCBrandColor.shared.brand + + self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + + view.backgroundColor = .systemGroupedBackground + tableView.backgroundColor = .systemGroupedBackground + cellBackgoundColor = .secondarySystemGroupedBackground + + self.title = NSLocalizedString("_voice_memo_title_", comment: "") + + // Button Play Stop + buttonPlayStop.setImage(UIImage(named: "audioPlay")!.image(color: NCBrandColor.shared.iconColor, size: 100), for: .normal) + + // Progress view + progressView.progress = 0 + progressView.progressTintColor = NCBrandColor.shared.customer + progressView.trackTintColor = .white + progressView.layer.borderWidth = 1 + progressView.layer.cornerRadius = 5.0 + progressView.layer.borderColor = NCBrandColor.shared.customer.cgColor + + labelTimer.textColor = .label + labelDuration.textColor = .label + + initializeForm() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + updateTimerUI() + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + + if audioPlayer.isPlaying { + stop() + } + } + + public func setup(serverUrl: String, fileNamePath: String, fileName: String) { + + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + titleServerUrl = "/" + } else { + titleServerUrl = utilityFileSystem.getTextServerUrl(session: session, serverUrl: serverUrl)//(serverUrl as NSString).lastPathComponent + } + + self.fileName = fileName + self.serverUrl = serverUrl + self.fileNamePath = fileNamePath + + // player + do { + try audioPlayer = AVAudioPlayer(contentsOf: URL(fileURLWithPath: fileNamePath)) + audioPlayer.prepareToPlay() + audioPlayer.delegate = self + durationPlayer = TimeInterval(audioPlayer.duration) + } catch { + buttonPlayStop.isEnabled = false + } + } + + // MARK: XLForm + + func initializeForm() { + + let form: XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section: XLFormSectionDescriptor + var row: XLFormRowDescriptor + + // Section: Destination Folder + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "").uppercased()) + section.footerTitle = "" + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["kNMCFolderCustomCellType"] = FolderPathCustomCell.self + + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: self.titleServerUrl) + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground + row.action.formSelector = #selector(changeDestinationFolder(_:)) + row.cellConfig["folderImage.image"] = UIImage(named: "folder_nmcloud")?.image(color: NCBrandColor.shared.brandElement, size: 25) + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.right.rawValue + row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["photoLabel.textColor"] = UIColor.label //photos + if(self.titleServerUrl == "/"){ + row.cellConfig["photoLabel.text"] = NSLocalizedString("_prefix_upload_path_", comment: "") + }else{ + row.cellConfig["photoLabel.text"] = self.titleServerUrl + } + row.cellConfig["textLabel.text"] = "" + section.addFormRow(row) + + // Section: File Name + + XLFormViewController.cellClassesForRowDescriptorTypes()["kMyAppCustomCellType"] = TextTableViewCell.self + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_filename_", comment: "").uppercased()) + form.addFormSection(section) + + row = XLFormRowDescriptor(tag: "fileName", rowType: "kMyAppCustomCellType", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = TextTableViewCell.self + row.cellConfigAtConfigure["backgroundColor"] = UIColor.secondarySystemGroupedBackground; + row.cellConfig["fileNameTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameTextField.textColor"] = UIColor.label + row.cellConfig["fileNameTextField.text"] = self.fileName + section.addFormRow(row) + + self.form = form + } + + override func formRowDescriptorValueHasChanged(_ formRow: XLFormRowDescriptor!, oldValue: Any!, newValue: Any!) { + + super.formRowDescriptorValueHasChanged(formRow, oldValue: oldValue, newValue: newValue) + + if formRow.tag == "fileName" { + + self.form.delegate = nil + + if let fileNameNew = formRow.value as? String { + self.fileName = utility.removeForbiddenCharacters(fileNameNew) + } else { + self.fileName = "" + } + + + self.form.delegate = self + } + } + + // MARK: TableViewDelegate + + override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { + let header = view as? UITableViewHeaderFooterView + header?.textLabel?.font = UIFont.systemFont(ofSize: 13.0) + header?.textLabel?.textColor = .gray + header?.tintColor = cellBackgoundColor + } + + // MARK: - Action + + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { + + if serverUrl != nil { + + self.serverUrl = serverUrl! + + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + self.titleServerUrl = "/" + } else { + self.titleServerUrl = (serverUrl! as NSString).lastPathComponent + } + + // Update + let row: XLFormRowDescriptor = self.form.formRow(withTag: "ButtonDestinationFolder")! + row.cellConfig["photoLabel.text"] = self.titleServerUrl + self.updateFormRow(row) + } + } + + @objc func save() { + let name = self.fileName + guard name.trimmingCharacters(in: .whitespaces) != "" else { + let alert = UIAlertController(title: "", message: NSLocalizedString("_prompt_insert_file_name", comment: ""), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .cancel, handler: nil)) + self.present(alert, animated: true) + return + } + let ext = (name as NSString).pathExtension.uppercased() + var fileNameSave = "" + + if ext.isEmpty { + fileNameSave = name + ".m4a" + } else { + fileNameSave = (name as NSString).deletingPathExtension + ".m4a" + } + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: self.appDelegate.account, user: self.appDelegate.user, userId: self.appDelegate.userId, fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: self.serverUrl, urlBase: self.appDelegate.urlBase, url: "", contentType: "") + let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) + + metadataForUpload.session = NCNetworking.shared.sessionUploadBackground + metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile + metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload + metadataForUpload.size = utilityFileSystem.getFileSize(filePath: fileNamePath) + + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { + + guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } + + conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") + conflict.serverUrl = serverUrl + conflict.metadatasUploadInConflict = [metadataForUpload] + conflict.delegate = self + + self.present(conflict, animated: true, completion: nil) + + } else { + + dismissAndUpload(metadataForUpload) + } + } + + func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) { + + if let metadatas, metadatas.count > 0 { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.dismissAndUpload(metadatas[0]) + } + } + } + + func dismissAndUpload(_ metadata: tableMetadata) { + + AnalyticsHelper.shared.trackCreateVoiceMemo(size: metadata.size, date: metadata.creationDate as Date) + + utilityFileSystem.copyFile(atPath: self.fileNamePath, toPath: utilityFileSystem.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)) + + NCNetworkingProcess.shared.createProcessUploads(metadatas: [metadata], completion: { _ in }) + + self.dismiss(animated: true, completion: nil) + } + + @objc func cancel() { + + try? FileManager.default.removeItem(atPath: fileNamePath) + self.dismiss(animated: true, completion: nil) + } + + @objc func changeDestinationFolder(_ sender: XLFormRowDescriptor) { + + self.deselectFormRow(sender) + + let storyboard = UIStoryboard(name: "NCSelect", bundle: nil) + if let navigationController = storyboard.instantiateInitialViewController() as? UINavigationController, + let viewController = navigationController.topViewController as? NCSelect { + + viewController.delegate = self + viewController.typeOfCommandView = .selectCreateFolder + viewController.includeDirectoryE2EEncryption = true + + self.present(navigationController, animated: true, completion: nil) + } + } + + // MARK: Player - Timer + + func updateTimerUI() { + labelTimer.text = String().formatSecondsToString(counterSecondPlayer) + labelDuration.text = String().formatSecondsToString(durationPlayer) + progressView.progress = Float(counterSecondPlayer / durationPlayer) + } + + @objc func updateTimer() { + counterSecondPlayer += 1 + updateTimerUI() + } + + @IBAction func playStop(_ sender: Any) { + + if audioPlayer.isPlaying { + + stop() + + } else { + + start() + } + } + + func start() { + + audioPlayer.prepareToPlay() + audioPlayer.play() + + timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true) + + buttonPlayStop.setImage(UIImage(named: "stop")!.image(color: UIColor.systemGray, size: 100), for: .normal) + } + + func stop() { + + audioPlayer.currentTime = 0.0 + audioPlayer.stop() + + timer.invalidate() + counterSecondPlayer = 0 + progressView.progress = 0 + updateTimerUI() + + buttonPlayStop.setImage(UIImage(named: "audioPlay")!.image(color: UIColor.systemGray, size: 100), for: .normal) + } + + func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { + + timer.invalidate() + counterSecondPlayer = 0 + progressView.progress = 0 + updateTimerUI() + + buttonPlayStop.setImage(UIImage(named: "audioPlay")!.image(color: UIColor.systemGray, size: 100), for: .normal) + } +} diff --git a/iOSClient/Main/Create/TextTableViewCell.swift b/iOSClient/Main/Create/TextTableViewCell.swift new file mode 100644 index 0000000000..8777b1878a --- /dev/null +++ b/iOSClient/Main/Create/TextTableViewCell.swift @@ -0,0 +1,95 @@ +// +// TextTableViewCell.swift +// Nextcloud +// +// Created by Ashu on 23/04/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import UIKit +import XLForm + +class TextTableViewCell: XLFormBaseCell, UITextFieldDelegate { + + @IBOutlet weak var fileNameTextField: UITextField! + @IBOutlet weak var topLineView: UIView! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + + fileNameTextField.delegate = self + topLineView.backgroundColor = UIColor.secondarySystemBackground + + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + if (rowDescriptor.tag == "maskFileName"){ + topLineView.isHidden = true + }else{ + topLineView.isHidden = false + } + + fileNameTextField.tintColor = UIColor.systemGray + fileNameTextField.selectedTextRange = fileNameTextField.textRange(from: fileNameTextField.beginningOfDocument, to: fileNameTextField.endOfDocument) + } + + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + + if fileNameTextField == textField { + if let rowDescriptor = rowDescriptor, let text = self.fileNameTextField.text { + + if (text + " ").isEmpty == false { + rowDescriptor.value = self.fileNameTextField.text! + string + } else { + rowDescriptor.value = nil + } + } + } + + self.formViewController().textField(textField, shouldChangeCharactersIn: range, replacementString: string) + + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldReturn(fileNameTextField) + return true + } + + func textFieldShouldClear(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldClear(fileNameTextField) + rowDescriptor.value = nil + + self.formViewController().textField(textField, shouldChangeCharactersIn: NSRange.init().self, replacementString: "") + return true + } + + override class func formDescriptorCellHeight(for rowDescriptor: XLFormRowDescriptor!) -> CGFloat { + return 45 + } +} + +extension UITextField { + @IBInspectable var placeholderColor: UIColor { + get { + return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear + } + set { + guard let attributedPlaceholder = attributedPlaceholder else { return } + let attributes: [NSAttributedString.Key: UIColor] = [.foregroundColor: newValue] + self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes) + } + } +} diff --git a/iOSClient/Main/Create/TextTableViewCell.xib b/iOSClient/Main/Create/TextTableViewCell.xib new file mode 100644 index 0000000000..e4be37d230 --- /dev/null +++ b/iOSClient/Main/Create/TextTableViewCell.xib @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Media/NCMediaCommandView.xib b/iOSClient/Media/NCMediaCommandView.xib new file mode 100644 index 0000000000..b2df2d68eb --- /dev/null +++ b/iOSClient/Media/NCMediaCommandView.xib @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/NMC Custom Views/FolderPathCustomCell.swift b/iOSClient/NMC Custom Views/FolderPathCustomCell.swift new file mode 100644 index 0000000000..cb7553eda7 --- /dev/null +++ b/iOSClient/NMC Custom Views/FolderPathCustomCell.swift @@ -0,0 +1,34 @@ +// +// FolderPathCustomCell.swift +// Nextcloud +// +// Created by A200073704 on 04/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit +import XLForm + +class FolderPathCustomCell: XLFormButtonCell{ + + @IBOutlet weak var photoLabel: UILabel! + @IBOutlet weak var folderImage: UIImageView! + @IBOutlet weak var bottomLineView: UIView! + + override func awakeFromNib() { + super.awakeFromNib() + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + if (rowDescriptor.tag == "PhotoButtonDestinationFolder"){ + bottomLineView.isHidden = true + }else{ + bottomLineView.isHidden = false + } + } +} diff --git a/iOSClient/NMC Custom Views/FolderPathCustomCell.xib b/iOSClient/NMC Custom Views/FolderPathCustomCell.xib new file mode 100644 index 0000000000..a231ae7c72 --- /dev/null +++ b/iOSClient/NMC Custom Views/FolderPathCustomCell.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.swift b/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.swift new file mode 100644 index 0000000000..3983e413a6 --- /dev/null +++ b/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.swift @@ -0,0 +1,71 @@ +// +// NCCreateDocumentCustomTextField.swift +// Nextcloud +// +// Created by A200073704 on 04/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit +import XLForm + +class NCCreateDocumentCustomTextField: XLFormBaseCell,UITextFieldDelegate { + + @IBOutlet weak var fileNameTextField: UITextField! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + + fileNameTextField.delegate = self + + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + + if fileNameTextField == textField { + if let rowDescriptor = rowDescriptor { + if let text = textField.text{ + if (text + " ").isEmpty == false { + rowDescriptor.value = self.fileNameTextField.text! + string + } else { + rowDescriptor.value = nil + } + } + } + } + + self.formViewController().textField(textField, shouldChangeCharactersIn: range, replacementString: string) + + + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldReturn(fileNameTextField) + return true + } + + func textFieldShouldClear(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldClear(fileNameTextField) + return true + } + + override class func formDescriptorCellHeight(for rowDescriptor: XLFormRowDescriptor!) -> CGFloat { + return 45 + } +} diff --git a/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.xib b/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.xib new file mode 100644 index 0000000000..3fd86bb2d6 --- /dev/null +++ b/iOSClient/NMC Custom Views/NCCreateDocumentCustomTextField.xib @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift new file mode 100644 index 0000000000..6f245f53a1 --- /dev/null +++ b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift @@ -0,0 +1,1271 @@ +// +// NCCreateFormUploadScanDocument.swift +// Nextcloud +// +// Created by Marino Faggiana on 14/11/2018. +// Copyright © 2018 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import NextcloudKit +import Vision +import VisionKit +import Photos +import XLForm + +class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NCCreateFormUploadConflictDelegate { + + let appDelegate = UIApplication.shared.delegate as? AppDelegate + + enum TypeQuality { + case low + case medium + case high + } + var quality: TypeQuality = .medium + + var editorId = "" + var serverUrl = "" + var titleServerUrl = "" + var arrayImages: [UIImage] = [] + var fileName = NCUtilityFileSystem().createFileNameDate("scan", ext: "pdf") + var password: String = "" + var fileType = "PDF" + var isPDFWithOCRSwitchOn = false + var isPDFWithoutOCRSwitchOn = false + var isSetpasswordEnable = false + + var isTextFileSwitchOn = false + var isPNGFormatSwitchOn = false + var isJPGFormatSwitchOn = false + var isOCRActivatedFileConflicts = false + + + var cellBackgoundColor = NCBrandColor.shared.secondarySystemGroupedBackground + let utilityFileSystem = NCUtilityFileSystem() + let utility = NCUtility() + let contentPresenter = NCContentPresenter() + var controller: NCMainTabBarController! + var session: NCSession.Session { + NCSession.shared.getSession(controller: controller) + } + + // MARK: - View Life Cycle + + convenience init(serverUrl: String, arrayImages: [UIImage]) { + + self.init() + + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + titleServerUrl = "/" + } else { + titleServerUrl = utilityFileSystem.getTextServerUrl(session: session, serverUrl: serverUrl)//(serverUrl as NSString).lastPathComponent + } + + self.serverUrl = serverUrl + self.arrayImages = arrayImages + } + + // MARK: - View Life Cycle + + override func viewDidLoad() { + + super.viewDidLoad() + + self.title = NSLocalizedString("_save_settings_", comment: "") + + let saveButton : UIBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_save_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(save)) + + self.navigationItem.rightBarButtonItem = saveButton + let cancelButton : UIBarButtonItem = UIBarButtonItem(title: NSLocalizedString("_cancel_", comment: ""), style: UIBarButtonItem.Style.plain, target: self, action: #selector(cancel)) + self.navigationItem.leftBarButtonItem = cancelButton + self.navigationItem.rightBarButtonItem?.tintColor = NCBrandColor.shared.brand + self.navigationItem.leftBarButtonItem?.tintColor = NCBrandColor.shared.brand + + self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + + changeTheming() + + initializeForm() + + let value = NCKeychain().textRecognitionStatus + setTextRecognition(newValue: value) + NotificationCenter.default.addObserver(self, selector: #selector(appTerminateNotify), name: UIApplication.willTerminateNotification, object: nil) + } + + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + changeTheming() + } + + override func viewWillDisappear(_ animated: Bool) { + NotificationCenter.default.removeObserver(self) + showDeleteAlert() + } + + @objc func appTerminateNotify() { + showDeleteAlert() + } + // MARK: - Theming + + @objc func changeTheming() { + + view.backgroundColor = NCBrandColor.shared.secondarySystemGroupedBackground + tableView.backgroundColor = NCBrandColor.shared.secondarySystemGroupedBackground + cellBackgoundColor = NCBrandColor.shared.secondarySystemGroupedBackground + tableView.reloadData() + } + + // MARK: XLForm + + func initializeForm() { + + let form: XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section: XLFormSectionDescriptor + var row: XLFormRowDescriptor + + // Section: Destination Folder + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "")) + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScamFileNameCustomInputField"] = FileNameInputTextField.self + row = XLFormRowDescriptor(tag: "fileName", rowType: "NMCScamFileNameCustomInputField", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = FileNameInputTextField.self + row.cellConfig["fileNameInputTextField.placeholder"] = self.fileName + + row.cellConfig["fileNameInputTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameInputTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameInputTextField.textColor"] = NCBrandColor.shared.label + + + section.addFormRow(row) + //FileName custom view END + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_location_", comment: "")) + form.addFormSection(section) + + //Scan documnet folder path + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScanFolderPathCustomCell"] = ScanDocumentPathView.self + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "NMCScanFolderPathCustomCell", title: self.titleServerUrl) + row.action.formSelector = #selector(changeDestinationFolder(_:)) + row.cellConfig["backgroundColor"] = cellBackgoundColor + row.cellConfig["folderImage.image"] = UIImage(named: "folder")?.imageColor(NCBrandColor.shared.customer) + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["photoLabel.textColor"] = NCBrandColor.shared.label + if(self.titleServerUrl == "/"){ + row.cellConfig["photoLabel.text"] = NSLocalizedString("_prefix_upload_path_", comment: "") + }else{ + row.cellConfig["photoLabel.text"] = self.titleServerUrl + } + row.cellConfig["textLabel.text"] = "" + + section.addFormRow(row) + // END of Scan documnet folder path + + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_with_text_recognition_", comment: "")) + form.addFormSection(section) + + // Save with Text Recognition PDF + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCPdfWithOCRSwitchCell"] = PdfWithOcrSwitchView.self + row = XLFormRowDescriptor(tag: "PDFWithOCRSwitch", rowType: "NMCPdfWithOCRSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_pdf_with_ocr_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + // END of Save with Text Recognition PDF + + //Save with Text Recognition text file + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCTextFileWithOCRSwitchCell"] = TextFileWithOcrSwitchView.self + row = XLFormRowDescriptor(tag: "TextFileWithOCRSwitch", rowType: "NMCTextFileWithOCRSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_text_file_ocr_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + //END of Save with Text Recognition text file + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_without_text_recognition_", comment: "")) + form.addFormSection(section) + + // PDF without text recongnition + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCPDFWithoutOCRSwitchCell"] = PdfWithoutOcrSwitchView.self + row = XLFormRowDescriptor(tag: "PDFWithoutOCRSwitch", rowType: "NMCPDFWithoutOCRSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_pdf_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + // END of PDF without text recongnition + + // JPG without text recongnition + + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCJPGWithoutOCRSwitchCell"] = JPGImageSaveSwitchView.self + row = XLFormRowDescriptor(tag: "JPGWithoutOCRSwitch", rowType: "NMCJPGWithoutOCRSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_jpg_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + // END JPG without text recongnition + + // PNG without text recongnition + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCPNGWithoutOCRSwitchCell"] = PNGImageSaveSwitchView.self + row = XLFormRowDescriptor(tag: "PNGWithoutOCRSwitch", rowType: "NMCPNGWithoutOCRSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_png_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + // END without text recongnition + + // PDF password section + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_pdf_password_", comment: "")) + form.addFormSection(section) + // END of PDF password + + // Set PDF password switch + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCSetPDFPasswordSwitchCell"] = SetPDFPasswordSwitchView.self + row = XLFormRowDescriptor(tag: "PDFSetPasswordSwitch", rowType: "NMCSetPDFPasswordSwitchCell", title: self.titleServerUrl) + row.cellConfig["cellLabel.text"] = NSLocalizedString("_set_password_", comment: "") + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label + + section.addFormRow(row) + // END of set PDF password switch + + // enter password input field + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCSetPasswordCustomInputField"] = PasswordInputField.self + row = XLFormRowDescriptor(tag: "SetPasswordInputField", rowType: "NMCSetPasswordCustomInputField", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = PasswordInputField.self + row.cellConfig["fileNameInputTextField.placeholder"] = NSLocalizedString("_password_", comment: "") + + row.cellConfig["fileNameInputTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameInputTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameInputTextField.textColor"] = NCBrandColor.shared.label + row.cellConfig["backgroundColor"] = NCBrandColor.shared.secondarySystemGroupedBackground + row.hidden = 1 + + + section.addFormRow(row) + + // Section: Password + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_pdf_password_", comment: "")) + // form.addFormSection(section) + + row = XLFormRowDescriptor(tag: "password", rowType: XLFormRowDescriptorTypePassword, title: NSLocalizedString("_password_", comment: "")) + row.cellConfig["backgroundColor"] = NCBrandColor.shared.backgroundForm + + row.cellConfig["textLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textLabel.textColor"] = NCBrandColor.shared.label + + row.cellConfig["textField.textAlignment"] = NSTextAlignment.right.rawValue + row.cellConfig["textField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textField.textColor"] = NCBrandColor.shared.label + + self.form = form + } + + override func formRowDescriptorValueHasChanged(_ formRow: XLFormRowDescriptor!, oldValue: Any!, newValue: Any!) { + + super.formRowDescriptorValueHasChanged(formRow, oldValue: oldValue, newValue: newValue) + + if formRow.tag == "textRecognition" { + + } + + if formRow.tag == "fileName" { + + self.form.delegate = nil + + let fileNameNew = newValue as? String + + if let fileNameNew = newValue as? String { + self.fileName = utility.removeForbiddenCharacters(fileNameNew) + } else { + self.fileName = "" + } + + formRow.value = self.fileName + + self.updateFormRow(formRow) + + self.form.delegate = self + } + + if formRow.tag == "password" { + let stringPassword = newValue as? String + if stringPassword != nil { + password = stringPassword! + } else { + password = "" + } + } + + if formRow.tag == "filetype" { + fileType = newValue as? String ?? "" + + let rowFileName : XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + let rowPassword : XLFormRowDescriptor = self.form.formRow(withTag: "password")! + rowFileName.value = createFileName(rowFileName.value as? String) + + self.updateFormRow(rowFileName) + + // rowPassword + if fileType == "JPG" || fileType == "TXT" { + rowPassword.value = "" + password = "" + rowPassword.disabled = true + } else { + rowPassword.disabled = false + } + + self.updateFormRow(rowPassword) + } + + if formRow.tag == "PDFSetPasswordSwitch"{ + + isSetpasswordEnable = (formRow.value! as AnyObject).boolValue + let setPasswordInputField : XLFormRowDescriptor = self.form.formRow(withTag: "SetPasswordInputField")! + if (formRow.value! as AnyObject).boolValue == true { + setPasswordInputField.hidden = 0 + }else { + setPasswordInputField.hidden = 1 + } + } + + if formRow.tag == "PDFWithOCRSwitch"{ + //TODO + print("In PDF with OCR: value for without OCR \(isPDFWithoutOCRSwitchOn)") + isPDFWithOCRSwitchOn = (formRow.value! as AnyObject).boolValue + if (!isPDFWithoutOCRSwitchOn){ + if (formRow.value! as AnyObject).boolValue == true { + let setPasswordSwitchOption : XLFormRowDescriptor = self.form.formRow(withTag: "PDFSetPasswordSwitch")! + setPasswordSwitchOption.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label//isEnabled + setPasswordSwitchOption.value = "enable_switch" + + self.tableView.reloadData() + }else{ + let setPasswordSwitchOption : XLFormRowDescriptor = self.form.formRow(withTag: "PDFSetPasswordSwitch")! + setPasswordSwitchOption.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.graySoft + setPasswordSwitchOption.disabled = true + setPasswordSwitchOption.value = "disable_switch" + self.tableView.reloadData() + + } + } + + } + + if formRow.tag == "PDFWithoutOCRSwitch"{ + print("In PDF without OCR: value for with OCR \(isPDFWithOCRSwitchOn)") + + isPDFWithoutOCRSwitchOn = (formRow.value! as AnyObject).boolValue + if(!isPDFWithOCRSwitchOn){ + if (formRow.value! as AnyObject).boolValue == true { + let setPasswordSwitchOption : XLFormRowDescriptor = self.form.formRow(withTag: "PDFSetPasswordSwitch")! + setPasswordSwitchOption.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.label//isEnabled + setPasswordSwitchOption.value = "enable_switch" + + self.tableView.reloadData() + }else{ + let setPasswordSwitchOption : XLFormRowDescriptor = self.form.formRow(withTag: "PDFSetPasswordSwitch")! + setPasswordSwitchOption.cellConfig["cellLabel.textColor"] = NCBrandColor.shared.graySoft + setPasswordSwitchOption.disabled = true + setPasswordSwitchOption.value = "disable_switch" + self.tableView.reloadData() + + } + } + + } + + if formRow.tag == "SetPasswordInputField" { + let stringPassword = newValue as? String + if stringPassword != nil { + password = stringPassword! + } else { + password = "" + } + } + + if formRow.tag == "TextFileWithOCRSwitch" { + isTextFileSwitchOn = (formRow.value! as AnyObject).boolValue + self.setTextRecognition(newValue: newValue as? Bool ?? false) + } + if formRow.tag == "JPGWithoutOCRSwitch" { + isJPGFormatSwitchOn = (formRow.value! as AnyObject).boolValue + } + if formRow.tag == "PNGWithoutOCRSwitch" { + isPNGFormatSwitchOn = (formRow.value! as AnyObject).boolValue + } + + + } + + + override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return 4 + } + func setTextRecognition(newValue: Bool) { + + let rowFileName: XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + + self.form.delegate = nil + fileType = "PDF" + rowFileName.value = createFileName(rowFileName.value as? String) + self.updateFormRow(rowFileName) + self.tableView.reloadData() + + NCKeychain().textRecognitionStatus = newValue + + self.form.delegate = self + } + + func createFileName(_ fileName: String?) -> String { + + var name: String = "" + var newFileName: String = "" + + if fileName == nil || fileName == "" { + name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") + } else { + name = fileName! + } + + let ext = (name as NSString).pathExtension.uppercased() + + if ext == "" { + newFileName = name + "." + fileType.lowercased() + } else { + newFileName = (name as NSString).deletingPathExtension + "." + fileType.lowercased() + } + + return newFileName + } + + // MARK: - Action + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { + + if serverUrl != nil { + + self.serverUrl = serverUrl! + + if serverUrl == utilityFileSystem.getHomeServer(session: session) { + self.titleServerUrl = "/" + } else { + self.titleServerUrl = (serverUrl! as NSString).lastPathComponent + } + + // Update + let row : XLFormRowDescriptor = self.form.formRow(withTag: "ButtonDestinationFolder")! + row.title = self.titleServerUrl + row.cellConfig["photoLabel.text"] = self.titleServerUrl + self.updateFormRow(row) + } + } + + func startProcessForSaving(){ + + let rowFileName : XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + guard let name = rowFileName.value else { + return + } + if name as? String == "" { + return + } + + let ext = (name as? NSString)?.pathExtension.uppercased() + var fileNameSave = "" + + if ext == "" { + fileNameSave = (name as? String ?? "") + "." + fileType.lowercased() + } else { + fileNameSave = ((name as? NSString)?.deletingPathExtension ?? "") + "." + fileType.lowercased() + } + + + NCActivityIndicator.shared.startActivity(backgroundView: self.view, style: .medium) + + saveImages(fileNameSave: fileNameSave,fileType: "jpg",metadataConflict: nil,completion: { (success) -> Void in + print("jpg line of code executed") + if success { // this will be equal to whatever value is set in this method call + print("true") + saveImages(fileNameSave: fileNameSave,fileType: "png",metadataConflict: nil,completion: { (success) -> Void in + print("png line of code executed") + if success { + if(isPDFWithOCRSwitchOn){ + savePDF(ocrSwitchOn: true,completion: {(success) -> Void in + if success{ + if(isPDFWithoutOCRSwitchOn){ + savePDF(ocrSwitchOn: false, completion: {(success) -> Void in + if success{ + //Save Text File + if(isTextFileSwitchOn){ + saveTxtFile(completion: {(success) -> Void in + if success{ + //DELETE Files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + }) + }else{ + //DELETE files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + } + }) + }else{ + //Save Text File + if(isTextFileSwitchOn){ + saveTxtFile(completion: {(success) -> Void in + if success{ + //DELETE Files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + }) + }else{ + //DELETE files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + } + } + }) + }else { + if(isPDFWithoutOCRSwitchOn){ + savePDF(ocrSwitchOn: false, completion: {(success) -> Void in + if success{ + //Save Text File + if(isTextFileSwitchOn){ + saveTxtFile(completion: {(success) -> Void in + if success{ + //DELETE Files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + }) + }else{ + //DELETE files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + } + }) + }else{ + //Save Text File + if(isTextFileSwitchOn){ + saveTxtFile(completion: {(success) -> Void in + if success{ + //DELETE Files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + }) + }else{ + //DELETE files + showDeleteAlert() + NCActivityIndicator.shared.stop() + } + } + } + } + }) + } + }) + } + + + @objc func save() { + let password = (getPasswordFromField() ?? "").trimmingCharacters(in: .whitespaces) + self.password = password + + if(isSetpasswordEnable && password == ""){ + showAlert() + return + } + + if(!isAtleastOneFiletypeSelected()){ + + let alertController = UIAlertController(title: "", message: NSLocalizedString("_no_file_type_selection_error_", comment: ""), preferredStyle: .alert) + let alertWindow = UIWindow(frame: UIScreen.main.bounds) + alertWindow.windowLevel = UIWindow.Level.alert + alertWindow.rootViewController = UIViewController() + alertWindow.makeKeyAndVisible() + let actionOk = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { (action:UIAlertAction) in + alertController.dismiss(animated: true, completion: nil) + } + + alertController.addAction(actionOk) + self.present(alertController, animated: true) + }else { + // Request delete all image scanned + let alertController = UIAlertController(title: "", message: NSLocalizedString("_saved_info_alert_", comment: ""), preferredStyle: .alert) + let alertWindow = UIWindow(frame: UIScreen.main.bounds) + alertWindow.windowLevel = UIWindow.Level.alert + alertWindow.rootViewController = UIViewController() + alertWindow.makeKeyAndVisible() + let actionOk = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { (action:UIAlertAction) in + self.startProcessForSaving() + alertController.dismiss(animated: true, completion: nil) + } + + alertController.addAction(actionOk) + self.present(alertController, animated: true) + } + + } + + func showAlert(){ + // Request delete all image scanned + let alertController = UIAlertController(title: "", message: NSLocalizedString("_no_password_warn_", comment: ""), preferredStyle: .alert) + let alertWindow = UIWindow(frame: UIScreen.main.bounds) + alertWindow.windowLevel = UIWindow.Level.alert + alertWindow.rootViewController = UIViewController() + alertWindow.makeKeyAndVisible() + let actionOk = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { (action:UIAlertAction) in + alertController.dismiss(animated: true, completion: nil) + } + + alertController.addAction(actionOk) + //alertWindow.addSubview(alertController) + self.present(alertController, animated: true) + //alertWindow.rootViewController?.present(alertController, animated: true, completion: nil) + + } + + func showAlertForInfo(){ + // Request delete all image scanned + let alertController = UIAlertController(title: "", message: NSLocalizedString("_saved_info_alert_", comment: ""), preferredStyle: .alert) + let alertWindow = UIWindow(frame: UIScreen.main.bounds) + alertWindow.windowLevel = UIWindow.Level.alert + alertWindow.rootViewController = UIViewController() + alertWindow.makeKeyAndVisible() + let actionOk = UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default) { (action:UIAlertAction) in + alertController.dismiss(animated: true, completion: nil) + } + + alertController.addAction(actionOk) + //alertWindow.addSubview(alertController) + self.present(alertController, animated: true) + } + func saveTxtFile(completion: (Bool) -> ()){ + + let rowFileName : XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + guard var name = rowFileName.value else { + return + } + if name as? String == "" { + return + } + + for count in 0.. ()){ + + let rowFileName : XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + guard var name = rowFileName.value else { + return + } + if name as? String == "" { + return + } + + if (ocrSwitchOn){ + name = name as? String + } + + let ext = (name as? NSString)?.pathExtension.uppercased() + var fileNameSave = "" + + if (ext == "") { + if (ocrSwitchOn){ + fileNameSave = (name as? String ?? "") + "_OCR" + "." + "pdf" + }else{ + fileNameSave = (name as? String ?? "") + "." + "pdf" + } + } else { + if(ocrSwitchOn){ + fileNameSave = ((name as? NSString)?.deletingPathExtension ?? "") + "_OCR" + "." + fileType.lowercased() + + }else{ + fileNameSave = ((name as? NSString)?.deletingPathExtension ?? "") + "." + fileType.lowercased() + } + } + + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") + let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) + + metadataForUpload.session = NCNetworking.shared.sessionUploadBackground + metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile + metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload + + NCActivityIndicator.shared.startActivity(backgroundView: self.view, style: .medium) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.isPDFWithOCRSwitchOn = ocrSwitchOn + self.dismissAndUpload(metadataForUpload, fileType: "PDF") + } + + completion(true) + } + + fileprivate func showDeleteAlert() { + + let path = utilityFileSystem.directoryScan + + do { + let filePaths = try FileManager.default.contentsOfDirectory(atPath: path) + for filePath in filePaths { + try FileManager.default.removeItem(atPath: path + "/" + filePath) + } + } catch let error as NSError { + print("Error: \(error.debugDescription)") + } + + self.dismiss(animated: true, completion: nil) + } + + func saveImages(fileNameSave: String, fileType: String, metadataConflict: tableMetadata?, completion: (Bool) -> ()) { + + if(!isJPGFormatSwitchOn && fileType == "jpg"){ + completion(true) + return + }else if(!isPNGFormatSwitchOn && fileType == "png"){ + completion(true) + return + } + else { + let rowFileName : XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + guard var name = rowFileName.value else { + return + } + if name as? String == "" { + return + } + + for count in 0.. 0 { + NCActivityIndicator.shared.startActivity(backgroundView: self.view, style: .medium) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + // if let metadata = metadatas![0] as? tableMetadata{ + if (metadatas![0].fileExtension == "jpg"){ + //TODO for jpg + self.dismissAndUpload(metadatas![0],fileType: "JPG") + NCActivityIndicator.shared.stop() + + }else if(metadatas![0].fileExtension == "png") { + //TODO for png + self.dismissAndUpload(metadatas![0],fileType: "PNG") + NCActivityIndicator.shared.stop() + + + }else if(metadatas![0].fileExtension == "pdf"){ + //TODO for pdf + self.isOCRActivatedFileConflicts = metadatas![0].fileName.contains("_OCR") + self.dismissAndUpload(metadatas![0],fileType: "PDF") + NCActivityIndicator.shared.stop() + + }else if(metadatas![0].fileExtension == "txt"){ + //TODO for txt + self.dismissAndUpload(metadatas![0],fileType: "TXT") + NCActivityIndicator.shared.stop() + + } + } + } + } + + func dismissAndUpload(_ metadata: tableMetadata, fileType: String?) { + + let fileNameGenerateExport = utilityFileSystem.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView) + let fileUrl = URL(fileURLWithPath: fileNameGenerateExport) + + // Text Recognition TXT + // if fileType == "TXT" && self.form.formRow(withTag: "textRecognition")!.value as! Int == 1 { + if fileType == "TXT" { + + var textFile = "" + for image in self.arrayImages { + + let requestHandler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:]) + + let request = VNRecognizeTextRequest { request, _ in + guard let observations = request.results as? [VNRecognizedTextObservation] else { + NCActivityIndicator.shared.stop() + return + } + for observation in observations { + guard let textLine = observation.topCandidates(1).first else { + continue + } + + textFile += textLine.string + textFile += "\n" + } + } + + request.recognitionLevel = .accurate + request.usesLanguageCorrection = true + try? requestHandler.perform([request]) + } + + do { + + try textFile.write(to: fileUrl, atomically: true, encoding: .utf8) + } catch { + NCActivityIndicator.shared.stop() + let error = NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: "_error_creation_file_") + contentPresenter.showError(error: error) + return + } + } + + if fileType == "PDF" { + + let pdfData = NSMutableData() + + if !password.isEmpty { + for char in password.unicodeScalars { + if !char.isASCII { + NCActivityIndicator.shared.stop() + let error = NKError(errorCode: NCGlobal.shared.errorForbidden, errorDescription: "_password_ascii_") + contentPresenter.showError(error: error) + return + } + } + let info: [AnyHashable: Any] = [kCGPDFContextUserPassword as String: password, kCGPDFContextOwnerPassword as String: password] + UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, info) + } else { + UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, nil) + } + var fontColor = UIColor.clear +#if targetEnvironment(simulator) + fontColor = UIColor.red +#endif + + for var image in self.arrayImages { + + image = changeCompressionImage(image) + + let bounds = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height) + + //self.form.formRow(withTag: "textRecognition")!.value as! Int == 1 + if isPDFWithOCRSwitchOn { + + UIGraphicsBeginPDFPageWithInfo(bounds, nil) + image.draw(in: bounds) + + let requestHandler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:]) + + let request = VNRecognizeTextRequest { request, _ in + guard let observations = request.results as? [VNRecognizedTextObservation] else { + NCActivityIndicator.shared.stop() + return + } + for observation in observations { + guard let textLine = observation.topCandidates(1).first else { + continue + } + + var t: CGAffineTransform = CGAffineTransform.identity + t = t.scaledBy(x: image.size.width, y: -image.size.height) + t = t.translatedBy(x: 0, y: -1) + let rect = observation.boundingBox.applying(t) + let text = textLine.string + + let font = UIFont.systemFont(ofSize: rect.size.height, weight: .regular) + let attributes = self.bestFittingFont(for: text, in: rect, fontDescriptor: font.fontDescriptor, fontColor: fontColor) + + text.draw(with: rect, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) + } + } + + request.recognitionLevel = .accurate + request.usesLanguageCorrection = true + try? requestHandler.perform([request]) + + } else { + + UIGraphicsBeginPDFPageWithInfo(bounds, nil) + image.draw(in: bounds) + } + } + + UIGraphicsEndPDFContext() + + do { + try pdfData.write(to: fileUrl, options: .atomic) + } catch { + print("error catched") + } + } + + if fileType == "JPG" { + + //let image = changeCompressionImage(self.arrayImages[0]) + + for image in self.arrayImages { + // let image = changeCompressionImage(self.arrayImages[0]) + guard let data = image.jpegData(compressionQuality: CGFloat(0.5)) else { + NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) + return + } + + do { + try data.write(to: fileUrl, options: .atomic) + } catch { + NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) + return + } + } + + + } + + if fileType == "PNG" { + + //let image = changeCompressionImage(self.arrayImages[0]) + + for image in self.arrayImages { + // let image = changeCompressionImage(self.arrayImages[0]) + guard let data = image.jpegData(compressionQuality: CGFloat(0.5)) else { + NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) + return + } + + do { + try data.write(to: NSURL.fileURL(withPath: fileNameGenerateExport), options: .atomic) + } catch { + NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) + return + } + } + } + + metadata.size = utilityFileSystem.getFileSize(filePath: fileNameGenerateExport) + + NCActivityIndicator.shared.stop() + + NCNetworkingProcess.shared.createProcessUploads(metadatas: [metadata], completion: { _ in }) + + // Request delete all image scanned + let alertController = UIAlertController(title: "", message: NSLocalizedString("_delete_all_scanned_images_", comment: ""), preferredStyle: .alert) + + let actionYes = UIAlertAction(title: NSLocalizedString("_yes_delete_", comment: ""), style: .default) { [self] (_: UIAlertAction) in + + let path = utilityFileSystem.directoryScan + + do { + let filePaths = try FileManager.default.contentsOfDirectory(atPath: path) + for filePath in filePaths { + try FileManager.default.removeItem(atPath: path + "/" + filePath) + } + } catch let error as NSError { + print("Error: \(error.debugDescription)") + } + + self.dismiss(animated: true, completion: nil) + } + + let actionNo = UIAlertAction(title: NSLocalizedString("_no_delete_", comment: ""), style: .default) { (_: UIAlertAction) in + self.dismiss(animated: true, completion: nil) + } + + alertController.addAction(actionYes) + alertController.addAction(actionNo) + self.present(alertController, animated: true, completion: nil) + } + + + @objc func cancel() { + + self.dismiss(animated: true, completion: nil) + } + + @objc func changeDestinationFolder(_ sender: XLFormRowDescriptor) { + + self.deselectFormRow(sender) + let storyboard = UIStoryboard(name: "NCSelect", bundle: nil) + if let navigationController = storyboard.instantiateInitialViewController() as? UINavigationController { + let viewController = navigationController.topViewController as? NCSelect + viewController?.delegate = self + viewController?.typeOfCommandView = .selectCreateFolder + viewController?.includeDirectoryE2EEncryption = true + self.present(navigationController, animated: true, completion: nil) + } + + } + + func changeCompressionImage(_ image: UIImage) -> UIImage { + + var compressionQuality: CGFloat = 0.5 + var baseHeight: Float = 595.2 // A4 + var baseWidth: Float = 841.8 // A4 + + switch quality { + case .low: + baseHeight *= 1 + baseWidth *= 1 + compressionQuality = 0.3 + case .medium: + baseHeight *= 2 + baseWidth *= 2 + compressionQuality = 0.6 + case .high: + baseHeight *= 4 + baseWidth *= 4 + compressionQuality = 0.9 + } + + var newHeight = Float(image.size.height) + var newWidth = Float(image.size.width) + var imgRatio: Float = newWidth / newHeight + let baseRatio: Float = baseWidth / baseHeight + + if newHeight > baseHeight || newWidth > baseWidth { + if imgRatio < baseRatio { + imgRatio = baseHeight / newHeight + newWidth = imgRatio * newWidth + newHeight = baseHeight + } else if imgRatio > baseRatio { + imgRatio = baseWidth / newWidth + newHeight = imgRatio * newHeight + newWidth = baseWidth + } else { + newHeight = baseHeight + newWidth = baseWidth + } + } + + let rect = CGRect(x: 0.0, y: 0.0, width: CGFloat(newWidth), height: CGFloat(newHeight)) + UIGraphicsBeginImageContext(rect.size) + image.draw(in: rect) + let img = UIGraphicsGetImageFromCurrentImageContext() + let imageData = img?.jpegData(compressionQuality: CGFloat(compressionQuality)) + UIGraphicsEndImageContext() + return UIImage(data: imageData!) ?? image + } + + func bestFittingFont(for text: String, in bounds: CGRect, fontDescriptor: UIFontDescriptor, fontColor: UIColor) -> [NSAttributedString.Key: Any] { + + let constrainingDimension = min(bounds.width, bounds.height) + let properBounds = CGRect(origin: .zero, size: bounds.size) + var attributes: [NSAttributedString.Key: Any] = [:] + + let infiniteBounds = CGSize(width: CGFloat.infinity, height: CGFloat.infinity) + var bestFontSize: CGFloat = constrainingDimension + + // Search font (H) + for fontSize in stride(from: bestFontSize, through: 0, by: -1) { + let newFont = UIFont(descriptor: fontDescriptor, size: fontSize) + attributes[.font] = newFont + + let currentFrame = text.boundingRect(with: infiniteBounds, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: attributes, context: nil) + + if properBounds.contains(currentFrame) { + bestFontSize = fontSize + break + } + } + + // Search kern (W) + let font = UIFont(descriptor: fontDescriptor, size: bestFontSize) + attributes = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: fontColor, NSAttributedString.Key.kern: 0] as [NSAttributedString.Key: Any] + for kern in stride(from: 0, through: 100, by: 0.1) { + let attributesTmp = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: fontColor, NSAttributedString.Key.kern: kern] as [NSAttributedString.Key: Any] + let size = text.size(withAttributes: attributesTmp).width + if size <= bounds.width { + attributes = attributesTmp + } else { + break + } + } + + return attributes + } + + func isAtleastOneFiletypeSelected() -> Bool{ + if(isPDFWithOCRSwitchOn + || isPDFWithoutOCRSwitchOn + || isTextFileSwitchOn + || isPNGFormatSwitchOn + || isJPGFormatSwitchOn){ + + return true + }else{ + return false + } + } + + func getPasswordFromField() -> String? { + if let setPasswordInputField : XLFormRowDescriptor = self.form.formRow(withTag: "SetPasswordInputField") { + var password = "" + if let indexPath = self.form.indexPath(ofFormRow: setPasswordInputField) { + let cell = tableView.cellForRow(at: indexPath) as? PasswordInputField + password = cell?.fileNameInputTextField.text ?? "" + } + return password + } + return nil + } +} + diff --git a/iOSClient/Scan document/NMC Views/FileNameInputTextField.swift b/iOSClient/Scan document/NMC Views/FileNameInputTextField.swift new file mode 100644 index 0000000000..e18ed84451 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/FileNameInputTextField.swift @@ -0,0 +1,67 @@ +// +// FileNameInputTextField.swift +// Nextcloud +// +// Created by Sumit on 03/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class FileNameInputTextField: XLFormBaseCell,UITextFieldDelegate { + + @IBOutlet weak var fileNameInputTextField: UITextField! + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + + fileNameInputTextField.delegate = self + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + + if fileNameInputTextField == textField { + if let rowDescriptor = rowDescriptor, let text = self.fileNameInputTextField.text { + + if (text + " ").isEmpty == false { + rowDescriptor.value = self.fileNameInputTextField.text! + string + } else { + rowDescriptor.value = nil + } + } + } + + self.formViewController().textField(textField, shouldChangeCharactersIn: range, replacementString: string) + + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldReturn(fileNameInputTextField) + return true + } + + func textFieldShouldClear(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldClear(fileNameInputTextField) + return true + } + + override class func formDescriptorCellHeight(for rowDescriptor: XLFormRowDescriptor!) -> CGFloat { + return 45 + } +} diff --git a/iOSClient/Scan document/NMC Views/FileNameInputTextField.xib b/iOSClient/Scan document/NMC Views/FileNameInputTextField.xib new file mode 100644 index 0000000000..173862a3ae --- /dev/null +++ b/iOSClient/Scan document/NMC Views/FileNameInputTextField.xib @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift new file mode 100644 index 0000000000..5d825dc6d8 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift @@ -0,0 +1,43 @@ +// +// JPGmageSaveSwitchView.swift +// Nextcloud +// +// Created by Sumit on 04/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class JPGImageSaveSwitchView: XLFormBaseCell{ + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + // Do something + + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } +} diff --git a/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.xib b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.xib new file mode 100644 index 0000000000..8658100453 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.xib @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift new file mode 100644 index 0000000000..93211a28f8 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift @@ -0,0 +1,43 @@ +// +// PNGImageSaveSwitchView.swift +// Nextcloud +// +// Created by Sumit on 09/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class PNGImageSaveSwitchView: XLFormBaseCell{ + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + // Do something + + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } +} diff --git a/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.xib b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.xib new file mode 100644 index 0000000000..d3c7312316 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.xib @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/PasswordInputField.swift b/iOSClient/Scan document/NMC Views/PasswordInputField.swift new file mode 100644 index 0000000000..43117f09f3 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PasswordInputField.swift @@ -0,0 +1,73 @@ +// +// PasswordInputField.swift +// Nextcloud +// +// Created by Sumit on 10/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class PasswordInputField: XLFormBaseCell,UITextFieldDelegate { + + @IBOutlet weak var fileNameInputTextField: UITextField! + @IBOutlet weak var separatorBottom: UIView! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + fileNameInputTextField.isSecureTextEntry = true + fileNameInputTextField.delegate = self + separatorBottom.backgroundColor = NCBrandColor.shared.systemGray4 + self.selectionStyle = .none + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + override func configure() { + super.configure() + // fileNameInputTextField.isEnabled = false + + } + + override func update() { + super.update() + } + + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + + if fileNameInputTextField == textField { + if let rowDescriptor = rowDescriptor, let text = self.fileNameInputTextField.text { + + if (text + " ").isEmpty == false { + rowDescriptor.value = self.fileNameInputTextField.text! + string + } else { + rowDescriptor.value = nil + } + } + } + + self.formViewController().textField(textField, shouldChangeCharactersIn: range, replacementString: string) + + return true + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldReturn(fileNameInputTextField) + return true + } + + func textFieldShouldClear(_ textField: UITextField) -> Bool { + self.formViewController()?.textFieldShouldClear(fileNameInputTextField) + return true + } + + override class func formDescriptorCellHeight(for rowDescriptor: XLFormRowDescriptor!) -> CGFloat { + return 45 + } +} diff --git a/iOSClient/Scan document/NMC Views/PasswordInputField.xib b/iOSClient/Scan document/NMC Views/PasswordInputField.xib new file mode 100644 index 0000000000..26914e0760 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PasswordInputField.xib @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.swift b/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.swift new file mode 100644 index 0000000000..5b0e76ddcc --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.swift @@ -0,0 +1,43 @@ +// +// PdfWithOcrSwitchView.swift +// Nextcloud +// +// Created by Sumit on 04/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class PdfWithOcrSwitchView: XLFormBaseCell{ + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + // Do something + + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } +} diff --git a/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.xib b/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.xib new file mode 100644 index 0000000000..06cdcae9b6 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PdfWithOcrSwitchView.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift new file mode 100644 index 0000000000..2144580281 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift @@ -0,0 +1,43 @@ +// +// PdfWithoutOcrSwitchView.swift +// Nextcloud +// +// Created by Sumit on 04/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class PdfWithoutOcrSwitchView: XLFormBaseCell{ + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + // Do something + + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } +} diff --git a/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.xib b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.xib new file mode 100644 index 0000000000..46ebf565f7 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/ScanDocumentPathView.swift b/iOSClient/Scan document/NMC Views/ScanDocumentPathView.swift new file mode 100644 index 0000000000..666e4805fd --- /dev/null +++ b/iOSClient/Scan document/NMC Views/ScanDocumentPathView.swift @@ -0,0 +1,34 @@ +// +// ScanDocumentPathView.swift +// Nextcloud +// +// Created by Sumit on 03/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class ScanDocumentPathView: XLFormButtonCell{ + + @IBOutlet weak var photoLabel: UILabel! + @IBOutlet weak var folderImage: UIImageView! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + + + } + + override func configure() { + super.configure() + + + } + + override func update() { + super.update() + } + +} diff --git a/iOSClient/Scan document/NMC Views/ScanDocumentPathView.xib b/iOSClient/Scan document/NMC Views/ScanDocumentPathView.xib new file mode 100644 index 0000000000..fa30321541 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/ScanDocumentPathView.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.swift b/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.swift new file mode 100644 index 0000000000..6090b4e787 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.swift @@ -0,0 +1,53 @@ +// +// SetPDFPasswordSwitchView.swift +// Nextcloud +// +// Created by Sumit on 10/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class SetPDFPasswordSwitchView: XLFormBaseCell{ + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + self.switchControl.isEnabled = false + } + + override func update() { + super.update() + + if let rowValue = rowDescriptor.value as? String { + if (rowValue == "disable_switch"){ + self.switchControl.isEnabled = false + self.switchControl.isOn = false + }else if(rowValue == "enable_switch"){ + self.switchControl.isEnabled = true + } + } + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + // Do something + + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } +} diff --git a/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.xib b/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.xib new file mode 100644 index 0000000000..e0ddc1ca1a --- /dev/null +++ b/iOSClient/Scan document/NMC Views/SetPDFPasswordSwitchView.xib @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.swift b/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.swift new file mode 100644 index 0000000000..9ecac2bf75 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.swift @@ -0,0 +1,41 @@ +// +// TextFileWithOcrSwitchView.swift +// Nextcloud +// +// Created by Sumit on 04/06/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import XLForm + +class TextFileWithOcrSwitchView: XLFormBaseCell{ + @IBOutlet weak var switchControl: UISwitch! + @IBOutlet weak var cellLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + self.selectionStyle = .none + switchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + } + + override func configure() { + super.configure() + + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + let value = mySwitch.isOn + if value { + //on + self.rowDescriptor.value = value + }else{ + self.rowDescriptor.value = value + } + } + +} diff --git a/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.xib b/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.xib new file mode 100644 index 0000000000..5f0ff73601 --- /dev/null +++ b/iOSClient/Scan document/NMC Views/TextFileWithOcrSwitchView.xib @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/AnalysisDataCollectionSwitch.swift b/iOSClient/Settings/AnalysisDataCollectionSwitch.swift new file mode 100644 index 0000000000..e24216220f --- /dev/null +++ b/iOSClient/Settings/AnalysisDataCollectionSwitch.swift @@ -0,0 +1,34 @@ +// +// AnalysisDataCollectionSwitch.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit + +class AnalysisDataCollectionSwitch: XLFormBaseCell { + + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var analysisDataCollectionSwitchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + analysisDataCollectionSwitchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } + + @objc func switchChanged(mySwitch: UISwitch) { + self.rowDescriptor.value = mySwitch.isOn + } +} + diff --git a/iOSClient/Settings/AnalysisDataCollectionSwitch.xib b/iOSClient/Settings/AnalysisDataCollectionSwitch.xib new file mode 100644 index 0000000000..45530193f6 --- /dev/null +++ b/iOSClient/Settings/AnalysisDataCollectionSwitch.xib @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/CCAdvanced.h b/iOSClient/Settings/CCAdvanced.h new file mode 100755 index 0000000000..7f9845888f --- /dev/null +++ b/iOSClient/Settings/CCAdvanced.h @@ -0,0 +1,29 @@ +// +// CCAdvanced.h +// Nextcloud +// +// Created by Marino Faggiana on 12/04/17. +// Copyright (c) 2017 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import +#import + +@interface CCAdvanced : XLFormViewController + +@end diff --git a/iOSClient/Settings/CCAdvanced.m b/iOSClient/Settings/CCAdvanced.m new file mode 100755 index 0000000000..d35322fb22 --- /dev/null +++ b/iOSClient/Settings/CCAdvanced.m @@ -0,0 +1,487 @@ +// +// CCManageHelp.m +// Nextcloud +// +// Created by Marino Faggiana on 06/11/15. +// Copyright (c) 2015 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import "CCAdvanced.h" +#import "CCUtility.h" +#import "NCBridgeSwift.h" +#import "AdjustHelper.h" + +@interface CCAdvanced () +{ + AppDelegate *appDelegate; + XLFormSectionDescriptor *sectionSize; + TealiumHelper *tealium; + AdjustHelper *adjust; +} +@end + +@implementation CCAdvanced + +- (void)initializeForm +{ + XLFormDescriptor *form = [XLFormDescriptor formDescriptor]; + XLFormSectionDescriptor *section; + XLFormRowDescriptor *row; + + // Section HIDDEN FILES ------------------------------------------------- + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"showHiddenFiles" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_show_hidden_files_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if ([[[NCKeychain alloc] init] showHiddenFiles]) row.value = @"1"; + else row.value = @"0"; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Format Compatibility + Live Photo + Delete asset + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + section.footerTitle = [NSString stringWithFormat:@"%@\n%@\n%@", NSLocalizedString(@"_format_compatibility_footer_", nil), NSLocalizedString(@"_upload_mov_livephoto_footer_", nil), NSLocalizedString(@"_remove_photo_CameraRoll_desc_", nil)]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"formatCompatibility" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_format_compatibility_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if ([[[NCKeychain alloc] init] formatCompatibility]) row.value = @"1"; + else row.value = @"0"; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"livePhoto" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_upload_mov_livephoto_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if ([[[NCKeychain alloc] init] livePhoto]) row.value = @"1"; + else row.value = @"0"; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"removePhotoCameraRoll" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_remove_photo_CameraRoll_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if ([[[NCKeychain alloc] init] removePhotoCameraRoll]) row.value = @"1"; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [section addFormRow:row]; + + // Section : Files App -------------------------------------------------------------- + + if (![NCBrandOptions shared].disable_openin_file) { + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + section.footerTitle = NSLocalizedString(@"_disable_files_app_footer_", nil); + + // Disable Files App + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"disablefilesapp" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_disable_files_app_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if ([[NCKeychain alloc] init].disableFilesApp) row.value = @"1"; + else row.value = @"0"; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + } + + // Section : Privacy -------------------------------------------------------------- + + if (!NCBrandOptions.shared.disable_crash_service) { + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_privacy_", nil)]; + [form addFormSection:section]; + section.footerTitle = NSLocalizedString(@"_privacy_footer_", nil); + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"crashservice" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_crashservice_title_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"crashservice"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + if ([[[NCKeychain alloc] init] disableCrashservice]) row.value = @"1"; + else row.value = @"0"; + [section addFormRow:row]; + } + +#ifdef DEBUG + // Section DIAGNOSTICS ------------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_diagnostics_", nil)]; + [form addFormSection:section]; + +// if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { + if ([[NSFileManager defaultManager] fileExistsAtPath:@""] && NCBrandOptions.shared.disable_log == false) { + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"log" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_view_log_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"log"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.action.formBlock = ^(XLFormRowDescriptor * sender) { + + [self deselectFormRow:sender]; +// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:@""] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + [self presentViewController:viewerQuickLook animated:YES completion:nil]; + }; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"clearlog" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_clear_log_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"clear"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.action.formBlock = ^(XLFormRowDescriptor * sender) { + + [self deselectFormRow:sender]; + +// [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; + + NSInteger logLevel = [[NCKeychain alloc] init].logLevel; + BOOL isSimulatorOrTestFlight = [[[NCUtility alloc] init] isSimulatorOrTestFlight]; + NSString *versionNextcloudiOS = [NSString stringWithFormat:[NCBrandOptions shared].textCopyrightNextcloudiOS, [[[NCUtility alloc] init] getVersionAppWithBuild:true]]; +// if (isSimulatorOrTestFlight) { +// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; +// } else { +// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; +// } + }; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"logLevel" rowType:XLFormRowDescriptorTypeSlider title:NSLocalizedString(@"_level_log_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentCenter) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + NSInteger logLevel = [[NCKeychain alloc] init].logLevel; + row.value = @(logLevel); + [row.cellConfigAtConfigure setObject:@(2) forKey:@"slider.maximumValue"]; + [row.cellConfigAtConfigure setObject:@(0) forKey:@"slider.minimumValue"]; + [row.cellConfigAtConfigure setObject:@(2) forKey:@"steps"]; + [section addFormRow:row]; + } + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"capabilities" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_capabilities_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"capabilities"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.action.formBlock = ^(XLFormRowDescriptor * sender) { + + [self deselectFormRow:sender]; + + UIViewController *vc = [[NCHostingCapabilitiesView alloc] makeShipDetailsUI]; + [self.navigationController pushViewController:vc animated:YES]; + }; + [section addFormRow:row]; +#endif + + // Section : Delete files / Clear cache -------------------------------------------------------------- + + sectionSize = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_delete_files_desc_", nil)]; + [form addFormSection:sectionSize]; + sectionSize.footerTitle = NSLocalizedString(@"_clear_cache_footer_", nil); + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"deleteoldfiles" rowType:XLFormRowDescriptorTypeSelectorPush title:NSLocalizedString(@"_delete_old_files_", nil)]; + + switch ([[NCKeychain alloc] init].cleanUpDay) { + case 0: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_never_", nil)]; + break; + case 365: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(365) displayText:NSLocalizedString(@"_1_year_", nil)]; + break; + case 180: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(180) displayText:NSLocalizedString(@"_6_months_", nil)]; + break; + case 90: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(90) displayText:NSLocalizedString(@"_3_months_", nil)]; + break; + case 30: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(30) displayText:NSLocalizedString(@"_1_month_", nil)]; + break; + case 7: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(7) displayText:NSLocalizedString(@"_1_week_", nil)]; + break; + case 1: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:NSLocalizedString(@"_1_day_", nil)]; + break; + default: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_never_", nil)]; + break; + } + + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.cellConfigForSelector[@"tintColor"] = NCBrandColor.shared.customer; + row.selectorTitle = NSLocalizedString(@"_delete_old_files_", nil); + row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_never_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(365) displayText:NSLocalizedString(@"_1_year_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(180) displayText:NSLocalizedString(@"_6_months_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(90) displayText:NSLocalizedString(@"_3_months_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(30) displayText:NSLocalizedString(@"_1_month_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(7) displayText:NSLocalizedString(@"_1_week_", nil)], + ]; + [sectionSize addFormRow:row]; + + // Clear cache + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"azzeracache" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_clear_cache_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"trash"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.action.formSelector = @selector(clearCacheRequest:); + [sectionSize addFormRow:row]; + + // Section EXIT -------------------------------------------------------- + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + section.footerTitle = NSLocalizedString(@"_exit_footer_", nil); + + // Exit + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"esci" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_exit_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:[UIColor redColor] forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"xmark"] imageWithColor:[UIColor redColor] size:25] forKey:@"imageView.image"]; + row.action.formSelector = @selector(exitNextcloud:); + [section addFormRow:row]; + + self.tableView.showsVerticalScrollIndicator = NO; + self.form = form; +} + +// MARK: - View Life Cycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title = NSLocalizedString(@"_advanced_", nil); + appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; + self.view.backgroundColor = UIColor.systemGroupedBackgroundColor; + + adjust = [[AdjustHelper alloc] init]; + self.tableView.backgroundColor = UIColor.systemGroupedBackgroundColor; + + [self initializeForm]; + [self calculateSize]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + appDelegate.activeViewController = self; +} + +#pragma mark - + +- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue +{ + [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; + + if ([rowDescriptor.tag isEqualToString:@"showHiddenFiles"]) { + + [[NCKeychain alloc] init].showHiddenFiles = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"formatCompatibility"]) { + + [[NCKeychain alloc] init].formatCompatibility = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"livePhoto"]) { + + [[NCKeychain alloc] init].livePhoto = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"removePhotoCameraRoll"]) { + + [[NCKeychain alloc] init].removePhotoCameraRoll = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"disablefilesapp"]) { + + [[NCKeychain alloc] init].disableFilesApp = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"crashservice"]) { + + [[NCKeychain alloc] init].disableCrashservice = [[rowDescriptor.value valueData] boolValue]; + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"_crashservice_title_", nil) message:NSLocalizedString(@"_crashservice_alert_", nil) preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"_ok_", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { + exit(0); + }]; + + [alertController addAction:okAction]; + [self presentViewController:alertController animated:YES completion:nil]; + } + + if ([rowDescriptor.tag isEqualToString:@"logLevel"]) { + + NSInteger levelLog = [[rowDescriptor.value valueData] intValue]; + [[NCKeychain alloc] init].logLevel = levelLog; +// [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog]; + } + + if ([rowDescriptor.tag isEqualToString:@"deleteoldfiles"]) { + + NSInteger days = [[rowDescriptor.value valueData] intValue]; + [[NCKeychain alloc] init].cleanUpDay = days; + } +} + +#pragma mark - Clear Cache + +- (void)clearCache:(NSString *)account +{ + [[NCNetworking shared] cancelAllTask]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { + + NCUtilityFileSystem *ufs = [[NCUtilityFileSystem alloc] init]; + + [[NSURLCache sharedURLCache] setMemoryCapacity:0]; + [[NSURLCache sharedURLCache] setDiskCapacity:0]; + + [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false]; + + [ufs removeGroupDirectoryProviderStorage]; + [ufs removeGroupLibraryDirectory]; + + [ufs removeDocumentsDirectory]; + [ufs removeTemporaryDirectory]; + + [ufs createDirectoryStandard]; + + [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + + [[NCImageCache shared] createMediaCacheWithAccount:appDelegate.account withCacheSize:true]; + + [[NCActivityIndicator shared] stop]; + tealium = [[TealiumHelper alloc] init]; + [tealium trackEventWithTitle:@"magentacloud-app.settings.reset" data:nil]; + [adjust trackEvent:ResetsApp]; + [self calculateSize]; + }); +} + +- (void)clearCacheRequest:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:NSLocalizedString(@"_want_delete_cache_", nil) preferredStyle:UIAlertControllerStyleActionSheet]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_yes_", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { + [[NCActivityIndicator shared] startActivityWithBackgroundView:nil style: UIActivityIndicatorViewStyleLarge blurEffect:true]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { + [self clearCache:appDelegate.account]; + }); + }]]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_cancel_", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { + }]]; + + alertController.popoverPresentationController.sourceView = self.view; + NSIndexPath *indexPath = [self.form indexPathOfFormRow:sender]; + CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPath]; + alertController.popoverPresentationController.sourceRect = CGRectOffset(cellRect, -self.tableView.contentOffset.x, -self.tableView.contentOffset.y); + + [self presentViewController:alertController animated:YES completion:nil]; +} + + +- (void)clearAllCacheRequest:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + [[NCActivityIndicator shared] startActivityWithBackgroundView:nil style: UIActivityIndicatorViewStyleLarge blurEffect:true]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { + [self clearCache:nil]; + }); +} + +- (void)calculateSize +{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NCUtilityFileSystem *ufs = [[NCUtilityFileSystem alloc] init]; + NSString *directory = [ufs directoryProviderStorage]; + int64_t totalSize = [ufs getDirectorySizeWithDirectory:directory]; + sectionSize.footerTitle = [NSString stringWithFormat:@"%@. (%@ %@)", NSLocalizedString(@"_clear_cache_footer_", nil), NSLocalizedString(@"_used_space_", nil), [ufs transformedSize:totalSize]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self.tableView reloadData]; + }); + }); +} + +#pragma mark - Exit Nextcloud + +- (void)exitNextcloud:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:NSLocalizedString(@"_want_exit_", nil) preferredStyle:UIAlertControllerStyleActionSheet]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_ok_", nil) style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { + tealium = [[TealiumHelper alloc] init]; + [tealium trackEventWithTitle:@"magentacloud-app.settings.logout" data:nil]; + [adjust trackEvent:Logout]; + [appDelegate resetApplication]; + }]]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_cancel_", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { + }]]; + + alertController.popoverPresentationController.sourceView = self.view; + NSIndexPath *indexPath = [self.form indexPathOfFormRow:sender]; + CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPath]; + alertController.popoverPresentationController.sourceRect = CGRectOffset(cellRect, -self.tableView.contentOffset.x, -self.tableView.contentOffset.y); + + [self presentViewController:alertController animated:YES completion:nil]; +} + +#pragma mark - + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + + if (indexPath.section == 4 && indexPath.row == 2) { + return 80; + } else { + return NCGlobal.shared.heightCellSettings; + } +} + +@end diff --git a/iOSClient/Settings/CCManageAccount.h b/iOSClient/Settings/CCManageAccount.h new file mode 100644 index 0000000000..48a072c44f --- /dev/null +++ b/iOSClient/Settings/CCManageAccount.h @@ -0,0 +1,28 @@ +// +// CCManageAccount.h +// Nextcloud +// +// Created by Marino Faggiana on 12/03/15. +// Copyright (c) 2015 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import + +@interface CCManageAccount : XLFormViewController + +@end diff --git a/iOSClient/Settings/CCManageAccount.m b/iOSClient/Settings/CCManageAccount.m new file mode 100644 index 0000000000..8c06b8e244 --- /dev/null +++ b/iOSClient/Settings/CCManageAccount.m @@ -0,0 +1,443 @@ +// +// CCManageAccount.m +// Nextcloud +// +// Created by Marino Faggiana on 12/03/15. +// Copyright (c) 2015 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import "CCManageAccount.h" +#import "NCBridgeSwift.h" +#import "CCUtility.h" + +#define actionSheetCancellaAccount 1 + +@interface CCManageAccount () +{ + AppDelegate *appDelegate; +} +@end + +@implementation CCManageAccount + +- (void)initializeForm +{ + XLFormDescriptor *form = [XLFormDescriptor formDescriptor]; + XLFormSectionDescriptor *section; + XLFormRowDescriptor *row; + + NSArray *accounts = [[NCManageDatabase shared] getAllTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + // Section : ACCOUNTS ------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_accounts_", nil) sectionOptions:XLFormSectionOptionCanDelete]; + [form addFormSection:section]; + + for (tableAccount *account in accounts) { + + NSString *title = [NSString stringWithFormat:@"%@ %@", account.user, [NSURL URLWithString:account.urlBase].host]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:account.account rowType:XLFormRowDescriptorTypeBooleanCheck title:title]; + + // Avatar + UIImage *avatar = [[[NCUtility alloc] init] loadUserImageFor:account.user displayName:account.displayName urlBase:account.urlBase]; + + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:13.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:avatar forKey:@"imageView.image"]; + if (account.active) { + row.value = @"YES"; + } + [section addFormRow:row]; + } + + // Section : ALIAS -------------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_alias_", nil)]; + section.footerTitle = NSLocalizedString(@"_alias_footer_", nil); + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"alias" rowType:XLFormRowDescriptorTypeText]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[[UIImage imageNamed:@"form-textbox"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textField.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textField.textColor"]; + row.value = activeAccount.alias; + [section addFormRow:row]; + + // Section : MANAGE ACCOUNT ------------------------------------------- + + if ([NCBrandOptions shared].disable_multiaccount == NO) { + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_manage_account_", nil)]; + [form addFormSection:section]; + + if ([NCBrandOptions shared].disable_multiaccount == NO) { + + // New Account nextcloud + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"addAccount" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_add_account_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage systemImageNamed:@"plus"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.formSelector = @selector(addAccount:); + [section addFormRow:row]; + } + + // Set user status + + BOOL userStatus = [[NCGlobal shared] capabilityUserStatusEnabled]; + if (userStatus) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"setUserStatus" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_set_user_status_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"userStatusAway"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + row.action.formSelector = @selector(setUserStatus:); + if (accounts.count == 0) row.disabled = @YES; + [section addFormRow:row]; + } + + if ([NCBrandOptions shared].disable_multiaccount == NO) { + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"accountRequest" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_settings_account_request_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[[UIImage imageNamed:@"users"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + if ([[NCKeychain alloc] init].accountRequest) row.value = @1; + else row.value = @0; + [section addFormRow:row]; + } + } + + // Section : CERIFICATES ------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_certificates_", nil)]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"certificateDetails" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_certificate_details_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.formSelector = @selector(certificateDetails:); + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"certificatePNDetails" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_certificate_pn_details_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.formSelector = @selector(certificatePNDetails:); + [section addFormRow:row]; + + // Section : USER INFORMATION ------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_personal_information_", nil)]; + [form addFormSection:section]; + + // Full Name + if ([activeAccount.displayName length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"userfullname" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_full_name_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"user"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.displayName; + [section addFormRow:row]; + } + + // Address + if ([activeAccount.address length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"useraddress" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_address_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"address"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.address; + [section addFormRow:row]; + } + + // City + zip + if ([activeAccount.city length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"usercity" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_city_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"city"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.city; + if ([activeAccount.zip length] > 0) { + row.value = [NSString stringWithFormat:@"%@ %@", row.value, activeAccount.zip]; + } + [section addFormRow:row]; + } + + // Country + if ([activeAccount.country length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"usercountry" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_country_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"country"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = [[NSLocale systemLocale] displayNameForKey:NSLocaleCountryCode value:activeAccount.country]; + [section addFormRow:row]; + } + + // Phone + if ([activeAccount.phone length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"userphone" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_phone_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"phone"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.phone; + [section addFormRow:row]; + } + + // Email + if ([activeAccount.email length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"useremail" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_email_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"email"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.email; + [section addFormRow:row]; + } + + // Web + if ([activeAccount.website length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"userweb" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_web_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"network"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.website; + [section addFormRow:row]; + } + + // Twitter + if ([activeAccount.twitter length] > 0) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"usertwitter" rowType:XLFormRowDescriptorTypeInfo title:NSLocalizedString(@"_user_twitter_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"detailTextLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"twitter"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + row.value = activeAccount.twitter; + [section addFormRow:row]; + } + + self.tableView.showsVerticalScrollIndicator = NO; + self.form = form; + + // Open Login + if (accounts.count == 0) { + [appDelegate openLoginWithViewController:self selector:NCGlobal.shared.introLogin openLoginWeb:false]; + } +} + +// MARK: - View Life Cycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title = NSLocalizedString(@"_credentials_", nil); + appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; + + self.view.backgroundColor = UIColor.systemGroupedBackgroundColor; + + self.tableView.backgroundColor = UIColor.systemGroupedBackgroundColor; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeUser) name:NCGlobal.shared.notificationCenterChangeUser object:nil]; + + [self initializeForm]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + appDelegate.activeViewController = self; +} + +#pragma mark - NotificationCenter + +- (void)changeUser +{ + [self initializeForm]; +} + +#pragma mark - + +-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue +{ + [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; + + if ([rowDescriptor.tag isEqualToString:@"accountRequest"]) { + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + [[NCKeychain alloc] init].accountRequest = true; + } else { + [[NCKeychain alloc] init].accountRequest = false; + } + } + + else if ([rowDescriptor.tag isEqualToString:@"alias"]) { + + if ([newValue isEqual:[NSNull null]]) { + [[NCManageDatabase shared] setAccountAlias:@""]; + } else { + [[NCManageDatabase shared] setAccountAlias:newValue]; + } + } + + else { + + NSArray *accounts = [[NCManageDatabase shared] getAllTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + for (tableAccount *account in accounts) { + if ([rowDescriptor.tag isEqualToString:account.account]) { + if (![account.account isEqualToString:activeAccount.account]) { + [appDelegate changeAccount:account.account userProfile:nil]; + } + } + } + + [self initializeForm]; + } +} + +-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return NSLocalizedString(@"_remove_local_account_", nil); +} + +-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + [super tableView:tableView commitEditingStyle:editingStyle forRowAtIndexPath:indexPath]; + + if (editingStyle == UITableViewCellEditingStyleDelete) { + + [self initializeForm]; + + NSArray *accounts = [[NCManageDatabase shared] getAllTableAccount]; + tableAccount *tableAccountForDelete = accounts[indexPath.row]; + tableAccount *tableActiveAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + NSString *accountForDelete = tableAccountForDelete.account; + NSString *activeAccount = tableActiveAccount.account; + + NSString *title = [NSString stringWithFormat:NSLocalizedString(@"_want_delete_account_",nil), accountForDelete]; + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_remove_local_account_", nil) style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { + + if (accountForDelete) { + [appDelegate deleteAccount:accountForDelete wipe:false]; + } + + NSArray *listAccount = [[NCManageDatabase shared] getAccounts]; + if ([listAccount count] > 0) { + if ([accountForDelete isEqualToString:activeAccount]) { + [appDelegate changeAccount:listAccount[0] userProfile:nil]; + } + } + + [self initializeForm]; + }]]; + + [alertController addAction: [UIAlertAction actionWithTitle:NSLocalizedString(@"_cancel_", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { }]]; + + alertController.popoverPresentationController.sourceView = self.view; + alertController.popoverPresentationController.sourceRect = [self.tableView rectForRowAtIndexPath:indexPath]; + + [self presentViewController:alertController animated:YES completion:nil]; + } +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.section == 0) { + return 60; + } else { + return NCGlobal.shared.heightCellSettings; + } +} + +#pragma mark - + +- (void)addAccount:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + +// [appDelegate openLoginWithViewController:self selector:NCGlobal.shared.introLogin openLoginWeb:false]; +} + +#pragma mark - + +- (void)setUserStatus:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UINavigationController *navigationController = [[UIStoryboard storyboardWithName:@"NCUserStatus" bundle:nil] instantiateInitialViewController]; + [self presentViewController:navigationController animated:YES completion:nil]; +} + +#pragma mark - + +- (void)certificateDetails:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UINavigationController *navigationController = [[UIStoryboard storyboardWithName:@"NCViewCertificateDetails" bundle:nil] instantiateInitialViewController]; + NCViewCertificateDetails *viewController = (NCViewCertificateDetails *)navigationController.topViewController; + + NSURL *url = [NSURL URLWithString:appDelegate.urlBase]; + viewController.host = [url host]; + + [self presentViewController:navigationController animated:YES completion:nil]; +} + +- (void)certificatePNDetails:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UINavigationController *navigationController = [[UIStoryboard storyboardWithName:@"NCViewCertificateDetails" bundle:nil] instantiateInitialViewController]; + NCViewCertificateDetails *viewController = (NCViewCertificateDetails *)navigationController.topViewController; + + NSURL *url = [NSURL URLWithString: NCBrandOptions.shared.pushNotificationServerProxy]; + viewController.host = [url host]; + viewController.certificateTitle = NSLocalizedString(@"_certificate_pn_view_", nil); + + [self presentViewController:navigationController animated:YES completion:nil]; +} + +@end diff --git a/iOSClient/Settings/CCManageAutoUpload.h b/iOSClient/Settings/CCManageAutoUpload.h new file mode 100644 index 0000000000..1e6b701cfc --- /dev/null +++ b/iOSClient/Settings/CCManageAutoUpload.h @@ -0,0 +1,28 @@ +// +// CCManageAutoUpload.h +// Nextcloud +// +// Created by Marino Faggiana on 01/09/15. +// Copyright (c) 2015 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import + +@interface CCManageAutoUpload : XLFormViewController + +@end diff --git a/iOSClient/Settings/CCManageAutoUpload.m b/iOSClient/Settings/CCManageAutoUpload.m new file mode 100644 index 0000000000..c4b06dd0b1 --- /dev/null +++ b/iOSClient/Settings/CCManageAutoUpload.m @@ -0,0 +1,506 @@ +// +// CCManageAutoUpload.m +// Nextcloud +// +// Created by Marino Faggiana on 01/09/15. +// Copyright (c) 2015 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import +#import "CCManageAutoUpload.h" +#import "CCUtility.h" +#import "NCBridgeSwift.h" +#import "AdjustHelper.h" + +@interface CCManageAutoUpload () +{ + AppDelegate *appDelegate; + AdjustHelper *adjust; + TealiumHelper *tealium; +} +@end + +@implementation CCManageAutoUpload + +- (void)initializeForm +{ + XLFormDescriptor *form = [XLFormDescriptor formDescriptor]; + XLFormSectionDescriptor *section; + XLFormRowDescriptor *row; + + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + // Auto Upload + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + section.footerTitle = NSLocalizedString(@"_autoupload_description_", nil); + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUpload" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_autoupload_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + if (activeAccount.autoUpload) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Auto Upload Directory + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadDirectory" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_autoupload_select_folder_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"foldersOnTop"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"foldersOnTop"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + //[row.cellConfig setObject:@(UITableViewCellAccessoryDisclosureIndicator) forKey:@"accessoryType"]; + row.action.formSelector = @selector(selectAutomaticUploadFolder); + [section addFormRow:row]; + + // Auto Upload Photo + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadImage" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_autoupload_photos_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if (activeAccount.autoUploadImage) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadWWAnPhoto" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_wifi_only_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if (activeAccount.autoUploadWWAnPhoto) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Auto Upload Video + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadVideo" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_autoupload_videos_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if (activeAccount.autoUploadVideo) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadWWAnVideo" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_wifi_only_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if (activeAccount.autoUploadWWAnVideo) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Delete asset remove photo camera roll + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"removePhotoCameraRoll" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_remove_photo_CameraRoll_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if ([[[NCKeychain alloc] init] removePhotoCameraRoll]) row.value = @"1"; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Auto Upload Full + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + NSString *title = NSLocalizedString(@"_autoupload_fullphotos_", nil); + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadFull" rowType:XLFormRowDescriptorTypeBooleanSwitch title:title]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + row.value = 0; + if (activeAccount.autoUploadFull) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + // Auto Upload create subfolder + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadCreateSubfolder" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_autoupload_create_subfolder_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + if (activeAccount.autoUploadCreateSubfolder) row.value = @1; + else row.value = @0; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadSubfolderGranularity" rowType:XLFormRowDescriptorTypeSelectorPush title:NSLocalizedString(@"_autoupload_subfolder_granularity_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + row.cellConfigForSelector[@"tintColor"] = NCBrandColor.shared.customer; + row.selectorOptions = @[ + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityYearly) displayText:NSLocalizedString(@"_yearly_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityMonthly) displayText:NSLocalizedString(@"_monthly_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(NCGlobal.shared.subfolderGranularityDaily) displayText:NSLocalizedString(@"_daily_", nil)] + ]; + row.value = row.selectorOptions[activeAccount.autoUploadSubfolderGranularity]; + row.required = true; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [section addFormRow:row]; + + // Auto Upload file name + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadFileName" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_autoupload_filenamemask_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.viewControllerClass = [NCManageAutoUploadFileName class]; + [section addFormRow:row]; + + // end + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + self.tableView.showsVerticalScrollIndicator = NO; + self.form = form; +} + +// MARK: - View Life Cycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title = NSLocalizedString(@"_settings_autoupload_", nil); + appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; + self.view.backgroundColor = UIColor.systemGroupedBackgroundColor; + + adjust = [[AdjustHelper alloc] init]; + [adjust configAdjust]; + tealium = [[TealiumHelper alloc] init]; + self.tableView.backgroundColor = UIColor.systemGroupedBackgroundColor; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeUser) name:NCGlobal.shared.notificationCenterChangeUser object:nil]; + + [self initializeForm]; + [self reloadForm]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + appDelegate.activeViewController = self; + [[[NCAskAuthorization alloc] init] askAuthorizationPhotoLibraryWithController:self completion:^(BOOL status) { }]; +} + +- (void)changeUser +{ + // [[self navigationController] popViewControllerAnimated:YES]; + [self initializeForm]; + [self reloadForm]; +} + +#pragma mark - NotificationCenter + + +#pragma mark - + +-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue +{ + [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; + + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + if ([rowDescriptor.tag isEqualToString:@"autoUpload"]) { + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUpload" state:YES]; + + // Default + [[NCManageDatabase shared] setAccountAutoUploadFileName:nil]; + [[NCManageDatabase shared] setAccountAutoUploadDirectory:nil urlBase:appDelegate.urlBase userId:appDelegate.userId account:appDelegate.account]; + + // verifichiamo che almeno uno dei servizi (foto video) siano attivi, in caso contrario attiviamo le foto + if (activeAccount.autoUploadImage == NO && activeAccount.autoUploadVideo == NO) { + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadImage" state:YES]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadVideo" state:YES]; + } + + [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + + } else { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUpload" state:NO]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; + + // remove + [[NCManageDatabase shared] clearMetadatasUploadWithAccount:appDelegate.account]; + } + + [self reloadForm]; + } + + if ([rowDescriptor.tag isEqualToString:@"removePhotoCameraRoll"]) { + + [[NCKeychain alloc] init].removePhotoCameraRoll = [[rowDescriptor.value valueData] boolValue]; + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadFull"]) { + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + + [[NCAutoUpload shared] autoUploadFullPhotosWithController:self log:@"Auto upload full" account:appDelegate.account]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:YES]; + + } else { + + [[NCManageDatabase shared] clearMetadatasUploadWithAccount:appDelegate.account]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; + } + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadImage"]) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadImage" state:[[rowDescriptor.value valueData] boolValue]]; + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + } + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadWWAnPhoto"]) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadWWAnPhoto" state:[[rowDescriptor.value valueData] boolValue]]; + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadVideo"]) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadVideo" state:[[rowDescriptor.value valueData] boolValue]]; + + if ([[rowDescriptor.value valueData] boolValue] == YES){ + [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + } + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadWWAnVideo"]) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadWWAnVideo" state:[[rowDescriptor.value valueData] boolValue]]; + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadCreateSubfolder"]) { + + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadCreateSubfolder" state:[[rowDescriptor.value valueData] boolValue]]; + } + + if ([rowDescriptor.tag isEqualToString:@"autoUploadSubfolderGranularity"]) { + + [[NCManageDatabase shared] setAccountAutoUploadGranularity:@"autoUploadSubfolderGranularity" state:[[rowDescriptor.value valueData] integerValue]]; + } +} + +- (void)done:(XLFormRowDescriptor *)sender +{ + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)reloadForm +{ + self.form.delegate = nil; + + XLFormRowDescriptor *rowAutoUpload = [self.form formRowWithTag:@"autoUpload"]; + + XLFormRowDescriptor *rowAutoUploadImage = [self.form formRowWithTag:@"autoUploadImage"]; + XLFormRowDescriptor *rowAutoUploadWWAnPhoto = [self.form formRowWithTag:@"autoUploadWWAnPhoto"]; + + XLFormRowDescriptor *rowAutoUploadVideo = [self.form formRowWithTag:@"autoUploadVideo"]; + XLFormRowDescriptor *rowAutoUploadWWAnVideo = [self.form formRowWithTag:@"autoUploadWWAnVideo"]; + XLFormRowDescriptor *rowRemovePhotoCameraRoll = [self.form formRowWithTag:@"removePhotoCameraRoll"]; + + XLFormRowDescriptor *rowAutoUploadFull = [self.form formRowWithTag:@"autoUploadFull"]; + + XLFormRowDescriptor *rowAutoUploadCreateSubfolder = [self.form formRowWithTag:@"autoUploadCreateSubfolder"]; + + XLFormRowDescriptor *rowAutoUploadSubfolderGranularity = [self.form formRowWithTag:@"autoUploadSubfolderGranularity"]; + + XLFormRowDescriptor *rowAutoUploadFileName = [self.form formRowWithTag:@"autoUploadFileName"]; + + // - STATUS --------------------- + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + + if (activeAccount.autoUpload) + [rowAutoUpload setValue:@1]; else [rowAutoUpload setValue:@0]; + + if (activeAccount.autoUploadImage) + [rowAutoUploadImage setValue:@1]; else [rowAutoUploadImage setValue:@0]; + + if (activeAccount.autoUploadWWAnPhoto) + [rowAutoUploadWWAnPhoto setValue:@1]; else [rowAutoUploadWWAnPhoto setValue:@0]; + + if ([[[NCKeychain alloc] init] removePhotoCameraRoll]) + [rowRemovePhotoCameraRoll setValue:@1]; else [rowRemovePhotoCameraRoll setValue:@0]; + + if (activeAccount.autoUploadVideo) + [rowAutoUploadVideo setValue:@1]; else [rowAutoUploadVideo setValue:@0]; + + if (activeAccount.autoUploadWWAnVideo) + [rowAutoUploadWWAnVideo setValue:@1]; else [rowAutoUploadWWAnVideo setValue:@0]; + + if (activeAccount.autoUploadFull) + [rowAutoUploadFull setValue:@1]; else [rowAutoUploadFull setValue:@0]; + + if (activeAccount.autoUploadCreateSubfolder) + [rowAutoUploadCreateSubfolder setValue:@1]; else [rowAutoUploadCreateSubfolder setValue:@0]; + + [rowAutoUploadSubfolderGranularity setValue:rowAutoUploadSubfolderGranularity.selectorOptions[activeAccount.autoUploadSubfolderGranularity]]; + + // - HIDDEN -------------------------------------------------------------------------- + + rowAutoUploadImage.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + rowAutoUploadWWAnPhoto.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + rowAutoUploadVideo.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + rowAutoUploadWWAnVideo.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + rowRemovePhotoCameraRoll.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + rowAutoUploadFull.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + rowAutoUploadCreateSubfolder.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + rowAutoUploadSubfolderGranularity.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + rowAutoUploadFileName.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + + // ----------------------------------------------------------------------------------- + + [self.tableView reloadData]; + + self.form.delegate = self; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return NCGlobal.shared.heightCellSettings; +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section +{ + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + NSString *sectionName; + NSString *autoUploadPath = [NSString stringWithFormat:@"%@/%@", [[NCManageDatabase shared] getAccountAutoUploadDirectoryWithUrlBase:appDelegate.urlBase userId:appDelegate.userId account:appDelegate.account], [[NCManageDatabase shared] getAccountAutoUploadFileName]]; + + switch (section) + { + case 0: + sectionName = NSLocalizedString(@"_autoupload_description_", nil); + break; + case 1: + if (activeAccount.autoUpload) sectionName = [NSString stringWithFormat:@"%@: %@", NSLocalizedString(@"_autoupload_current_folder_", nil), [self returnPathfromServerUrl:autoUploadPath urlBase:appDelegate.urlBase userId:appDelegate.userId account:appDelegate.account]]; + else sectionName = @""; + break; + case 4: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_remove_photo_CameraRoll_desc_", nil); + else sectionName = @""; + break; + case 5: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_description_background_", nil); + else sectionName = @""; + break; + case 6: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_create_subfolder_footer_", nil); + else sectionName = @""; + break; + case 7: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_fullphotos_footer_", nil); + else sectionName = @""; + break; + } + return sectionName; +} + +- (void)dismissSelectWithServerUrl:(NSString * _Nullable)serverUrl metadata:(tableMetadata * _Nullable)metadata type:(NSString * _Nonnull)type items:(NSArray * _Nonnull)items overwrite:(BOOL)overwrite copy:(BOOL)copy move:(BOOL)move +{ + if (serverUrl != nil) { + + NSString* home = [[[NCUtilityFileSystem alloc] init] getHomeServerWithUrlBase:appDelegate.urlBase userId:appDelegate.userId]; + if ([serverUrl isEqualToString:home]) { +// NKError *error = [[NKError alloc] initWithErrorCode:NCGlobal.shared.errorInternalError errorDescription:@"_autoupload_error_select_folder_"];// responseData:nil]; +// [[[NCContentPresenter alloc] init] messageNotification:@"_error_" error:error delay:[[NCGlobal shared] dismissAfterSecond] type:messageTypeError afterDelay:0]; + return; + } + + // Settings new folder Automatatic upload + [[NCManageDatabase shared] setAccountAutoUploadFileName:serverUrl.lastPathComponent]; + NSString *path = [[[NCUtilityFileSystem alloc] init] deleteLastPathWithServerUrlPath:serverUrl home:home]; + if (path != nil) { + [[NCManageDatabase shared] setAccountAutoUploadDirectory:path urlBase:appDelegate.urlBase userId:appDelegate.userId account:appDelegate.account]; + } + // Reload + [self.tableView reloadData]; + } +} + +- (void)selectAutomaticUploadFolder + { + UINavigationController *navigationController = [[UIStoryboard storyboardWithName:@"NCSelect" bundle:nil] instantiateInitialViewController]; + NCSelect *viewController = (NCSelect *)navigationController.topViewController; + + viewController.delegate = self; + viewController.typeOfCommandView = 1; + + [self presentViewController:navigationController animated:YES completion:^{ + [self.tableView reloadData]; + }]; + } + +- (NSString *)returnPathfromServerUrl:(NSString *)serverUrl urlBase:(NSString *)urlBase userId:(NSString *)userId account:(NSString *)account +{ + NSString *homeServer = [[[NCUtilityFileSystem alloc] init] getHomeServerWithUrlBase:urlBase userId:userId]; + NSString *path = [serverUrl stringByReplacingOccurrencesOfString:homeServer withString:@""]; + return path; +} + +@end diff --git a/iOSClient/Settings/HelpViewController.swift b/iOSClient/Settings/HelpViewController.swift new file mode 100644 index 0000000000..eb91d7b4cf --- /dev/null +++ b/iOSClient/Settings/HelpViewController.swift @@ -0,0 +1,57 @@ +// +// HelpViewController.swift +// Nextcloud +// +// Created by A200073704 on 11/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit +import WebKit + +class HelpViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + + self.title = NSLocalizedString("_help_", comment: "") + let myWebView:WKWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) + myWebView.uiDelegate = self + myWebView.navigationDelegate = self + myWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.view.addSubview(myWebView) + + + //1. Load web site into my web view + let myURL = URL(string: "https://cloud.telekom-dienste.de/hilfe") + let myURLRequest:URLRequest = URLRequest(url: myURL!) + NCActivityIndicator.shared.start() + myWebView.load(myURLRequest) + + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + NCActivityIndicator.shared.stop() + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if navigationAction.navigationType == .linkActivated { + if let url = navigationAction.request.url, + UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) + decisionHandler(.cancel) + } else { + decisionHandler(.allow) + } + } else { + decisionHandler(.allow) + } + } +} + diff --git a/iOSClient/Settings/ImprintViewController.swift b/iOSClient/Settings/ImprintViewController.swift new file mode 100644 index 0000000000..819a86599d --- /dev/null +++ b/iOSClient/Settings/ImprintViewController.swift @@ -0,0 +1,70 @@ +// +// ImprintViewController.swift +// Nextcloud +// +// Created by A200073704 on 11/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit +import WebKit + +class ImprintViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + self.title = NSLocalizedString("_imprint_", comment: "") + + let myWebView:WKWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) + myWebView.uiDelegate = self + myWebView.navigationDelegate = self + myWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.view.addSubview(myWebView) + + + //1. Load web site into my web view + let myURL = URL(string: "https://www.telekom.de/impressum") + let myURLRequest:URLRequest = URLRequest(url: myURL!) + NCActivityIndicator.shared.start() + myWebView.load(myURLRequest) + + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + NCActivityIndicator.shared.stop() + } + + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) + + if UIDevice.current.orientation.isLandscape { + print("Landscape") + } + if UIDevice.current.orientation.isFlat { + print("Flat") + } else { + print("Portrait") + } + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if navigationAction.navigationType == .linkActivated { + if let url = navigationAction.request.url, + UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) + decisionHandler(.cancel) + } else { + decisionHandler(.allow) + } + } else { + decisionHandler(.allow) + } + } +} + diff --git a/iOSClient/Settings/InitialPrivacySettingsViewController.swift b/iOSClient/Settings/InitialPrivacySettingsViewController.swift new file mode 100644 index 0000000000..2cd30a4242 --- /dev/null +++ b/iOSClient/Settings/InitialPrivacySettingsViewController.swift @@ -0,0 +1,170 @@ +// +// InitialPrivacySettingsViewController.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation +import AppTrackingTransparency +import AdSupport +import UIKit + +class InitialPrivacySettingsViewController: UIViewController { + + @IBOutlet weak var dataPrivacyImage: UIImageView! + @IBOutlet weak var acceptButton: UIButton! + @IBOutlet weak var privacySettingsHelpText: UITextView! + @IBOutlet weak var privacySettingsTitle: UILabel! + @IBOutlet weak var widthPriavacyHelpView: NSLayoutConstraint! + var privacyHelpText = "" + + override func viewDidLoad() { + super.viewDidLoad() + + privacySettingsTitle.text = NSLocalizedString("_privacy_settings_title_", comment: "") + privacyHelpText = NSLocalizedString("_privacy_help_text_after_login_", comment: "") + privacySettingsHelpText.text = privacyHelpText + dataPrivacyImage.image = UIImage(named: "dataPrivacy")!.image(color: NCBrandColor.shared.brand, size: 60) + privacySettingsHelpText.delegate = self + privacySettingsHelpText.textColor = .label + privacySettingsHelpText.hyperLink(originalText: privacyHelpText, + linkTextsAndTypes: [NSLocalizedString("_key_privacy_help_", comment: ""): LinkType.privacyPolicy.rawValue, + NSLocalizedString("_key_reject_help_", comment: ""): LinkType.reject.rawValue, + NSLocalizedString("_key_settings_help_", comment: ""): LinkType.settings.rawValue]) + + acceptButton.backgroundColor = NCBrandColor.shared.brand + acceptButton.tintColor = UIColor.white + acceptButton.layer.cornerRadius = 5 + acceptButton.layer.borderWidth = 1 + acceptButton.layer.borderColor = NCBrandColor.shared.brand.cgColor + acceptButton.setTitle(NSLocalizedString("_accept_button_title_", comment: ""), for: .normal) + privacySettingsHelpText.centerText() + privacySettingsHelpText.font = UIFont(name: privacySettingsHelpText.font!.fontName, size: 16) + self.navigationItem.leftBarButtonItem?.tintColor = NCBrandColor.shared.brand + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + self.navigationController?.navigationBar.isHidden = false + } + + override func viewDidLayoutSubviews(){ + if UIDevice.current.userInterfaceIdiom == .pad { + widthPriavacyHelpView.constant = UIScreen.main.bounds.width - 100 + } + } + + @IBAction func onAcceptButtonClicked(_ sender: Any) { + requestPermission() + } + + //NEWLY ADDED PERMISSIONS FOR iOS 14 + func requestPermission() { + UserDefaults.standard.set(true, forKey: "isInitialPrivacySettingsShowed") + UserDefaults.standard.set(true, forKey: "isAnalysisDataCollectionSwitchOn") + if #available(iOS 14, *) { + ATTrackingManager.requestTrackingAuthorization { status in + switch status { + case .authorized: + // Tracking authorization dialog was shown + // and we are authorized + print("Authorized") + // Now that we are authorized we can get the IDFA + print(ASIdentifierManager.shared().advertisingIdentifier) + case .denied: + UserDefaults.standard.set(true, forKey: "isInitialPrivacySettingsShowed") + UserDefaults.standard.set(false, forKey: "isAnalysisDataCollectionSwitchOn") + print("Denied") + case .notDetermined: + // Tracking authorization dialog has not been shown + print("Not Determined") + case .restricted: + print("Restricted") + @unknown default: + print("Unknown") + } + } + } else { + UserDefaults.standard.set(true, forKey: "isInitialPrivacySettingsShowed") + UserDefaults.standard.set(true, forKey: "isAnalysisDataCollectionSwitchOn") + } + self.dismiss(animated: true, completion: nil) + } +} +// MARK: - UITextViewDelegate +extension InitialPrivacySettingsViewController: UITextViewDelegate { + func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { + if let linkType = LinkType(rawValue: URL.absoluteString) { + // TODO: handle linktype here with switch or similar. + switch linkType { + case LinkType.privacyPolicy: + //let storyBoard: UIStoryboard = UIStoryboard(name: "NCSettings", bundle: nil) + let privacyViewController = PrivacyPolicyViewController() + self.navigationController?.pushViewController(privacyViewController, animated: true) + case LinkType.reject: + UserDefaults.standard.set(false, forKey: "isAnalysisDataCollectionSwitchOn") + UserDefaults.standard.set(true, forKey: "isInitialPrivacySettingsShowed") + self.dismiss(animated: true, completion: nil) + case LinkType.settings: + let privacySettingsViewController = PrivacySettingsViewController() + UserDefaults.standard.set(true, forKey: "showSettingsButton") + self.navigationController?.pushViewController(privacySettingsViewController, animated: true) + } + print("handle link:: \(linkType)") + } + return false + } +} + +public extension UITextView { + + func hyperLink(originalText: String, linkTextsAndTypes: [String: String]) { + + let style = NSMutableParagraphStyle() + style.alignment = .left + + let attributedOriginalText = NSMutableAttributedString(string: originalText) + + let fullRange = NSRange(location: 0, length: attributedOriginalText.length) + attributedOriginalText.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.label, range: fullRange) + for linkTextAndType in linkTextsAndTypes { + let linkRange = attributedOriginalText.mutableString.range(of: linkTextAndType.key) + attributedOriginalText.addAttribute(NSAttributedString.Key.link, value: linkTextAndType.value, range: linkRange) + attributedOriginalText.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: fullRange) + attributedOriginalText.addAttribute(NSAttributedString.Key.foregroundColor, value: NCBrandColor.shared.brand, range: linkRange) + attributedOriginalText.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 10), range: fullRange) + } + + self.linkTextAttributes = [NSAttributedString.Key.foregroundColor: NCBrandColor.shared.brand] + self.attributedText = attributedOriginalText + } + + func centerText() { + self.textAlignment = .justified + let fittingSize = CGSize(width: 300, height: CGFloat.greatestFiniteMagnitude) + let size = sizeThatFits(fittingSize) + let topOffset = (bounds.size.height - size.height * zoomScale) / 2 + let positiveTopOffset = max(1, topOffset) + contentOffset.y = -positiveTopOffset + } +} + +enum LinkType: String { + case reject + case privacyPolicy + case settings +} + + diff --git a/iOSClient/Settings/MagentaCloudVersionView.swift b/iOSClient/Settings/MagentaCloudVersionView.swift new file mode 100644 index 0000000000..16de2ec088 --- /dev/null +++ b/iOSClient/Settings/MagentaCloudVersionView.swift @@ -0,0 +1,31 @@ +// +// MagentaCloudVersionView.swift +// Nextcloud +// +// Created by A200073704 on 11/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation + + +class MagentaCloudVersionView: XLFormBaseCell{ + + + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var versionLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + } + + override func configure() { + super.configure() + } + + override func update() { + super.update() + } +} diff --git a/iOSClient/Settings/MagentaCloudVersionView.xib b/iOSClient/Settings/MagentaCloudVersionView.xib new file mode 100644 index 0000000000..9c9d06adfe --- /dev/null +++ b/iOSClient/Settings/MagentaCloudVersionView.xib @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/NCManageAutoUploadFileName.swift b/iOSClient/Settings/NCManageAutoUploadFileName.swift new file mode 100644 index 0000000000..3f95d12119 --- /dev/null +++ b/iOSClient/Settings/NCManageAutoUploadFileName.swift @@ -0,0 +1,232 @@ +// +// NCManageAutoUploadFileName.swift +// Nextcloud +// +// Created by Marino Faggiana on 19/07/17. +// Copyright (c) 2017 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import UIKit +import Photos +import NextcloudKit + +class NCManageAutoUploadFileName: XLFormViewController { + + let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + let dateExample = Date() + + func initializeForm() { + + let form: XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section: XLFormSectionDescriptor + var row: XLFormRowDescriptor + + // Section Mode filename + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_mode_filename_", comment: "")) + form.addFormSection(section) + + // Maintain the original fileName + + row = XLFormRowDescriptor(tag: "maintainOriginalFileName", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_maintain_original_filename_", comment: "")) + row.value = NCKeychain().getOriginalFileName(key: NCGlobal.shared.keyFileNameOriginalAutoUpload) + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand; + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground + + row.cellConfig["textLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textLabel.textColor"] = UIColor.label + + section.addFormRow(row) + + // Add File Name Type + + row = XLFormRowDescriptor(tag: "addFileNameType", rowType: XLFormRowDescriptorTypeBooleanSwitch, title: NSLocalizedString("_add_filenametype_", comment: "")) + row.value = NCKeychain().getFileNameType(key: NCGlobal.shared.keyFileNameAutoUploadType) + row.hidden = "$\("maintainOriginalFileName") == 1" + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground + row.cellConfig["switchControl.onTintColor"] = NCBrandColor.shared.brand; + + row.cellConfig["textLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textLabel.textColor"] = UIColor.label + + section.addFormRow(row) + + // Section: Rename File Name + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_filename_", comment: "")) + form.addFormSection(section) + + row = XLFormRowDescriptor(tag: "maskFileName", rowType: XLFormRowDescriptorTypeText, title: (NSLocalizedString("_filename_", comment: ""))) + + let fileNameMask: String = NCKeychain().getFileNameMask(key: NCGlobal.shared.keyFileNameAutoUploadMask) + if !fileNameMask.isEmpty { + row.cellConfig["textField.text"] = fileNameMask + row.value = fileNameMask + }else{ + let placeholderText = CCUtility.createFileName("IMG_0001.JPG", fileDate: dateExample, fileType: PHAssetMediaType.image, keyFileName: nil, keyFileNameType: NCGlobal.shared.keyFileNameAutoUploadType, keyFileNameOriginal: NCGlobal.shared.keyFileNameOriginalAutoUpload, forcedNewFileName: false) + row.cellConfig["textField.text"] = placeholderText + row.value = "" + } + row.hidden = "$\("maintainOriginalFileName") == 1" + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground + + row.cellConfig["textLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textLabel.textColor"] = UIColor.label + + row.cellConfig["textField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["textField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["textField.textColor"] = UIColor.label + + section.addFormRow(row) + + // Section: Preview File Name + + row = XLFormRowDescriptor(tag: "previewFileName", rowType: XLFormRowDescriptorTypeTextView, title: "") + row.height = 180 + row.disabled = true + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground + + row.cellConfig["textView.backgroundColor"] = UIColor.secondarySystemGroupedBackground + row.cellConfig["textView.font"] = UIFont.systemFont(ofSize: 14.0) + row.cellConfig["textView.textColor"] = UIColor.label + + section.addFormRow(row) + + self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none + self.form = form + } + + // MARK: - View Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + self.title = NSLocalizedString("_mode_filename_", comment: "") + view.backgroundColor = .systemGroupedBackground + + tableView.backgroundColor = .systemGroupedBackground + + initializeForm() + reloadForm() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + appDelegate.activeViewController = self + } + + // MARK: XLForm + + func reloadForm() { + + self.form.delegate = nil + + let maskFileName: XLFormRowDescriptor = self.form.formRow(withTag: "maskFileName")! + let previewFileName: XLFormRowDescriptor = self.form.formRow(withTag: "previewFileName")! + previewFileName.value = self.previewFileName(valueRename: maskFileName.value as? String) + let placeholderText = CCUtility.createFileName("IMG_0001.JPG", fileDate: dateExample, fileType: PHAssetMediaType.image, keyFileName: nil, keyFileNameType: NCGlobal.shared.keyFileNameAutoUploadType, keyFileNameOriginal: NCGlobal.shared.keyFileNameOriginalAutoUpload, forcedNewFileName: false) + let fileNameMask : String = NCKeychain().getFileNameMask(key: NCGlobal.shared.keyFileNameAutoUploadMask) + if fileNameMask.count > 0 { + maskFileName.cellConfig["textField.text"] = fileNameMask + }else { + maskFileName.cellConfig["textField.text"] = placeholderText + } + self.tableView.reloadData() + self.form.delegate = self + } + + override func formRowDescriptorValueHasChanged(_ formRow: XLFormRowDescriptor!, oldValue: Any!, newValue: Any!) { + + super.formRowDescriptorValueHasChanged(formRow, oldValue: oldValue, newValue: newValue) + + if formRow.tag == "addFileNameType" { + NCKeychain().setFileNameType(key: NCGlobal.shared.keyFileNameAutoUploadType, prefix: (formRow.value! as AnyObject).boolValue) + self.reloadForm() + } else if formRow.tag == "maintainOriginalFileName" { + NCKeychain().setOriginalFileName(key: NCGlobal.shared.keyFileNameOriginalAutoUpload, value: (formRow.value! as AnyObject).boolValue) + self.reloadForm() + } else if formRow.tag == "maskFileName" { + + let fileName = formRow.value as? String + + self.form.delegate = nil + + if let fileName = fileName { + formRow.value = NCUtility().removeForbiddenCharacters(fileName) + } + + self.form.delegate = self + + let previewFileName: XLFormRowDescriptor = self.form.formRow(withTag: "previewFileName")! + previewFileName.value = self.previewFileName(valueRename: formRow.value as? String) + + // reload cell + if fileName != nil { + + if newValue as? String != formRow.value as? String { + + self.reloadFormRow(formRow) + + let errorDescription = String(format: NSLocalizedString("_forbidden_characters_", comment: ""), NCGlobal.shared.forbiddenCharacters.joined(separator: " ")) + let error = NKError(errorCode: NCGlobal.shared.errorConflict, errorDescription: errorDescription) + NCContentPresenter().showInfo(error: error) + } + } + + self.reloadFormRow(previewFileName) + } + } + + // MARK: - Utility + + func previewFileName(valueRename: String?) -> String { + + var returnString: String = "" + + if NCKeychain().getOriginalFileName(key: NCGlobal.shared.keyFileNameOriginalAutoUpload) { + + return (NSLocalizedString("_filename_", comment: "") + ": IMG_0001.JPG") + + } else if let valueRename = valueRename { + + let valueRenameTrimming = valueRename.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + + if valueRenameTrimming.isEmpty { + + NCKeychain().setFileNameMask(key: NCGlobal.shared.keyFileNameAutoUploadMask, mask: "") + returnString = CCUtility.createFileName("IMG_0001.JPG", fileDate: dateExample, fileType: PHAssetMediaType.image, keyFileName: nil, keyFileNameType: NCGlobal.shared.keyFileNameAutoUploadType, keyFileNameOriginal: NCGlobal.shared.keyFileNameOriginalAutoUpload, forcedNewFileName: false) + + } else { + + self.form.delegate = nil + NCKeychain().setFileNameMask(key: NCGlobal.shared.keyFileNameAutoUploadMask, mask: valueRename) + self.form.delegate = self + + returnString = CCUtility.createFileName("IMG_0001.JPG", fileDate: dateExample, fileType: PHAssetMediaType.image, keyFileName: NCGlobal.shared.keyFileNameAutoUploadMask, keyFileNameType: NCGlobal.shared.keyFileNameAutoUploadType, keyFileNameOriginal: NCGlobal.shared.keyFileNameOriginalAutoUpload, forcedNewFileName: false) + } + } else { + + NCKeychain().setFileNameMask(key: NCGlobal.shared.keyFileNameAutoUploadMask, mask: "") + returnString = CCUtility.createFileName("IMG_0001.JPG", fileDate: dateExample, fileType: PHAssetMediaType.image, keyFileName: nil, keyFileNameType: NCGlobal.shared.keyFileNameAutoUploadType, keyFileNameOriginal: NCGlobal.shared.keyFileNameOriginalAutoUpload, forcedNewFileName: false) + } + + return String(format: NSLocalizedString("_preview_filename_", comment: ""), "MM,MMM,DD,YY,YYYY and HH,hh,mm,ss,ampm") + ":" + "\n\n" + returnString + } +} diff --git a/iOSClient/Settings/NCManageE2EE.swift b/iOSClient/Settings/NCManageE2EE.swift new file mode 100644 index 0000000000..6cab2b6839 --- /dev/null +++ b/iOSClient/Settings/NCManageE2EE.swift @@ -0,0 +1,374 @@ +// +// NCManageE2EE.swift +// Nextcloud +// +// Created by Marino Faggiana on 17/11/22. +// Copyright © 2022 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import SwiftUI +import NextcloudKit +import TOPasscodeViewController +import LocalAuthentication + +@objc class NCManageE2EEInterface: NSObject { + + @objc func makeShipDetailsUI(account: String) -> UIViewController { + + let details = NCViewE2EE(account: account) + let vc = UIHostingController(rootView: details) + vc.title = NSLocalizedString("_e2e_settings_", comment: "") + return vc + } +} + +class NCManageE2EE: NSObject, ObservableObject, NCEndToEndInitializeDelegate, TOPasscodeViewControllerDelegate { + + let endToEndInitialize = NCEndToEndInitialize() + let appDelegate = (UIApplication.shared.delegate as? AppDelegate)! + var passcodeType = "" + + @Published var isEndToEndEnabled: Bool = false + @Published var statusOfService: String = NSLocalizedString("_status_in_progress_", comment: "") + + override init() { + super.init() + + endToEndInitialize.delegate = self + isEndToEndEnabled = NCKeychain().isEndToEndEnabled(account: appDelegate.account) + if isEndToEndEnabled { + statusOfService = NSLocalizedString("_status_e2ee_configured_", comment: "") + } else { + endToEndInitialize.statusOfService { error in + if error == .success { + self.statusOfService = NSLocalizedString("_status_e2ee_on_server_", comment: "") + } else { + self.statusOfService = NSLocalizedString("_status_e2ee_not_setup_", comment: "") + } + } + } + } + + // MARK: - Delegate + + func endToEndInitializeSuccess() { + isEndToEndEnabled = true + } + + // MARK: - Passcode + + @objc func requestPasscodeType(_ passcodeType: String) { + + let laContext = LAContext() + var error: NSError? + + let passcodeViewController = TOPasscodeViewController(passcodeType: .sixDigits, allowCancel: true) + passcodeViewController.delegate = self + passcodeViewController.keypadButtonShowLettering = false + if NCKeychain().touchFaceID, laContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) { + if error == nil { + if laContext.biometryType == .faceID { + passcodeViewController.biometryType = .faceID + passcodeViewController.allowBiometricValidation = true + } else if laContext.biometryType == .touchID { + passcodeViewController.biometryType = .touchID + } + passcodeViewController.allowBiometricValidation = true + passcodeViewController.automaticallyPromptForBiometricValidation = true + } + } + + self.passcodeType = passcodeType + appDelegate.window?.rootViewController?.present(passcodeViewController, animated: true) + } + + @objc func correctPasscode() { + + switch self.passcodeType { + case "startE2E": + endToEndInitialize.initEndToEndEncryption() + case "readPassphrase": + if let e2ePassphrase = NCKeychain().getEndToEndPassphrase(account: appDelegate.account) { + print("[INFO]Passphrase: " + e2ePassphrase) + let message = "\n" + NSLocalizedString("_e2e_settings_the_passphrase_is_", comment: "") + "\n\n\n" + e2ePassphrase + let alertController = UIAlertController(title: NSLocalizedString("_info_", comment: ""), message: message, preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_copy_passphrase_", comment: ""), style: .default, handler: { _ in + UIPasteboard.general.string = e2ePassphrase + })) + appDelegate.window?.rootViewController?.present(alertController, animated: true) + } + case "removeLocallyEncryption": + let alertController = UIAlertController(title: NSLocalizedString("_e2e_settings_remove_", comment: ""), message: NSLocalizedString("_e2e_settings_remove_message_", comment: ""), preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_remove_", comment: ""), style: .default, handler: { _ in + NCKeychain().clearAllKeysEndToEnd(account: self.appDelegate.account) + self.isEndToEndEnabled = NCKeychain().isEndToEndEnabled(account: self.appDelegate.account) + })) + alertController.addAction(UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .default, handler: { _ in })) + appDelegate.window?.rootViewController?.present(alertController, animated: true) + default: + break + } + } + + func passcodeViewController(_ passcodeViewController: TOPasscodeViewController, isCorrectCode code: String) -> Bool { + + if code == NCKeychain().passcode { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.correctPasscode() + } + return true + } else { + return false + } + } + + func didPerformBiometricValidationRequest(in passcodeViewController: TOPasscodeViewController) { + + LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: NCBrandOptions.shared.brand) { success, _ in + if success { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + passcodeViewController.dismiss(animated: true) + self.correctPasscode() + } + } + } + } + + func didTapCancel(in passcodeViewController: TOPasscodeViewController) { + passcodeViewController.dismiss(animated: true) + } +} + +// MARK: Views + +struct NCViewE2EE: View { + + @ObservedObject var manageE2EE = NCManageE2EE() + @State var account: String = "" + + var body: some View { + + VStack { + + if manageE2EE.isEndToEndEnabled { + + List { + + Section(header: Text(""), footer: Text("End-to-End Encryption " + NCGlobal.shared.capabilityE2EEApiVersion)) { + Label { + Text(NSLocalizedString("_e2e_settings_activated_", comment: "")) + } icon: { + Image(systemName: "checkmark.circle.fill") + .resizable() + .scaledToFit() + .foregroundColor(.green) + } + } + + Section(header: Text(""), footer: Text(NSLocalizedString("_read_passphrase_description_", comment: ""))) { + Label { + Text(NSLocalizedString("_e2e_settings_read_passphrase_", comment: "")) + } icon: { + Image(systemName: "eye") + .resizable() + .scaledToFit() + .foregroundColor(Color(NCBrandColor.shared.iconColor)) + .frame(width: 20, height: 30) + } + .onTapGesture { + if NCKeychain().passcode != nil { + manageE2EE.requestPasscodeType("readPassphrase") + } else { + NCContentPresenter().showInfo(error: NKError(errorCode: 0, errorDescription: "_e2e_settings_lock_not_active_")) + } + } + } + + let removeStrDesc1 = NSLocalizedString("_remove_passphrase_desc_1_", comment: "") + let removeStrDesc2 = NSLocalizedString("_remove_passphrase_desc_2_", comment: "") + let removeStrDesc = String(format: "%@\n\n%@", removeStrDesc1, removeStrDesc2) + Section(header: Text(""), footer: Text(removeStrDesc)) { + Label { + Text(NSLocalizedString("_e2e_settings_remove_", comment: "")) + } icon: { + Image(systemName: "trash") + .resizable() + .scaledToFit() + .foregroundColor(Color(NCBrandColor.shared.iconColor)) + .frame(width: 20, height: 30) + } + .onTapGesture { + if NCKeychain().passcode != nil { + manageE2EE.requestPasscodeType("removeLocallyEncryption") + } else { + NCContentPresenter().showInfo(error: NKError(errorCode: 0, errorDescription: "_e2e_settings_lock_not_active_")) + } + } + } +#if DEBUG + DeleteCerificateSection() +#endif + } + + } else { + + List { + let startE2EDesc1 = NSLocalizedString("_start_e2e_encryption_1_", comment: ""); + let startE2EDesc2 = NSLocalizedString("_start_e2e_encryption_2_", comment: ""); + let startE2EDesc3 = NSLocalizedString("_start_e2e_encryption_3_", comment: ""); + let startE2EDesc = String(format: "%@\n\n%@\n\n%@",startE2EDesc1,startE2EDesc2,startE2EDesc3) + Section(header: Text(""), footer: Text(startE2EDesc)) { + HStack { + Label { + Text(NSLocalizedString("_e2e_settings_start_", comment: "")) + } icon: { + } + Spacer() + } + .contentShape(Rectangle()) + .onTapGesture { + if let passcode = NCKeychain().passcode { + manageE2EE.requestPasscodeType("startE2E") + } else { + NCContentPresenter().showInfo(error: NKError(errorCode: 0, errorDescription: "_e2e_settings_lock_not_active_")) + } + } + } + +#if DEBUG + DeleteCerificateSection() +#endif + } + .listStyle(GroupedListStyle()) + } + } + .background(Color(UIColor.systemGroupedBackground)) + } +} + +struct DeleteCerificateSection: View { + + var body: some View { + + Section(header: Text("Delete Server keys"), footer: Text("Available only in debug mode")) { + + HStack { + Label { + Text("Delete Certificate") + } icon: { + Image(systemName: "exclamationmark.triangle") + .resizable() + .scaledToFit() + .foregroundColor(Color(UIColor.systemGray)) + } + Spacer() + } + .contentShape(Rectangle()) + .onTapGesture { + NextcloudKit.shared.deleteE2EECertificate { _, error in + if error == .success { + NCContentPresenter().messageNotification("E2E delete certificate", error: error, delay: NCGlobal.shared.dismissAfterSecond, type: .success) + } else { + NCContentPresenter().messageNotification("E2E delete certificate", error: error, delay: NCGlobal.shared.dismissAfterSecond, type: .error) + } + } + } + + HStack { + Label { + Text("Delete PrivateKey") + } icon: { + Image(systemName: "exclamationmark.triangle") + .resizable() + .scaledToFit() + .foregroundColor(Color(UIColor.systemGray)) + } + Spacer() + } + .contentShape(Rectangle()) + .onTapGesture { + NextcloudKit.shared.deleteE2EEPrivateKey { _, error in + if error == .success { + NCContentPresenter().messageNotification("E2E delete privateKey", error: error, delay: NCGlobal.shared.dismissAfterSecond, type: .success) + } else { + NCContentPresenter().messageNotification("E2E delete privateKey", error: error, delay: NCGlobal.shared.dismissAfterSecond, type: .error) + } + } + } + } + } +} + +// MARK: - Preview / Test + +struct SectionView: View { + + @State var height: CGFloat = 0 + @State var text: String = "" + + var body: some View { + HStack { + Text(text) + } + .frame(maxWidth: .infinity, minHeight: height, alignment: .bottomLeading) + } +} + +struct NCViewE2EETest: View { + + var body: some View { + + VStack { + List { + Section(header: SectionView(height: 50, text: "Section Header View")) { + Label { + Text(NSLocalizedString("_e2e_settings_activated_", comment: "")) + } icon: { + Image(systemName: "checkmark.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 25, height: 25) + .foregroundColor(.green) + } + } + Section(header: SectionView(text: "Section Header View 42")) { + Label { + Text(NSLocalizedString("_e2e_settings_activated_", comment: "")) + } icon: { + Image(systemName: "checkmark.circle.fill") + .resizable() + .scaledToFit() + .frame(width: 25, height: 25) + .foregroundColor(.red) + } + } + } + } + } +} + +struct NCViewE2EE_Previews: PreviewProvider { + static var previews: some View { + + // swiftlint:disable force_cast + let account = (UIApplication.shared.delegate as! AppDelegate).account + NCViewE2EE(account: account) + // swiftlint:enable force_cast + } +} diff --git a/iOSClient/Settings/NCSettings.h b/iOSClient/Settings/NCSettings.h new file mode 100644 index 0000000000..e06a29f1ac --- /dev/null +++ b/iOSClient/Settings/NCSettings.h @@ -0,0 +1,33 @@ +// +// NCSettings.h +// Nextcloud +// +// Created by Marino Faggiana on 24/11/14. +// Copyright (c) 2014 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import +#import +#import +#import "CCUtility.h" + +@interface NCSettings : XLFormViewController + +- (void)reloadForm; + +@end diff --git a/iOSClient/Settings/NCSettings.m b/iOSClient/Settings/NCSettings.m new file mode 100644 index 0000000000..19ba0e6e63 --- /dev/null +++ b/iOSClient/Settings/NCSettings.m @@ -0,0 +1,435 @@ +// +// NCSettings.m +// Nextcloud +// +// Created by Marino Faggiana on 24/11/14. +// Copyright (c) 2014 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +#import "NCSettings.h" +#import "CCAdvanced.h" +#import "CCManageAccount.h" +#import "CCManageAutoUpload.h" +#import "NCBridgeSwift.h" +#import +//#import + +#define alertViewEsci 1 +#define alertViewAzzeraCache 2 + +@interface NCSettings () +{ + AppDelegate *appDelegate; + TOPasscodeViewController *passcodeViewController; + TOPasscodeSettingsViewController *passcodeSettingsViewController; + + NSString *versionServer; + NSString *themingName; + NSString *themingSlogan; +} +@end + +@implementation NCSettings + +- (void)initializeForm +{ + XLFormDescriptor *form = [XLFormDescriptor formDescriptor]; + XLFormSectionDescriptor *section; + XLFormRowDescriptor *row; + + form.rowNavigationOptions = XLFormRowNavigationOptionNone; + + // Section AUTO UPLOAD OF CAMERA IMAGES ---------------------------- + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUpload" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_settings_autoupload_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"autoUpload"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + row.action.viewControllerClass = [CCManageAutoUpload class]; + [section addFormRow:row]; + + // Section : SECURITY -------------------------------------------------------------- + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_security_", nil)]; + [form addFormSection:section]; + + // Lock active YES/NO + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"bloccopasscode" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_lock_not_active_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + //[row.cellConfig setObject:@(UITableViewCellAccessoryDisclosureIndicator) forKey:@"accessoryType"]; + row.action.formSelector = @selector(passcode:); + [section addFormRow:row]; + // Enable Touch ID + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"enableTouchDaceID" rowType:XLFormRowDescriptorTypeBooleanSwitch title:NSLocalizedString(@"_enable_touch_face_id_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfig[@"switchControl.onTintColor"] = NCBrandColor.shared.brand; + if([[NCKeychain alloc] init].passcode){ + row.disabled = @NO; + }else{ + row.disabled = @YES; + } + [section addFormRow:row]; + + // Section : E2EEncryption -------------------------------------------------------------- + + BOOL isE2EEEnabled = [[NCGlobal shared] capabilityE2EEEnabled]; + NSString *versionE2EE = [[NCGlobal shared] capabilityE2EEApiVersion]; + + if (isE2EEEnabled == YES && [NCGlobal.shared.e2eeVersions containsObject:versionE2EE]) { + + // EndToEnd Encryption + NSString *title = [NSString stringWithFormat:@"%@",NSLocalizedString(@"_e2e_settings_", nil)]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"e2eEncryption" rowType:XLFormRowDescriptorTypeButton title:title]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + row.action.formSelector = @selector(manageE2EE:); + [section addFormRow:row]; + } + + // Section Advanced ------------------------------------------------- + + section = [XLFormSectionDescriptor formSection]; + [form addFormSection:section]; + + // Advanced + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"advanced" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_advanced_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"gear"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + row.action.viewControllerClass = [CCAdvanced class]; + [section addFormRow:row]; + + // Section : DATA PROTECTION ------------------------------------------------ + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_data_protection_", nil)]; + [form addFormSection:section]; + + // Privacy Settings + PrivacySettingsViewController *privacySettingsViewController = [[PrivacySettingsViewController alloc] init]; + privacySettingsViewController.isShowSettingsButton = true; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"showSettingsButton"]; + [[NSUserDefaults standardUserDefaults] synchronize]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"privacySettings" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_privacy_settings_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.viewControllerClass = [privacySettingsViewController class]; + [section addFormRow:row]; + + // Privacy Policy + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"advanced" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_privacy_policy_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + row.action.viewControllerClass = [PrivacyPolicyViewController class]; + [section addFormRow:row]; + + // Used OpenSource Software + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"buttonLeftAligned" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_used_opensource_software_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.viewControllerClass = [OpenSourceSoftwareViewController class]; + [section addFormRow:row]; + + + // Section : SERVICE ------------------------------------------------ + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_service_", nil)]; + [form addFormSection:section]; + + // HELP + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"buttonLeftAligned" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_help_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.viewControllerClass = [HelpViewController class]; + [section addFormRow:row]; + + // Imprint + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"buttonLeftAligned" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_imprint_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.action.viewControllerClass = [ImprintViewController class]; + [section addFormRow:row]; + + // Section : INFO ------------------------------------------------ + + section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_info_", nil)]; + [form addFormSection:section]; + + //MagentaCloud Version + + //custom cell + + [[XLFormViewController cellClassesForRowDescriptorTypes] setObject:[MagentaCloudVersionView class] forKey:@"kNMCCustomCellType"]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"disablefilesapp" rowType:@"kNMCCustomCellType" title:NSLocalizedString(@"_magentacloud_version_", nil)]; + NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleInfoDictionaryVersion"]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.cellConfigAtConfigure[@"cellLabel.text"] = NSLocalizedString(@"_magentacloud_version_", nil); + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"cellLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"cellLabel.textColor"]; + row.cellConfigAtConfigure[@"versionLabel.text"] = appVersion; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"versionLabel.font"]; + [row.cellConfig setObject:UIColor.systemGrayColor forKey:@"versionLabel.textColor"]; + [section addFormRow:row]; + + self.tableView.showsVerticalScrollIndicator = NO; + self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 35, 0); + self.form = form; +} + +// MARK: - View Life Cycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title = NSLocalizedString(@"_settings_", nil); + self.view.backgroundColor = UIColor.systemGroupedBackgroundColor; + self.tableView.backgroundColor = UIColor.systemGroupedBackgroundColor; + appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name:NCGlobal.shared.notificationCenterApplicationDidEnterBackground object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeUser) name:NCGlobal.shared.notificationCenterInitialize object:nil]; + + [self initializeForm]; + [self reloadForm]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + appDelegate.activeViewController = self; + + versionServer = [[NCGlobal shared] capabilityServerVersion]; + themingName = [[NCGlobal shared] capabilityThemingName]; + themingSlogan = [[NCGlobal shared] capabilityThemingSlogan]; +} + +#pragma mark - NotificationCenter + +- (void)changeUser +{ + [self initializeForm]; + [self reloadForm]; +} + +- (void)applicationDidEnterBackground +{ + if (passcodeViewController.view.window != nil) { + [passcodeViewController dismissViewControllerAnimated:true completion:nil]; + } + if (passcodeSettingsViewController.view.window != nil) { + [passcodeSettingsViewController dismissViewControllerAnimated:true completion:nil]; + } + + [[self navigationController] popToRootViewControllerAnimated:false]; +} + +#pragma mark - + +- (void)reloadForm +{ + self.form.delegate = nil; + + // ------------------------------------------------------------------ + + XLFormRowDescriptor *rowBloccoPasscode = [self.form formRowWithTag:@"bloccopasscode"]; + XLFormRowDescriptor *rowNotPasscodeAtStart = [self.form formRowWithTag:@"notPasscodeAtStart"]; + XLFormRowDescriptor *rowEnableTouchDaceID = [self.form formRowWithTag:@"enableTouchDaceID"]; + + // ------------------------------------------------------------------ + + if ([[NCKeychain alloc] init].passcode) { + rowBloccoPasscode.title = NSLocalizedString(@"_lock_active_", nil); + [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + rowEnableTouchDaceID.disabled = @NO; + rowNotPasscodeAtStart.disabled = @NO; + } else { + rowBloccoPasscode.title = NSLocalizedString(@"_lock_not_active_", nil); + [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + rowEnableTouchDaceID.disabled = @YES; + rowNotPasscodeAtStart.disabled = @YES; + } + + if ([[NCKeychain alloc] init].touchFaceID) [rowEnableTouchDaceID setValue:@1]; else [rowEnableTouchDaceID setValue:@0]; + if ([[NCKeychain alloc] init].requestPasscodeAtStart) [rowNotPasscodeAtStart setValue:@0]; else [rowNotPasscodeAtStart setValue:@1]; + + + // ----------------------------------------------------------------- + + [self.tableView reloadData]; + + self.form.delegate = self; +} + +- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue +{ + [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; + + if ([rowDescriptor.tag isEqualToString:@"notPasscodeAtStart"]) { + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + [[NCKeychain alloc] init].requestPasscodeAtStart = false; + } else { + [[NCKeychain alloc] init].requestPasscodeAtStart = true; + } + } + + if ([rowDescriptor.tag isEqualToString:@"enableTouchDaceID"]) { + + if ([[rowDescriptor.value valueData] boolValue] == YES) { + [[NCKeychain alloc] init].touchFaceID = true; + } else { + [[NCKeychain alloc] init].touchFaceID = false; + } + } +} + +#pragma mark - + +- (void)manageE2EE:(XLFormRowDescriptor *)sender +{ + [self deselectFormRow:sender]; + + UIViewController *vc = [[NCManageE2EEInterface alloc] makeShipDetailsUIWithAccount:appDelegate.account]; + [self.navigationController pushViewController:vc animated:YES]; +} + +#pragma mark - Passcode + +- (void)didPerformBiometricValidationRequestInPasscodeViewController:(TOPasscodeViewController *)passcodeViewController +{ + [[LAContext new] evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:[[NCBrandOptions shared] brand] reply:^(BOOL success, NSError * _Nullable error) { + if (success) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { + [[NCKeychain alloc] init].passcode = nil; + [passcodeViewController dismissViewControllerAnimated:YES completion:nil]; + [self reloadForm]; + }); + } + }]; +} + +- (void)passcodeSettingsViewController:(TOPasscodeSettingsViewController *)passcodeSettingsViewController didChangeToNewPasscode:(NSString *)passcode ofType:(TOPasscodeType)type +{ + [[NCKeychain alloc] init].passcode = passcode; + [passcodeSettingsViewController dismissViewControllerAnimated:YES completion:nil]; + + [self reloadForm]; +} + +- (void)didTapCancelInPasscodeViewController:(TOPasscodeViewController *)passcodeViewController +{ + [passcodeViewController dismissViewControllerAnimated:YES completion:nil]; +} + +- (BOOL)passcodeViewController:(TOPasscodeViewController *)passcodeViewController isCorrectCode:(NSString *)code +{ + if ([code isEqualToString:[[NCKeychain alloc] init].passcode]) { + [[NCKeychain alloc] init].passcode = nil; + [self reloadForm]; + + return YES; + } + + return NO; +} + +- (void)passcode:(XLFormRowDescriptor *)sender +{ + LAContext *laContext = [LAContext new]; + NSError *error; + + [self deselectFormRow:sender]; + + if ([[NCKeychain alloc] init].passcode) { + + passcodeViewController = [[TOPasscodeViewController alloc] initPasscodeType:TOPasscodeTypeSixDigits allowCancel:true]; + passcodeViewController.delegate = self; + passcodeViewController.keypadButtonShowLettering = false; + + if ([[NCKeychain alloc] init].touchFaceID && [laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { + if (error == NULL) { + if (laContext.biometryType == LABiometryTypeFaceID) { + passcodeViewController.biometryType = TOPasscodeBiometryTypeFaceID; + passcodeViewController.allowBiometricValidation = true; + passcodeViewController.automaticallyPromptForBiometricValidation = true; + } else if (laContext.biometryType == LABiometryTypeTouchID) { + passcodeViewController.biometryType = TOPasscodeBiometryTypeTouchID; + passcodeViewController.allowBiometricValidation = true; + passcodeViewController.automaticallyPromptForBiometricValidation = true; + } else { + NSLog(@"No Biometric support"); + } + } + } + + [self presentViewController:passcodeViewController animated:YES completion:nil]; + + } else { + + passcodeSettingsViewController = [[TOPasscodeSettingsViewController alloc] init]; + passcodeSettingsViewController.hideOptionsButton = YES; + passcodeSettingsViewController.requireCurrentPasscode = NO; + passcodeSettingsViewController.passcodeType = TOPasscodeTypeSixDigits; + passcodeSettingsViewController.delegate = self; + + [self presentViewController:passcodeSettingsViewController animated:YES completion:nil]; + } +} + +#pragma mark - + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return NCGlobal.shared.heightCellSettings; +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section +{ + NSString *sectionName; + NSInteger numSections = [tableView numberOfSections] - 1; + + return sectionName; +} + +@end diff --git a/iOSClient/Settings/NCSettings.storyboard b/iOSClient/Settings/NCSettings.storyboard new file mode 100644 index 0000000000..19a320515b --- /dev/null +++ b/iOSClient/Settings/NCSettings.storyboard @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/OpenSourceSoftwareViewController.swift b/iOSClient/Settings/OpenSourceSoftwareViewController.swift new file mode 100644 index 0000000000..e4cd131f83 --- /dev/null +++ b/iOSClient/Settings/OpenSourceSoftwareViewController.swift @@ -0,0 +1,56 @@ +// +// OpenSourceSoftwareViewController.swift +// Nextcloud +// +// Created by A200073704 on 11/05/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit +import WebKit + +class OpenSourceSoftwareViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + + self.title = NSLocalizedString("_used_opensource_software_", comment: "") + let myWebView:WKWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) + myWebView.uiDelegate = self + myWebView.navigationDelegate = self + myWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.view.addSubview(myWebView) + + + //1. Load web site into my web view + let myURL = URL(string: "https://static.magentacloud.de/licences/ios.html") + let myURLRequest:URLRequest = URLRequest(url: myURL!) + NCActivityIndicator.shared.start() + myWebView.load(myURLRequest) + + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + NCActivityIndicator.shared.stop() + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if navigationAction.navigationType == .linkActivated { + if let url = navigationAction.request.url, + UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) + decisionHandler(.cancel) + } else { + decisionHandler(.allow) + } + } else { + decisionHandler(.allow) + } + } +} diff --git a/iOSClient/Settings/PrivacyPolicyViewController.swift b/iOSClient/Settings/PrivacyPolicyViewController.swift new file mode 100644 index 0000000000..141c444fca --- /dev/null +++ b/iOSClient/Settings/PrivacyPolicyViewController.swift @@ -0,0 +1,62 @@ +// +// PrivacyPolicyViewController.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation +import UIKit +import WebKit + +class PrivacyPolicyViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { + + var myWebView = WKWebView() + + override func viewDidLoad() { + super.viewDidLoad() + + self.title = NSLocalizedString("_privacy_policy_", comment: "") + + myWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) + myWebView.uiDelegate = self + myWebView.navigationDelegate = self + myWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.view.addSubview(myWebView) + + //1. Load web site into my web view + let myURL = URL(string: "https://static.magentacloud.de/privacy/datenschutzhinweise_app.htm") + let myURLRequest:URLRequest = URLRequest(url: myURL!) + NCActivityIndicator.shared.start() + myWebView.load(myURLRequest) + self.navigationController?.navigationBar.tintColor = NCBrandColor.shared.brand + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + myWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) + } + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + NCActivityIndicator.shared.stop() + } + + func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + if navigationAction.navigationType == .linkActivated { + if let url = navigationAction.request.url, + UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) + decisionHandler(.cancel) + } else { + decisionHandler(.allow) + } + } else { + decisionHandler(.allow) + } + } +} diff --git a/iOSClient/Settings/PrivacySettingsViewController.swift b/iOSClient/Settings/PrivacySettingsViewController.swift new file mode 100644 index 0000000000..b7883ad800 --- /dev/null +++ b/iOSClient/Settings/PrivacySettingsViewController.swift @@ -0,0 +1,147 @@ +// +// PrivacySettingsViewController.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import Foundation +import AppTrackingTransparency +import AdSupport + +class PrivacySettingsViewController: XLFormViewController{ + + @objc public var isShowSettingsButton: Bool = false + + override func viewDidLoad() { + super.viewDidLoad() + self.title = NSLocalizedString("_privacy_settings_title_", comment: "") + + NotificationCenter.default.addObserver(self, selector: #selector(changeTheming), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterChangeTheming), object: nil) + + let nib = UINib(nibName: "CustomSectionHeader", bundle: nil) + self.tableView.register(nib, forHeaderFooterViewReuseIdentifier: "customSectionHeader") + isShowSettingsButton = UserDefaults.standard.bool(forKey: "showSettingsButton") + self.navigationController?.navigationBar.tintColor = NCBrandColor.shared.brand + changeTheming() + } + + @objc func changeTheming() { + tableView.backgroundColor = .systemGroupedBackground + tableView.separatorColor = .none + tableView.separatorColor = .clear + tableView.reloadData() + initializeForm() + } + + + + //MARK: XLForm + + func initializeForm() { + + let form : XLFormDescriptor = XLFormDescriptor() as XLFormDescriptor + form.rowNavigationOptions = XLFormRowNavigationOptions.stopDisableRow + + var section : XLFormSectionDescriptor + var row : XLFormRowDescriptor + + // Section: Destination Folder + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("", comment: "").uppercased()) + section.footerTitle = " " + form.addFormSection(section) + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("", comment: "").uppercased()) + section.footerTitle = NSLocalizedString("_privacy_settings_help_text_", comment: "") + form.addFormSection(section) + + + //custom cell + section = XLFormSectionDescriptor.formSection(withTitle: "") + section.footerTitle = NSLocalizedString("_required_data_collection_help_text_", comment: "") + form.addFormSection(section) + + + XLFormViewController.cellClassesForRowDescriptorTypes()["RequiredDataCollectionCustomCellType"] = RequiredDataCollectionSwitch.self + + + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "RequiredDataCollectionCustomCellType", title: "") + row.cellConfig["requiredDataCollectionSwitchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = UIColor.label //photos + row.cellConfig["cellLabel.text"] = NSLocalizedString("_required_data_collection_", comment: "") + section.addFormRow(row) + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("", comment: "").uppercased()) + section.footerTitle = NSLocalizedString("_analysis_data_acqusition_help_text_", comment: "") + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["AnalysisDataCollectionCustomCellType"] = AnalysisDataCollectionSwitch.self + + + row = XLFormRowDescriptor(tag: "AnalysisDataCollectionSwitch", rowType: "AnalysisDataCollectionCustomCellType", title: "") + row.cellConfig["analysisDataCollectionSwitchControl.onTintColor"] = NCBrandColor.shared.brand + row.cellConfig["cellLabel.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["cellLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["cellLabel.textColor"] = UIColor.label //photos + row.cellConfig["cellLabel.text"] = NSLocalizedString("_analysis_data_acqusition_", comment: "") + if(UserDefaults.standard.bool(forKey: "isAnalysisDataCollectionSwitchOn")){ + row.cellConfigAtConfigure["analysisDataCollectionSwitchControl.on"] = 1 + }else { + row.cellConfigAtConfigure["analysisDataCollectionSwitchControl.on"] = 0 + } + + section.addFormRow(row) + + + XLFormViewController.cellClassesForRowDescriptorTypes()["SaveSettingsButton"] = SaveSettingsCustomButtonCell.self + + section = XLFormSectionDescriptor.formSection(withTitle: "") + form.addFormSection(section) + + + row = XLFormRowDescriptor(tag: "SaveSettingsButton", rowType: "SaveSettingsButton", title: "") + row.cellConfig["backgroundColor"] = UIColor.clear + + if(isShowSettingsButton){ + section.addFormRow(row) + } + + + self.form = form + } + + + override func formRowDescriptorValueHasChanged(_ formRow: XLFormRowDescriptor!, oldValue: Any!, newValue: Any!) { + super.formRowDescriptorValueHasChanged(formRow, oldValue: oldValue, newValue: newValue) + + if formRow.tag == "SaveSettingsButton" { + print("save settings clicked") + //TODO save button state and leave the page + self.navigationController?.popViewController(animated: true) + + } + if formRow.tag == "AnalysisDataCollectionSwitch"{ + if (formRow.value! as AnyObject).boolValue { + if #available(iOS 14, *) { + ATTrackingManager.requestTrackingAuthorization(completionHandler: { (status) in + if status == .denied { + guard let url = URL(string: UIApplication.openSettingsURLString) else { + return + } + if UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url, options: [:]) + } + } + }) + } + } + UserDefaults.standard.set((formRow.value! as AnyObject).boolValue, forKey: "isAnalysisDataCollectionSwitchOn") + } + + } + +} diff --git a/iOSClient/Settings/RequiredDataCollectionSwitch.swift b/iOSClient/Settings/RequiredDataCollectionSwitch.swift new file mode 100644 index 0000000000..f80aa97e89 --- /dev/null +++ b/iOSClient/Settings/RequiredDataCollectionSwitch.swift @@ -0,0 +1,34 @@ +// +// RequiredDataCollectionSwitch.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit + + +class RequiredDataCollectionSwitch: XLFormBaseCell { + + @IBOutlet weak var cellLabel: UILabel! + @IBOutlet weak var requiredDataCollectionSwitchControl: UISwitch! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + //requiredDataCollectionSwitchControl.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged) + + } + + override func configure() { + super.configure() + + requiredDataCollectionSwitchControl.isOn = true + requiredDataCollectionSwitchControl.isEnabled = false + } + + override func update() { + super.update() + } +} diff --git a/iOSClient/Settings/RequiredDataCollectionSwitch.xib b/iOSClient/Settings/RequiredDataCollectionSwitch.xib new file mode 100644 index 0000000000..66156c6e06 --- /dev/null +++ b/iOSClient/Settings/RequiredDataCollectionSwitch.xib @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/SaveSettingsCustomButtonCell.swift b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift new file mode 100644 index 0000000000..6205727723 --- /dev/null +++ b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift @@ -0,0 +1,46 @@ +// +// SaveSettingsCustomButtonCell.swift +// Nextcloud +// +// Created by A200073704 on 25/04/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit + + +class SaveSettingsCustomButtonCell: XLFormButtonCell { + + @IBOutlet weak var saveSettingsButton: UIButton! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + self.selectionStyle = .none + self.separatorInset = UIEdgeInsets(top: 0, left: .greatestFiniteMagnitude, bottom: 0, right: .greatestFiniteMagnitude) + saveSettingsButton.setTitle(NSLocalizedString("_save_settings_", comment: ""), for: .normal) + saveSettingsButton.addTarget(self, action: #selector(saveButtonClicked), for: .touchUpInside) + + } + + override func configure() { + super.configure() + saveSettingsButton.backgroundColor = NCBrandColor.shared.brand + saveSettingsButton.tintColor = UIColor.white + saveSettingsButton.layer.cornerRadius = 5 + saveSettingsButton.layer.borderWidth = 1 + saveSettingsButton.layer.borderColor = NCBrandColor.shared.brand.cgColor + + } + + override func update() { + super.update() + + } + + @objc func saveButtonClicked(sender: UIButton) { + self.rowDescriptor.value = sender + + } + +} diff --git a/iOSClient/Settings/SaveSettingsCustomButtonCell.xib b/iOSClient/Settings/SaveSettingsCustomButtonCell.xib new file mode 100644 index 0000000000..0dd197da31 --- /dev/null +++ b/iOSClient/Settings/SaveSettingsCustomButtonCell.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Settings/Settings.bundle/Root.plist b/iOSClient/Settings/Settings.bundle/Root.plist new file mode 100644 index 0000000000..1184bfbc77 --- /dev/null +++ b/iOSClient/Settings/Settings.bundle/Root.plist @@ -0,0 +1,31 @@ + + + + + StringsTable + Root + PreferenceSpecifiers + + + Type + PSToggleSwitchSpecifier + Title + _reset_application_ + Key + reset_application + DefaultValue + + + + Type + PSTitleValueSpecifier + Title + _version_ + Key + version_preference + DefaultValue + 0 + + + + diff --git a/iOSClient/Settings/Settings.bundle/en.lproj/Root.strings b/iOSClient/Settings/Settings.bundle/en.lproj/Root.strings new file mode 100644 index 0000000000000000000000000000000000000000..6b57b356ce05f69289cc3e0982e46867ff21bfc8 GIT binary patch literal 512 zcmaiw(P{!Q6h!CQuL%1nQa?cY&|eVgt1P=&yI?n>(PBSdJrlP=OG^pK&7C`UGP&2w zTvG+Tun+1rXrrxS$+Gq%av<-xyE5bcp*JP?=4J3a_Vi%Z*->f0-4oSn-f_1O3uDQnOFbAe9*5*=Hc{IRE>Xe=^lv6IP`)UajYO+szs*=$T#V^;@OV eV(jpg>>|UiacZx9`JLzgQ)T&Jhd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Share/ShareDownloadLimitNetwork.swift b/iOSClient/Share/ShareDownloadLimitNetwork.swift new file mode 100644 index 0000000000..7b55999675 --- /dev/null +++ b/iOSClient/Share/ShareDownloadLimitNetwork.swift @@ -0,0 +1,150 @@ +// +// ShareDownloadLimitNetwork.swift +// Nextcloud +// +// Created by A118830248 on 11/11/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// + +import Foundation +import SwiftyJSON +import NextcloudKit +import Alamofire + +class NMCCommunication: NSObject, XMLParserDelegate { + + public static let shared: NMCCommunication = { + let instance = NMCCommunication() + return instance + }() + + var message = "" + var foundCharacters = ""; + var downloadLimit = DownloadLimit() + private lazy var appDelegate = UIApplication.shared.delegate as? AppDelegate + var controller: NCMainTabBarController! + var session: NCSession.Session { + NCSession.shared.getSession(controller: controller) + } + + func getDownloadLimit(token: String, completion: @escaping (_ downloadLimit: DownloadLimit?, _ errorDescription: String) -> Void) { + let baseUrl = session.urlBase // NCBrandOptions.shared.loginBaseUrl + let endPoint = "/ocs/v2.php/apps/files_downloadlimit/\(token)/limit" + let path = baseUrl+endPoint + do { + var urlRequest = try URLRequest(url: URL(string: path)!, method: .get) + urlRequest.addValue("true", forHTTPHeaderField: "OCS-APIREQUEST") + + let sessionConfiguration = URLSessionConfiguration.default + let urlSession = URLSession(configuration: sessionConfiguration) + + let task = urlSession.dataTask(with: urlRequest) { [self] (data, response, error) in + guard error == nil else { + completion(nil, error?.localizedDescription ?? "") + return + } + + if let httpResponse = response as? HTTPURLResponse { + let statusCode = httpResponse.statusCode + print("url: \(String(describing: httpResponse.url))\nStatus Code: \(statusCode)") + if httpResponse.statusCode == 200 { + let parser = XMLParser(data: data!) + parser.delegate = self + parser.parse() + completion(self.downloadLimit, self.message) + } else { + completion(nil, "Invalid Response code: \(statusCode)") + } + } else { + completion(nil, error?.localizedDescription ?? "Invalid Response") + } + } + task.resume() + } catch { + completion(nil, error.localizedDescription) + } + } + + func setDownloadLimit(deleteLimit: Bool, limit: String, token: String, completion: @escaping (_ success: Bool, _ errorDescription: String) -> Void) { + let baseUrl = session.urlBase //NCBrandOptions.shared.loginBaseUrl + let endPoint = "/ocs/v2.php/apps/files_downloadlimit/\(token)/limit" + let path = baseUrl+endPoint + do { + + let method = deleteLimit ? HTTPMethod.delete : .put + var urlRequest = try URLRequest(url: URL(string: path)!, method: method) + + urlRequest.addValue("true", forHTTPHeaderField: "OCS-APIREQUEST") + urlRequest.addValue(authorizationToken(), forHTTPHeaderField: "Authorization") + urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type") + + let parameters = ["token": token, "limit": limit] + + let encoder = JSONEncoder() + let jsonData = try encoder.encode(parameters) + urlRequest.httpBody = jsonData + + let sessionConfiguration = URLSessionConfiguration.default + let urlSession = URLSession(configuration: sessionConfiguration) + + let task = urlSession.dataTask(with: urlRequest) { (data, response, error) in + guard error == nil else { + completion(false, error?.localizedDescription ?? "") + return + } + + if let httpResponse = response as? HTTPURLResponse { + let statusCode = httpResponse.statusCode + print("url: \(String(describing: httpResponse.url))\nStatus Code: \(statusCode)") + if httpResponse.statusCode == 200 { + completion(true, error?.localizedDescription ?? "") + } else { + completion(false, "Invalid Response code: \(statusCode)") + } + } else { + completion(false, error?.localizedDescription ?? "Invalid Response") + } + } + task.resume() + } catch { + completion(false, error.localizedDescription) + } + } + + public func authorizationToken() -> String { + let accountDetails = NCManageDatabase.shared.getAllTableAccount().first + let password = NCKeychain().getPassword(account: accountDetails?.account ?? "") + let username = accountDetails?.user ?? "" + let credential = Data("\(username):\(password)".utf8).base64EncodedString() + return ("Basic \(credential)") + } + + + // MARK:- XML Parser Delegate + public func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { + + } + public func parser(_ parser: XMLParser, foundCharacters string: String) { + self.foundCharacters += string; + } + + public func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { + if elementName == "limit" { + let limit = self.foundCharacters.replacingOccurrences(of: "\n", with: "") + self.downloadLimit.limit = Int(limit.trimmingCharacters(in: .whitespaces)) + } + if elementName == "count" { + let count = self.foundCharacters.replacingOccurrences(of: "\n", with: "") + self.downloadLimit.count = Int(count.trimmingCharacters(in: .whitespaces)) + } + if elementName == "message"{ + self.message = self.foundCharacters + } + self.foundCharacters = "" + } +} + +struct DownloadLimit: Codable { + var limit: Int? + var count: Int? +} From a0cbb94ece58beb7662b2f4d369133288d30b6f9 Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Wed, 16 Apr 2025 18:22:49 +0530 Subject: [PATCH 25/29] NMC 2015 - Updated test configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 242 +++++++++++++----- Tests/Common/BaseXCTestCase.swift | 38 +++ Tests/Common/TestConstants.swift | 53 ++++ .../BaseIntegrationXCTestCase.swift | 29 +++ .../FilesIntegrationTests.swift | 94 +++++++ .../Placeholder.swift | 7 - 6 files changed, 389 insertions(+), 74 deletions(-) create mode 100644 Tests/Common/BaseXCTestCase.swift create mode 100644 Tests/Common/TestConstants.swift create mode 100644 Tests/NextcloudIntegrationTests/BaseIntegrationXCTestCase.swift create mode 100644 Tests/NextcloudIntegrationTests/FilesIntegrationTests.swift delete mode 100644 Tests/NextcloudIntegrationTests/Placeholder.swift diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 8cb19cb647..e336f7ec03 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -109,7 +109,6 @@ AAA7BC2E2D3E39F1008F1A22 /* CapabilitiesResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */; }; AAA7BC302D3E3B88008F1A22 /* CapabilityResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA7BC2F2D3E3B83008F1A22 /* CapabilityResponse.swift */; }; AABD0C8A2D5F67A400F009E6 /* XCUIElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD0C892D5F67A200F009E6 /* XCUIElement.swift */; }; - AABD0C9B2D5F73FC00F009E6 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABD0C9A2D5F73FA00F009E6 /* Placeholder.swift */; }; AAE330042D2ED20200B04903 /* NCShareNavigationTitleSetting.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE330032D2ED1FF00B04903 /* NCShareNavigationTitleSetting.swift */; }; AAFC0D042F9AA10000F0A001 /* NCFocusedAutoUploadIntroView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAFC0D012F9AA10000F0A001 /* NCFocusedAutoUploadIntroView.swift */; }; AAFC0D052F9AA10000F0A001 /* NCFocusedAutoUploadProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAFC0D022F9AA10000F0A001 /* NCFocusedAutoUploadProgressView.swift */; }; @@ -155,8 +154,30 @@ AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */; }; AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; - AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; }; AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */; }; + B5877EAB2DAFDDC60096BD3A /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */; }; + B5877EAC2DAFDDC60096BD3A /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */; }; + B5877EAD2DAFDDC60096BD3A /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */; }; + B5877EAE2DAFDDC60096BD3A /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */; }; + B5877EAF2DAFDDC60096BD3A /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */; }; + B5877EB02DAFDDC60096BD3A /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */; }; + B5877EB12DAFDDC60096BD3A /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */; }; + B5877EB22DAFDDC60096BD3A /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA92DAFDDC60096BD3A /* SharingTest.swift */; }; + B5877EB32DAFDDC60096BD3A /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA02DAFDDC60096BD3A /* MoreTests.swift */; }; + B5877EB42DAFDDC60096BD3A /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */; }; + B5877EB52DAFDDC60096BD3A /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */; }; + B5877EB62DAFDDC60096BD3A /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA72DAFDDC60096BD3A /* ScanTests.swift */; }; + B5877EB72DAFDDC60096BD3A /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA42DAFDDC60096BD3A /* Placeholder.swift */; }; + B5877EB82DAFDDC60096BD3A /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */; }; + B5877EBC2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; + B5877EBD2DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; + B5877EBE2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; + B5877EBF2DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; + B5877EC02DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; + B5877EC12DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; + B5877EC62DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */; }; + B5877EC72DAFDEE70096BD3A /* LoginIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */; }; + B5877EC82DAFDEE70096BD3A /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */; }; B5E2E6F12DAE854D00AB2EDD /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; B5E2E6F22DAE854D00AB2EDD /* TealiumTagManagement in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A02B8351730089D373 /* TealiumTagManagement */; }; B5E2E70D2DAE86DC00AB2EDD /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */; }; @@ -193,7 +214,6 @@ B5E2E73D2DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; B5E2E7412DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */; }; B5E2E7432DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; - C04E2F232A17BB4D001BAD85 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C04E2F222A17BB4D001BAD85 /* FilesIntegrationTests.swift */; }; D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; }; D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; }; F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */; }; @@ -237,6 +257,10 @@ F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F37208812BAB5979006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; + F36E64FB2B9733F10085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; + F36E64FC2B9733F20085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; + F36E64FD2B9735900085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; + F36E64FE2B9735920085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; F37208A42BAB63EE006B5430 /* QRCodeReader in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A32BAB63EE006B5430 /* QRCodeReader */; }; F37208A62BAB63EE006B5430 /* SwiftRichString in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A52BAB63EE006B5430 /* SwiftRichString */; }; F37208AA2BAB63EE006B5430 /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A92BAB63EE006B5430 /* MarkdownKit */; }; @@ -1393,7 +1417,6 @@ AAA7BC2F2D3E3B83008F1A22 /* CapabilityResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CapabilityResponse.swift; sourceTree = ""; }; AABD0C862D5F58C400F009E6 /* Server.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = Server.sh; sourceTree = ""; }; AABD0C892D5F67A200F009E6 /* XCUIElement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCUIElement.swift; sourceTree = ""; }; - AABD0C9A2D5F73FA00F009E6 /* Placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = ""; }; AACCAB522CFE041F00DA1786 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Intent.strings; sourceTree = ""; }; AACCAB532CFE041F00DA1786 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/Localizable.strings; sourceTree = ""; }; AACCAB542CFE041F00DA1786 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1438,8 +1461,26 @@ AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIToolbar+Extension.swift"; sourceTree = ""; }; AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = ""; }; AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = ""; }; - AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = ""; }; AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+Helper.swift"; sourceTree = ""; }; + B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; + B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; + B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; + B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; + B5877EA02DAFDDC60096BD3A /* MoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; + B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; + B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; + B5877EA42DAFDDC60096BD3A /* Placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = ""; }; + B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; + B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; + B5877EA72DAFDDC60096BD3A /* ScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; + B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; + B5877EA92DAFDDC60096BD3A /* SharingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; + B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseXCTestCase.swift; sourceTree = ""; }; + B5877EBA2DAFDE110096BD3A /* TestConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; + B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationXCTestCase.swift; sourceTree = ""; }; + B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesIntegrationTests.swift; sourceTree = ""; }; + B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginIntegrationTests.swift; sourceTree = ""; }; B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisDataCollectionSwitch.swift; sourceTree = ""; }; B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; B5E2E6F62DAE86DC00AB2EDD /* CCAdvanced.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCAdvanced.h; sourceTree = ""; }; @@ -2077,10 +2118,6 @@ F7FFFCA32FB3088D0015441E /* NCShareExtension+Assistant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+Assistant.swift"; sourceTree = ""; }; /* End PBXFileReference section */ -/* Begin PBXFileSystemSynchronizedRootGroup section */ - AA517BB42D66149900F8D37C /* .tx */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = .tx; sourceTree = ""; }; -/* End PBXFileSystemSynchronizedRootGroup section */ - /* Begin PBXFrameworksBuildPhase section */ 2C33C47C23E2C475005F963B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -2199,11 +2236,11 @@ F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */, F788ECC7263AAAFA00ADC67F /* MarkdownKit in Frameworks */, F3374AF02D78B01B002A38F9 /* BitCollections in Frameworks */, - 56AB28992B8351720089D373 /* TealiumCore in Frameworks */, - 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */, - 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */, - 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */, - 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */, + 56AB28992B8351720089D373 /* TealiumCore in Frameworks */, + 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */, + 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */, + 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */, + 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */, F77BC3EB293E5268005F2B08 /* Swifter in Frameworks */, F7BB7E4727A18C56009B9F29 /* Parchment in Frameworks */, F33EE6E12BF4BDA500CA1A51 /* NIOSSL in Frameworks */, @@ -2220,7 +2257,7 @@ F7160A822BE933390034DCB3 /* RealmSwift in Frameworks */, F76DA963277B760E0082465B /* Queuer in Frameworks */, F3374AF22D78B01B002A38F9 /* Collections in Frameworks */, - 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */, + 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */, F72AD70D28C24B93006CB92D /* NextcloudKit in Frameworks */, F70B86752642CE3B00ED5349 /* FirebaseCrashlytics in Frameworks */, F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */, @@ -2425,11 +2462,71 @@ path = Advanced; sourceTree = ""; }; + B5877EAA2DAFDDC60096BD3A /* NextcloudUnitTests */ = { + isa = PBXGroup; + children = ( + B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */, + B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */, + B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */, + B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */, + B5877EA02DAFDDC60096BD3A /* MoreTests.swift */, + B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */, + B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */, + B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */, + B5877EA42DAFDDC60096BD3A /* Placeholder.swift */, + B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */, + B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */, + B5877EA72DAFDDC60096BD3A /* ScanTests.swift */, + B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */, + B5877EA92DAFDDC60096BD3A /* SharingTest.swift */, + ); + path = NextcloudUnitTests; + sourceTree = ""; + }; + B5877EBB2DAFDE110096BD3A /* Common */ = { + isa = PBXGroup; + children = ( + B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */, + B5877EBA2DAFDE110096BD3A /* TestConstants.swift */, + ); + path = Common; + sourceTree = ""; + }; + B5877EC52DAFDEE70096BD3A /* NextcloudIntegrationTests */ = { + isa = PBXGroup; + children = ( + B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */, + B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */, + B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */, + ); + path = NextcloudIntegrationTests; + sourceTree = ""; + }; B5E2E6F32DAE854D00AB2EDD /* Recovered References */ = { isa = PBXGroup; children = ( 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */, 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */, + AA52EB452D42AC5A0089C348 /* Placeholder.swift */, + 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, + 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, + 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, + 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, + 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, + 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, + 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, + 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */, + 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, + 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, + 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */, + 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */, + 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, + AAA7BC2F2D3E3B83008F1A22 /* CapabilityResponse.swift */, + AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */, + AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */, + AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */, + AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, + AA3C85F12D394B3600F74F12 /* DownloadLimitResponse.swift */, ); name = "Recovered References"; sourceTree = ""; @@ -2456,7 +2553,6 @@ children = ( F3374A952D6744A4002A38F9 /* BaseUIXCTestCase.swift */, AABD0C882D5F631600F009E6 /* Extensions */, - AA3C85E92D36BBDE00F74F12 /* UITestBackend */, AA8E03DB2D2FBAAD00E7E89C /* DownloadLimitUITests.swift */, F3374A932D674454002A38F9 /* AssistantUITests.swift */, F33D303D2D8B129600531D64 /* AutoUploadUITests.swift */, @@ -2465,22 +2561,14 @@ path = NextcloudUITests; sourceTree = ""; }; - C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */ = { - isa = PBXGroup; - children = ( - AABD0C9A2D5F73FA00F009E6 /* Placeholder.swift */, - ); - path = NextcloudIntegrationTests; - sourceTree = ""; - }; F30A962A2A27A9C800D7BCFE /* Tests */ = { isa = PBXGroup; children = ( - C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */, - AA52EB442D42AC500089C348 /* NextcloudUnitTests */, + B5877EC52DAFDEE70096BD3A /* NextcloudIntegrationTests */, + B5877EBB2DAFDE110096BD3A /* Common */, + B5877EAA2DAFDDC60096BD3A /* NextcloudUnitTests */, C0046CDB2A17B98400D87C9D /* NextcloudUITests */, AABD0C862D5F58C400F009E6 /* Server.sh */, - F37208742BAB4AB0006B5430 /* TestConstants.swift */, ); path = Tests; sourceTree = ""; @@ -2743,7 +2831,7 @@ AF2D7C7D2742559100ADF566 /* NCShareUserCell.swift */, AF93471727E2361E002537EE /* NCShareHeader.xib */, AF93471527E2361E002537EE /* NCShareHeader.swift */, - AFCE353827E5DE0400FEA6C2 /* Shareable.swift */, + AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */, AA8E03D92D2ED83300E7E89C /* TransientShare.swift */, ); path = Share; @@ -3345,7 +3433,6 @@ isa = PBXGroup; children = ( B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */, - F3CA33802D106FF900672333 /* Poll */, F702F2F025EE5CDA008F8E80 /* NCLogin.storyboard */, F702F2F625EE5CEC008F8E80 /* NCLogin.swift */, F745B252222D88AE00346520 /* NCLoginQRCode.swift */, @@ -4663,6 +4750,22 @@ F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */, 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, + B5877EAB2DAFDDC60096BD3A /* AudioUploadTests.swift in Sources */, + B5877EAC2DAFDDC60096BD3A /* CollaboraTestCase.swift in Sources */, + B5877EAD2DAFDDC60096BD3A /* RenameFileTests.swift in Sources */, + B5877EAE2DAFDDC60096BD3A /* SettingsTestCases.swift in Sources */, + B5877EBC2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, + B5877EBD2DAFDE110096BD3A /* TestConstants.swift in Sources */, + B5877EAF2DAFDDC60096BD3A /* MoveAndCopyTests.swift in Sources */, + B5877EB02DAFDDC60096BD3A /* AssetUploadTest.swift in Sources */, + B5877EB12DAFDDC60096BD3A /* OnboardingTestCase.swift in Sources */, + B5877EB22DAFDDC60096BD3A /* SharingTest.swift in Sources */, + B5877EB32DAFDDC60096BD3A /* MoreTests.swift in Sources */, + B5877EB42DAFDDC60096BD3A /* E2EETests.swift in Sources */, + B5877EB52DAFDDC60096BD3A /* PrivacyPolicyTest.swift in Sources */, + B5877EB62DAFDDC60096BD3A /* ScanTests.swift in Sources */, + B5877EB72DAFDDC60096BD3A /* Placeholder.swift in Sources */, + B5877EB82DAFDDC60096BD3A /* NCNotificationText.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */, @@ -4689,10 +4792,10 @@ AA3C85EE2D36BCCE00F74F12 /* SharesResponse.swift in Sources */, AAA7BC2E2D3E39F1008F1A22 /* CapabilitiesResponse.swift in Sources */, AA3C85F22D394B3A00F74F12 /* DownloadLimitResponse.swift in Sources */, + B5877EC02DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, + B5877EC12DAFDE110096BD3A /* TestConstants.swift in Sources */, F3374A962D6744A4002A38F9 /* BaseUIXCTestCase.swift in Sources */, - F37208812BAB5979006B5430 /* TestConstants.swift in Sources */, F33D303E2D8B129600531D64 /* AutoUploadUITests.swift in Sources */, - AABD0C9B2D5F73FC00F009E6 /* Placeholder.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4700,7 +4803,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */, + B5877EC62DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift in Sources */, + B5877EC72DAFDEE70096BD3A /* LoginIntegrationTests.swift in Sources */, + B5877EC82DAFDEE70096BD3A /* FilesIntegrationTests.swift in Sources */, + B5877EBE2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, + B5877EBF2DAFDE110096BD3A /* TestConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5117,6 +5224,8 @@ F704B5E92430C0B800632F5F /* NCCreateFormUploadConflictCell.swift in Sources */, F72D404923D2082500A97FD0 /* NCViewerDirectEditing.swift in Sources */, AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, + F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */, + AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, @@ -5353,7 +5462,6 @@ D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, - F7CBC31C24F78E79004D3812 /* (null) in Sources */, 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */, 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, @@ -6738,14 +6846,6 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/apple/swift-collections.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 1.1.4; - }; - }; 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Tealium/tealium-swift.git"; @@ -6770,6 +6870,14 @@ minimumVersion = 9.18.1; }; }; + F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/apple/swift-collections.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.1.4; + }; + }; F33EE6DF2BF4BDA500CA1A51 /* XCRemoteSwiftPackageReference "swift-nio-ssl" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-nio-ssl"; @@ -6957,31 +7065,6 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - F3374AEF2D78B01B002A38F9 /* BitCollections */ = { - isa = XCSwiftPackageProductDependency; - package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; - productName = BitCollections; - }; - F3374AF12D78B01B002A38F9 /* Collections */ = { - isa = XCSwiftPackageProductDependency; - package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; - productName = Collections; - }; - F3374AF32D78B01B002A38F9 /* DequeModule */ = { - isa = XCSwiftPackageProductDependency; - package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; - productName = DequeModule; - }; - F3374AF52D78B01B002A38F9 /* HashTreeCollections */ = { - isa = XCSwiftPackageProductDependency; - package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; - productName = HashTreeCollections; - }; - F3374AF72D78B01B002A38F9 /* HeapModule */ = { - isa = XCSwiftPackageProductDependency; - package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; - productName = HeapModule; - }; 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */ = { isa = XCSwiftPackageProductDependency; package = 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */; @@ -7019,6 +7102,31 @@ isa = XCSwiftPackageProductDependency; productName = TealiumVisitorService; }; + F3374AEF2D78B01B002A38F9 /* BitCollections */ = { + isa = XCSwiftPackageProductDependency; + package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = BitCollections; + }; + F3374AF12D78B01B002A38F9 /* Collections */ = { + isa = XCSwiftPackageProductDependency; + package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = Collections; + }; + F3374AF32D78B01B002A38F9 /* DequeModule */ = { + isa = XCSwiftPackageProductDependency; + package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = DequeModule; + }; + F3374AF52D78B01B002A38F9 /* HashTreeCollections */ = { + isa = XCSwiftPackageProductDependency; + package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = HashTreeCollections; + }; + F3374AF72D78B01B002A38F9 /* HeapModule */ = { + isa = XCSwiftPackageProductDependency; + package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; + productName = HeapModule; + }; F3391B072B4C52C5001C0C4B /* FirebaseDatabase */ = { isa = XCSwiftPackageProductDependency; package = F70B86732642CE3B00ED5349 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; diff --git a/Tests/Common/BaseXCTestCase.swift b/Tests/Common/BaseXCTestCase.swift new file mode 100644 index 0000000000..5c03bc5384 --- /dev/null +++ b/Tests/Common/BaseXCTestCase.swift @@ -0,0 +1,38 @@ +// +// BaseXCTestCase.swift +// Nextcloud +// +// Created by Milen on 20.03.24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// + +import XCTest +import Foundation +import UIKit +import Alamofire +import NextcloudKit +@testable import Nextcloud + +class BaseXCTestCase: XCTestCase { + var appToken = "" + + func setupAppToken() { + let expectation = expectation(description: "Should get app token") + + NextcloudKit.shared.getAppPassword(url: TestConstants.server, user: TestConstants.username, password: TestConstants.password) { token, _, error in + XCTAssertEqual(error.errorCode, 0) + XCTAssertNotNil(token) + + guard let token else { return XCTFail() } + + self.appToken = token + expectation.fulfill() + } + + waitForExpectations(timeout: TestConstants.timeoutLong) + } + + override func setUpWithError() throws { + setupAppToken() + } +} diff --git a/Tests/Common/TestConstants.swift b/Tests/Common/TestConstants.swift new file mode 100644 index 0000000000..5022e70803 --- /dev/null +++ b/Tests/Common/TestConstants.swift @@ -0,0 +1,53 @@ +// +// Copyright (c) 2023 Marcel Müller +// +// Author Marcel Müller +// +// GNU GPL version 3 or any later version +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import Foundation +import UIKit + +/// +/// Immutable test configuration. +/// +enum TestConstants { + /// + /// The default number of seconds to wait for the appearance of user interface controls during user interface tests. + /// + static let controlExistenceTimeout: Double = 10 + + /// + /// The full base URL for the server to run against. + /// + static let server = "http://localhost:8080" + + /// + /// Default user name to sign in with. + /// + static let username = "admin" + + /// + /// Password of the default user name to sign in with. + /// + static let password = "admin" + + /// + /// Account identifier of the default user to test with. + /// + static let account = "\(username) \(server)" +} diff --git a/Tests/NextcloudIntegrationTests/BaseIntegrationXCTestCase.swift b/Tests/NextcloudIntegrationTests/BaseIntegrationXCTestCase.swift new file mode 100644 index 0000000000..703aa37f07 --- /dev/null +++ b/Tests/NextcloudIntegrationTests/BaseIntegrationXCTestCase.swift @@ -0,0 +1,29 @@ +// +// BaseIntegrationXCTestCase.swift +// +// +// Created by Milen Pivchev on 20.06.23. +// Copyright © 2023 Milen Pivchev. All rights reserved. +// +// Author: Milen Pivchev +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +class BaseIntegrationXCTestCase: BaseXCTestCase { + var randomInt: Int { + get { + return Int.random(in: 1000...Int.max) + } + } +} diff --git a/Tests/NextcloudIntegrationTests/FilesIntegrationTests.swift b/Tests/NextcloudIntegrationTests/FilesIntegrationTests.swift new file mode 100644 index 0000000000..c1bcbca235 --- /dev/null +++ b/Tests/NextcloudIntegrationTests/FilesIntegrationTests.swift @@ -0,0 +1,94 @@ +// +// NextcloudIntegrationTests.swift +// NextcloudIntegrationTests +// +// Created by Milen Pivchev on 5/19/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import XCTest +import NextcloudKit +@testable import Nextcloud + +final class FilesIntegrationTests: BaseIntegrationXCTestCase { + + override func setUp() { + NCAccount().deleteAllAccounts() + } + +// func test_createReadDeleteFolder_withProperParams_shouldCreateReadDeleteFolder() throws { +// let expectation = expectation(description: "Should finish last callback") +// +// let folderName = "TestFolder\(randomInt)" +// let serverUrl = "\(TestConstants.server)/remote.php/dav/files/\(TestConstants.username)" +// let serverUrlFileName = "\(serverUrl)/\(folderName)" +// +// NCSession.shared.appendSession(account: TestConstants.account, urlBase: TestConstants.server, user: TestConstants.username, userId: TestConstants.username) +// let session = NCSession.shared.getSession(account: TestConstants.account) +// +// NextcloudKit.shared.setup(delegate: NCNetworking.shared) +// NextcloudKit.shared.appendSession(account: TestConstants.account, urlBase: TestConstants.server, user: TestConstants.username, userId: TestConstants.username, password: appToken, userAgent: userAgent, nextcloudVersion: 0, groupIdentifier: NCBrandOptions.shared.capabilitiesGroup) +// +// // Test creating folder +// NCNetworking.shared.createFolder(fileName: folderName, serverUrl: serverUrl, overwrite: true, withPush: true, metadata: nil, sceneIdentifier: nil, session: session ) { error in +// +// XCTAssertEqual(NKError.success.errorCode, error.errorCode) +// XCTAssertEqual(NKError.success.errorDescription, error.errorDescription) +// +// Thread.sleep(forTimeInterval: 1) +// +// // Test reading folder, should exist +// NCNetworking.shared.readFolder(serverUrl: serverUrlFileName, account: TestConstants.username, checkResponseDataChanged: false, queue: .main) { account, metadataFolder, _, _, _ in +// +// XCTAssertEqual(TestConstants.account, account) +// XCTAssertEqual(NKError.success.errorCode, error.errorCode) +// XCTAssertEqual(NKError.success.errorDescription, error.errorDescription) +// XCTAssertEqual(metadataFolder?.fileName, folderName) +// +// // Check Realm directory, should exist +// let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "serverUrl == %@", serverUrlFileName)) +// XCTAssertNotNil(directory) +// +// Thread.sleep(forTimeInterval: 1) +// +// Task { +// // Test deleting folder +// await _ = NCNetworking.shared.deleteFileOrFolder(serverUrlFileName: serverUrlFileName, account: TestConstants.account) +// +// XCTAssertEqual(NKError.success.errorCode, error.errorCode) +// XCTAssertEqual(NKError.success.errorDescription, error.errorDescription) +// +// try await Task.sleep(for: .seconds(1)) +// +// // Test reading folder, should NOT exist +// NCNetworking.shared.readFolder(serverUrl: serverUrlFileName, account: TestConstants.username, checkResponseDataChanged: false, queue: .main) { account, metadataFolder, _, _, _ in +// +// defer { expectation.fulfill() } +// +// XCTAssertEqual(0, error.errorCode) +// XCTAssertNil(metadataFolder?.fileName) +// +// // Check Realm directory, should NOT exist +// let directory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "serverUrl == %@", serverUrlFileName)) +// XCTAssertNil(directory) +// } +// } +// } +// } +// +// waitForExpectations(timeout: TestConstants.timeoutLong) +// } +} diff --git a/Tests/NextcloudIntegrationTests/Placeholder.swift b/Tests/NextcloudIntegrationTests/Placeholder.swift deleted file mode 100644 index 6cc0aa6c4b..0000000000 --- a/Tests/NextcloudIntegrationTests/Placeholder.swift +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-FileCopyrightText: Nextcloud GmbH -// SPDX-FileCopyrightText: 2025 Iva Horn -// SPDX-License-Identifier: GPL-3.0-or-later - -// There are no unit tests yet. -// This is an empty placeholder file. -// The compiler requires at least an empty file for every target. From b2ea025deb29a947d1defed20bd4537bcce6e4ba Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Thu, 17 Apr 2025 12:05:30 +0530 Subject: [PATCH 26/29] NMC 2015 - Removed duplicate files in configuration changes --- Nextcloud.xcodeproj/project.pbxproj | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index e336f7ec03..d010bca3cc 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -17,15 +17,10 @@ 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; - 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */; }; - 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */; }; 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */; }; - 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */; }; 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */; }; 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */; }; - 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */; }; 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */; }; - 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */; }; 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */; }; 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */; }; 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */; }; @@ -154,7 +149,6 @@ AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */; }; AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; - AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */; }; B5877EAB2DAFDDC60096BD3A /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */; }; B5877EAC2DAFDDC60096BD3A /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */; }; B5877EAD2DAFDDC60096BD3A /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */; }; @@ -692,7 +686,6 @@ F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F774264822EB4D0000B23912 /* NCSearchUserDropDownCell.xib */; }; F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7743A112C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift */; }; F7743A142C33F13A0034F670 /* NCCollectionViewCommon+CollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7743A132C33F13A0034F670 /* NCCollectionViewCommon+CollectionViewDataSource.swift */; }; - F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77444F322281649000D5EB0 /* NCMediaCell.swift */; }; F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F77444F422281649000D5EB0 /* NCMediaCell.xib */; }; F77444F8222816D5000D5EB0 /* NCPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77444F7222816D5000D5EB0 /* NCPickerViewController.swift */; }; F778231E2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F778231D2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift */; }; @@ -767,7 +760,6 @@ F78ACD4221903CE00088454D /* NCListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD4121903CE00088454D /* NCListCell.swift */; }; F78ACD4421903CF20088454D /* NCListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4321903CF20088454D /* NCListCell.xib */; }; F78ACD4621903D010088454D /* NCGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4521903D010088454D /* NCGridCell.xib */; }; - F78ACD4A21903F850088454D /* NCTrashListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD4821903F850088454D /* NCTrashListCell.swift */; }; F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4921903F850088454D /* NCTrashListCell.xib */; }; F78ACD52219046DC0088454D /* NCSectionFirstHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD51219046DC0088454D /* NCSectionFirstHeader.swift */; }; F78ACD54219047D40088454D /* NCSectionFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD53219047D40088454D /* NCSectionFooter.xib */; }; @@ -5105,10 +5097,8 @@ files = ( B5E2E73B2DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */, B5E2E73C2DAE89D700AB2EDD /* AppUpdater.swift in Sources */, - F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */, B5E2E7322DAE894C00AB2EDD /* NCSectionHeaderMenu.swift in Sources */, - F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, F7E7AEA72BA32D0000512E52 /* NCCollectionViewUnifiedSearch.swift in Sources */, @@ -5225,7 +5215,6 @@ F72D404923D2082500A97FD0 /* NCViewerDirectEditing.swift in Sources */, AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */, - AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, @@ -5272,7 +5261,6 @@ F72CA0572F5048C3002E2F06 /* UIApplication+Extension.swift in Sources */, F3A047972BD2668800658E7B /* NCAssistantEmptyView.swift in Sources */, 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, - F78ACD4A21903F850088454D /* NCTrashListCell.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, @@ -5306,9 +5294,7 @@ AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, F78F74362163781100C2ADAD /* NCTrash.swift in Sources */, - 566EB7D62B3D71F800FB7CAD /* NCShareHeaderCustomCell.swift in Sources */, F39298972A3B12CB00509762 /* BaseNCMoreCell.swift in Sources */, - 566EB7CA2B3D6FE500FB7CAD /* UIButton+Extension.swift in Sources */, AF2D7C7C2742556F00ADF566 /* NCShareLinkCell.swift in Sources */, F7C55C512FB4A658004A974F /* NCAssistantInputModel.swift in Sources */, F7E41316294A19B300839300 /* UIView+Extension.swift in Sources */, @@ -5426,7 +5412,6 @@ AB6000032F60000200FE2775 /* NCTagEditorView.swift in Sources */, AF93471B27E2361E002537EE /* NCShareAdvancePermission.swift in Sources */, F77BC3ED293E528A005F2B08 /* NCConfigServer.swift in Sources */, - 566EB7D12B3D712200FB7CAD /* NCFilePermissionCell.swift in Sources */, F7A560422AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift in Sources */, F7D1C4AC2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift in Sources */, F7D368DF2DAFE19E0037E7C6 /* NCActivityNavigationController.swift in Sources */, @@ -5462,8 +5447,6 @@ D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, - 566EB7CF2B3D712200FB7CAD /* NCFilePermissionEditCell.swift in Sources */, - 566EB7DA2B3D721700FB7CAD /* NCShareTextInputCell.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, From 756432090d3048a007102253e8bd5097439f3490 Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Mon, 6 Oct 2025 14:51:57 +0530 Subject: [PATCH 27/29] NMC 2015 - Updated configuration changes as per version 9.6.6 --- Brand/File_Provider_Extension.entitlements | 16 +- Brand/File_Provider_Extension.plist | 77 +- ...otification_Service_Extension.entitlements | 24 +- Brand/Notification_Service_Extension.plist | 50 +- Brand/Share.entitlements | 24 +- Brand/Share.plist | 2 +- Brand/iOSClient.entitlements | 45 +- Nextcloud.xcodeproj/project.pbxproj | 1454 ++++++++++------- iOSClient/Analytics/AnalyticsHelper.swift | 5 + iOSClient/Analytics/AnalyticsService.swift | 1 + .../MoEngage/MoEngageAnalytics.swift | 101 +- iOSClient/AppUpdate/AppUpdater.swift | 10 + iOSClient/Helper/AdjustHelper.h | 3 +- iOSClient/Helper/AdjustHelper.m | 36 +- iOSClient/Helper/TealiumHelper.swift | 1 - iOSClient/Login/NCLoginWeb.swift | 81 +- ...ionViewCommon+CollectionViewDelegate.swift | 31 +- .../NCSelectableNavigationView.swift | 6 - .../Create/NCCreateFormUploadDocuments.swift | 48 +- .../Create/NCCreateFormUploadVoiceNote.swift | 6 +- .../NMC Custom Views/FolderPathCustomCell.xib | 11 +- .../NCCreateFormUploadScanDocument.swift | 74 +- .../NMC Views/PdfWithoutOcrSwitchView.swift | 1 + .../AnalysisDataCollectionSwitch.swift | 1 + iOSClient/Settings/CCAdvanced.m | 160 +- iOSClient/Settings/CCManageAutoUpload.m | 26 +- .../Settings/MagentaCloudVersionView.swift | 2 +- .../Settings/NCManageAutoUploadFileName.swift | 7 +- .../Settings/NCSettingsBundleHelper.swift | 27 +- .../SaveSettingsCustomButtonCell.swift | 2 +- iOSClient/Share/NCShareEmailFieldCell.swift | 178 +- iOSClient/Share/NCShareEmailFieldCell.xib | 217 ++- .../Share/ShareDownloadLimitNetwork.swift | 8 +- 33 files changed, 1719 insertions(+), 1016 deletions(-) diff --git a/Brand/File_Provider_Extension.entitlements b/Brand/File_Provider_Extension.entitlements index 4ecc3f0d13..946a20ea8d 100755 --- a/Brand/File_Provider_Extension.entitlements +++ b/Brand/File_Provider_Extension.entitlements @@ -2,13 +2,13 @@ - com.apple.security.application-groups - - group.it.twsweb.Crypto-Cloud - - keychain-access-groups - - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud - + com.apple.security.application-groups + + group.com.t-systems.pu-ds.magentacloud.qa + + keychain-access-groups + + $(AppIdentifierPrefix)MagentaCLOUD + diff --git a/Brand/File_Provider_Extension.plist b/Brand/File_Provider_Extension.plist index 7179d95e3a..6d726d0977 100755 --- a/Brand/File_Provider_Extension.plist +++ b/Brand/File_Provider_Extension.plist @@ -2,46 +2,41 @@ - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Nextcloud - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSExtension - - NSExtensionAttributes - - NSFileProviderSupportsMultipleDomains - - - NSExtensionFileProviderDocumentGroup - group.it.twsweb.Crypto-Cloud - NSExtensionFileProviderSupportsEnumeration - - NSExtensionFileProviderSupportsPickingFolders - - NSExtensionPointIdentifier - com.apple.fileprovider-nonui - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).FileProviderExtension - + CFBundleDevelopmentRegion + en + CFBundleDisplayName + MagentaCLOUD + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSExtension + + NSExtensionFileProviderDocumentGroup + group.de.telekom.Mediencenter + NSExtensionFileProviderSupportsEnumeration + + NSExtensionFileProviderSupportsPickingFolders + + NSExtensionPointIdentifier + com.apple.fileprovider-nonui + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).FileProviderExtension + diff --git a/Brand/Notification_Service_Extension.entitlements b/Brand/Notification_Service_Extension.entitlements index 9cf2061f89..6443f3b16e 100644 --- a/Brand/Notification_Service_Extension.entitlements +++ b/Brand/Notification_Service_Extension.entitlements @@ -2,17 +2,17 @@ - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.it.twsweb.Crypto-Cloud - - com.apple.security.network.client - - keychain-access-groups - - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud - + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.t-systems.pu-ds.magentacloud.qa + + com.apple.security.network.client + + keychain-access-groups + + $(AppIdentifierPrefix)MagentaCLOUD + diff --git a/Brand/Notification_Service_Extension.plist b/Brand/Notification_Service_Extension.plist index 7cba1da5f6..9c65088ceb 100644 --- a/Brand/Notification_Service_Extension.plist +++ b/Brand/Notification_Service_Extension.plist @@ -2,30 +2,30 @@ - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Notification Service Extension - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSExtension - - NSExtensionPointIdentifier - com.apple.usernotifications.service - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).NotificationService - + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Notification Service Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + diff --git a/Brand/Share.entitlements b/Brand/Share.entitlements index 9cf2061f89..6443f3b16e 100755 --- a/Brand/Share.entitlements +++ b/Brand/Share.entitlements @@ -2,17 +2,17 @@ - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.it.twsweb.Crypto-Cloud - - com.apple.security.network.client - - keychain-access-groups - - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud - + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.t-systems.pu-ds.magentacloud.qa + + com.apple.security.network.client + + keychain-access-groups + + $(AppIdentifierPrefix)MagentaCLOUD + diff --git a/Brand/Share.plist b/Brand/Share.plist index ec2daea2b1..a87b55d877 100755 --- a/Brand/Share.plist +++ b/Brand/Share.plist @@ -38,4 +38,4 @@ com.apple.share-services - \ No newline at end of file + diff --git a/Brand/iOSClient.entitlements b/Brand/iOSClient.entitlements index f4b9c9dcce..be9b8a7ad1 100755 --- a/Brand/iOSClient.entitlements +++ b/Brand/iOSClient.entitlements @@ -2,28 +2,27 @@ - aps-environment - development - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.com.nextcloud.apps - group.it.twsweb.Crypto-Cloud - - com.apple.security.device.audio-input - - com.apple.security.device.camera - - com.apple.security.network.client - - com.apple.security.personal-information.location - - com.apple.security.personal-information.photos-library - - keychain-access-groups - - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud - + aps-environment + development + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.t-systems.pu-ds.magentacloud.qa + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + com.apple.security.network.client + + com.apple.security.personal-information.location + + com.apple.security.personal-information.photos-library + + keychain-access-groups + + $(AppIdentifierPrefix)MagentaCLOUD + diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index d010bca3cc..879b6b87fb 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -15,66 +15,6 @@ 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; - 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */; }; - 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */; }; - 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */; }; - 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */; }; - 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */; }; - 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */; }; - 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */; }; - 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */; }; - 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */; }; - 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */; }; - 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */; }; - 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */; }; - 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */; }; - 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */; }; - 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */; }; - 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */; }; - 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */; }; - 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */; }; - 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */; }; - 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */; }; - 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */; }; - 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */; }; - 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */; }; - 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */; }; - 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */; }; - 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */; }; - 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */; }; - 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */; }; - 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */; }; - 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */; }; - 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */; }; - 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */; }; - 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */; }; - 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */; }; - 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */; }; - 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */; }; - 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */; }; - 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */; }; - 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */; }; - 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */; }; - 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */; }; - 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */; }; - 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */; }; - 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */; }; - 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */; }; - 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */; }; - 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */; }; - 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */; }; - 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 566FCF582B3ECD3400168DEA /* AdjustHelper.m */; }; - 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */; }; - 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */ = {isa = PBXBuildFile; productRef = 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */; }; - 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */; }; - 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */; }; - 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */; }; - 56AB28942B833E2D0089D373 /* Adjust in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28932B833E2D0089D373 /* Adjust */; }; - 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28962B8351720089D373 /* TealiumAutotracking */; }; - 56AB28992B8351720089D373 /* TealiumCore in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28982B8351720089D373 /* TealiumCore */; }; - 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289C2B8351730089D373 /* TealiumLocation */; }; - 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289E2B8351730089D373 /* TealiumRemoteCommands */; }; - 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A22B8351740089D373 /* TealiumVisitorService */; }; 8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */; }; AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */; }; AA3C85EB2D36BBFB00F74F12 /* OCSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */; }; @@ -149,65 +89,190 @@ AFCE353327E4ED1900FEA6C2 /* UIToolbar+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */; }; AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; - B5877EAB2DAFDDC60096BD3A /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */; }; - B5877EAC2DAFDDC60096BD3A /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */; }; - B5877EAD2DAFDDC60096BD3A /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */; }; - B5877EAE2DAFDDC60096BD3A /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */; }; - B5877EAF2DAFDDC60096BD3A /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */; }; - B5877EB02DAFDDC60096BD3A /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */; }; - B5877EB12DAFDDC60096BD3A /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */; }; - B5877EB22DAFDDC60096BD3A /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA92DAFDDC60096BD3A /* SharingTest.swift */; }; - B5877EB32DAFDDC60096BD3A /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA02DAFDDC60096BD3A /* MoreTests.swift */; }; - B5877EB42DAFDDC60096BD3A /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */; }; - B5877EB52DAFDDC60096BD3A /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */; }; - B5877EB62DAFDDC60096BD3A /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA72DAFDDC60096BD3A /* ScanTests.swift */; }; - B5877EB72DAFDDC60096BD3A /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA42DAFDDC60096BD3A /* Placeholder.swift */; }; - B5877EB82DAFDDC60096BD3A /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */; }; - B5877EBC2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; - B5877EBD2DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; - B5877EBE2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; - B5877EBF2DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; - B5877EC02DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */; }; - B5877EC12DAFDE110096BD3A /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EBA2DAFDE110096BD3A /* TestConstants.swift */; }; - B5877EC62DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */; }; - B5877EC72DAFDEE70096BD3A /* LoginIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */; }; - B5877EC82DAFDEE70096BD3A /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */; }; - B5E2E6F12DAE854D00AB2EDD /* TealiumLifecycle in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB289A2B8351720089D373 /* TealiumLifecycle */; }; - B5E2E6F22DAE854D00AB2EDD /* TealiumTagManagement in Frameworks */ = {isa = PBXBuildFile; productRef = 56AB28A02B8351730089D373 /* TealiumTagManagement */; }; - B5E2E70D2DAE86DC00AB2EDD /* HelpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */; }; - B5E2E70E2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */; }; - B5E2E70F2DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */; }; - B5E2E7102DAE86DC00AB2EDD /* CCAdvanced.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */; }; - B5E2E7112DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */; }; - B5E2E7122DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */; }; - B5E2E7132DAE86DC00AB2EDD /* ImprintViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */; }; - B5E2E7152DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */; }; - B5E2E7162DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */; }; - B5E2E7172DAE86DC00AB2EDD /* NCSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */; }; - B5E2E7182DAE86DC00AB2EDD /* CCManageAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */; }; - B5E2E7192DAE86DC00AB2EDD /* CCManageAutoUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */; }; - B5E2E71A2DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */; }; - B5E2E71B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */; }; - B5E2E71C2DAE86DC00AB2EDD /* PrivacySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */; }; - B5E2E71D2DAE86DC00AB2EDD /* NCSettings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */; }; - B5E2E71E2DAE86DC00AB2EDD /* MagentaCloudVersionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */; }; - B5E2E71F2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */; }; - B5E2E7202DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */; }; - B5E2E7212DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */; }; - B5E2E7232DAE873D00AB2EDD /* NCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */; }; - B5E2E7282DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */; }; - B5E2E7292DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */; }; - B5E2E72A2DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */; }; - B5E2E72B2DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */; }; - B5E2E7322DAE894C00AB2EDD /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */; }; - B5E2E7332DAE894C00AB2EDD /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */; }; - B5E2E7342DAE896200AB2EDD /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */; }; - B5E2E7352DAE896200AB2EDD /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */; }; - B5E2E73B2DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */; }; - B5E2E73C2DAE89D700AB2EDD /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */; }; - B5E2E73D2DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; - B5E2E7412DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */; }; - B5E2E7432DAE89D700AB2EDD /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */; }; + AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; }; + B5BEBD2F2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD302E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD312E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD322E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD332E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD342E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD352E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD362E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD372E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD382E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD392E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD3A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD3B2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD3C2E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD3D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD3E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD3F2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD402E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD412E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD422E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD432E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD442E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD452E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD462E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD472E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD482E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD492E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD4A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD4B2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; + B5BEBD4C2E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; + B5BEBD4D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; + B5BEBD4E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; + B5BEBD522E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; + B5BEBD532E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; + B5BEBD542E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; + B5BEBD552E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; + B5BEBD562E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; + B5BEBD572E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; + B5BEBD5B2E93AE2F0002C9E5 /* LoginIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */; }; + B5BEBD5C2E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */; }; + B5BEBD5D2E93AE2F0002C9E5 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */; }; + B5BEBD6B2E93AE4B0002C9E5 /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD6A2E93AE4B0002C9E5 /* SharingTest.swift */; }; + B5BEBD6C2E93AE4B0002C9E5 /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5E2E93AE4B0002C9E5 /* AssetUploadTest.swift */; }; + B5BEBD6D2E93AE4B0002C9E5 /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD642E93AE4B0002C9E5 /* NCNotificationText.swift */; }; + B5BEBD6E2E93AE4B0002C9E5 /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD692E93AE4B0002C9E5 /* SettingsTestCases.swift */; }; + B5BEBD6F2E93AE4B0002C9E5 /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD602E93AE4B0002C9E5 /* CollaboraTestCase.swift */; }; + B5BEBD702E93AE4B0002C9E5 /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD632E93AE4B0002C9E5 /* MoveAndCopyTests.swift */; }; + B5BEBD712E93AE4B0002C9E5 /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD622E93AE4B0002C9E5 /* MoreTests.swift */; }; + B5BEBD722E93AE4B0002C9E5 /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD672E93AE4B0002C9E5 /* RenameFileTests.swift */; }; + B5BEBD732E93AE4B0002C9E5 /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5F2E93AE4B0002C9E5 /* AudioUploadTests.swift */; }; + B5BEBD742E93AE4B0002C9E5 /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD652E93AE4B0002C9E5 /* OnboardingTestCase.swift */; }; + B5BEBD752E93AE4B0002C9E5 /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD612E93AE4B0002C9E5 /* E2EETests.swift */; }; + B5BEBD762E93AE4B0002C9E5 /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD682E93AE4B0002C9E5 /* ScanTests.swift */; }; + B5BEBD772E93AE4B0002C9E5 /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD662E93AE4B0002C9E5 /* PrivacyPolicyTest.swift */; }; + B5BEBD7D2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD7E2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD7F2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD802E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD812E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD822E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD832E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD842E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD852E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD862E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD872E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD882E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD892E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD8A2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD8B2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD8C2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD8D2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD8E2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD8F2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; + B5BEBD902E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; + B5BEBD912E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; + B5BEBD942E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD952E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD962E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD972E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD982E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD992E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBD9A2E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; + B5BEBDA32E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDA42E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDA52E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDA62E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDA72E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDA82E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDA92E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDAA2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDAB2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDAC2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDAD2E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDAE2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDAF2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDB02E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDB12E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDB22E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDB32E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDB42E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDB52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDB62E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDB72E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDB82E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDB92E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDBA2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDBB2E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDBC2E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDBD2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDBE2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDBF2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDC02E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDC12E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; + B5BEBDC22E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; + B5BEBDC32E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; + B5BEBDC42E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; + B5BEBDC52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; + B5BEBDC72E93AF7E0002C9E5 /* NCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */; }; + B5BEBDC92E93AFF10002C9E5 /* NCSelectableNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */; }; + B5BEBDCC2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */; }; + B5BEBDCD2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */; }; + B5BEBDCE2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */; }; + B5BEBDCF2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */; }; + B5BEBDD62E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */; }; + B5BEBDD72E93B2450002C9E5 /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */; }; + B5BEBDD82E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */; }; + B5BEBDD92E93B2450002C9E5 /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */; }; + B5BEBDDA2E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */; }; + B5BEBDDB2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */; }; + B5BEBDDC2E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */; }; + B5BEBDDD2E93B2450002C9E5 /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */; }; + B5BEBDDE2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */; }; + B5BEBDDF2E93B2450002C9E5 /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */; }; + B5BEBDE02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */; }; + B5BEBDE12E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */; }; + B5BEBDE32E93BD6F0002C9E5 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */; }; + B5BEBDE92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBDEA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBDEB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDEC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDED2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBDEE2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBDEF2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDF02E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDF12E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBDF22E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBDF32E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDF42E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDF52E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBDF62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBDF72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDF82E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDF92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBDFA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBDFB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDFC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDFD2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBDFE2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBDFF2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBE002E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBE012E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; + B5BEBE022E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; + B5BEBE032E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; + B5BEBE042E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; + B5BEBE062E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */; }; + B5BEBE1A2E93BE200002C9E5 /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */; }; + B5BEBE1B2E93BE200002C9E5 /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */; }; + B5BEBE1C2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */; }; + B5BEBE1D2E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */; }; + B5BEBE1E2E93BE200002C9E5 /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */; }; + B5BEBE1F2E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */; }; + B5BEBE202E93BE200002C9E5 /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */; }; + B5BEBE212E93BE200002C9E5 /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */; }; + B5BEBE222E93BE200002C9E5 /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */; }; + B5BEBE232E93BE200002C9E5 /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */; }; + B5BEBE242E93BE200002C9E5 /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */; }; + B5BEBE252E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */; }; + B5BEBE262E93BE200002C9E5 /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */; }; + B5BEBE272E93BE200002C9E5 /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */; }; + B5BEBE282E93BE200002C9E5 /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */; }; + B5BEBE292E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */; }; + B5BEBE2A2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */; }; + B5BEBE2B2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */; }; D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; }; D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; }; F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */; }; @@ -247,6 +312,7 @@ F359D8672A7D03420023F405 /* NCUtility+Exif.swift in Sources */ = {isa = PBXBuildFile; fileRef = F359D8662A7D03420023F405 /* NCUtility+Exif.swift */; }; F36C514F2E89393C0097E5F7 /* UIView+BlurVibrancy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */; }; F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */; }; + F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */; }; F36E64FA2B96236C0085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; @@ -255,6 +321,9 @@ F36E64FC2B9733F20085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; F36E64FD2B9735900085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; F36E64FE2B9735920085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; + F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; + F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; + F37208812BAB5979006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F37208A42BAB63EE006B5430 /* QRCodeReader in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A32BAB63EE006B5430 /* QRCodeReader */; }; F37208A62BAB63EE006B5430 /* SwiftRichString in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A52BAB63EE006B5430 /* SwiftRichString */; }; F37208AA2BAB63EE006B5430 /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A92BAB63EE006B5430 /* MarkdownKit */; }; @@ -272,7 +341,6 @@ F37208C62BAB63F0006B5430 /* LRUCache in Frameworks */ = {isa = PBXBuildFile; productRef = F37208C52BAB63F0006B5430 /* LRUCache */; }; F37208C82BAB63F1006B5430 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = F37208C72BAB63F1006B5430 /* KeychainAccess */; }; F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3754A7C2CF87D600009312E /* SetupPasscodeView.swift */; }; - F376A3742E5CC6030067EE25 /* ContextMenuActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */; }; F389C9F52CEE383300049762 /* SelectAlbumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F389C9F42CEE383300049762 /* SelectAlbumView.swift */; }; F38F71252B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */; }; F39170AD2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39170A82CB8201B006127BC /* FileAutoRenamer+Extensions.swift */; }; @@ -351,6 +419,7 @@ F71070AB2F7E49F200AEE58A /* NCEndToEndSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71070AA2F7E49E100AEE58A /* NCEndToEndSetup.swift */; }; F710D1F52405770F00A6033D /* NCViewerPDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D1F42405770F00A6033D /* NCViewerPDF.swift */; }; F710D2022405826100A6033D /* NCContextMenuViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D2012405826100A6033D /* NCContextMenuViewer.swift */; }; + F710D2022405826100A6033D /* NCViewer+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D2012405826100A6033D /* NCViewer+Menu.swift */; }; F710FC80277B7D2700AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC7F277B7D2700AA9FBF /* RealmSwift */; }; F710FC84277B7D3500AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC83277B7D3500AA9FBF /* RealmSwift */; }; F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC87277B7D3F00AA9FBF /* RealmSwift */; }; @@ -414,6 +483,15 @@ F724377D2C10B92300C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; F72437802C10B92400C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; F72437812C10B92500C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; + F72429372AFE39980040AEF3 /* NCLivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */; }; + F72429382AFE39A80040AEF3 /* NCLivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */; }; + F724377B2C10B83E00C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F724377C2C10B92200C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F724377D2C10B92300C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F724377E2C10B92300C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F724377F2C10B92400C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F72437802C10B92400C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; + F72437812C10B92500C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; F7245925289BB59100474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; F7245926289BB59300474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; @@ -450,6 +528,11 @@ F72FD3BA297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72FD3B4297ED49A00075D28 /* NCManageDatabase+E2EE.swift */; }; F7327E202B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; F7327E232B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; + F7327E242B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; + F7327E282B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; + F7327E292B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; + F7327E2B2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; + F7327E2C2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; F7327E302B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */; }; F7327E352B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E342B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift */; }; F7327E3B2B73B8D600A462C7 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AC1CAF28AB94490032D99F /* Array+Extension.swift */; }; @@ -466,6 +549,12 @@ F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7381EDE218218C9000B1560 /* NCOffline.storyboard */; }; F7386E482DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */; }; F73BC74F2F23811E003170C2 /* WarningBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DF7B3E2F1A2EE400514020 /* WarningBannerView.swift */; }; + F73ADD1C265546890069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD1B265546890069EA0D /* SwiftEntryKit */; }; + F73ADD2126554F8E0069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD2026554F8E0069EA0D /* SwiftEntryKit */; }; + F73ADD2226554FD10069EA0D /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; }; + F73ADD2426554FE20069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD2326554FE20069EA0D /* SwiftEntryKit */; }; + F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F73B42292476764F00A30FD3 /* NCNotification.storyboard */; }; + F73B422C2476764F00A30FD3 /* NCNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73B422A2476764F00A30FD3 /* NCNotification.swift */; }; F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F73CB3B122E072A000AD728E /* NCShareHeaderView.xib */; }; F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F73D11F9253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard */; }; F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73EF7A62B0223900087E6E9 /* NCManageDatabase+Comments.swift */; }; @@ -499,7 +588,6 @@ F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F741C2232B6B9FD600E849BB /* NCMediaSelectTabBar.swift */; }; F74230F32C79B57200CA1ACA /* NCNetworking+Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */; }; F7434B3820E2400600417916 /* NCBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76B3CCD1EAE01BD00921AC9 /* NCBrand.swift */; }; - F743C89E2E5B25A1000173A9 /* UIScene+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */; }; F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F745B252222D88AE00346520 /* NCLoginQRCode.swift */; }; F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */; }; F746EC52273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */; }; @@ -545,6 +633,8 @@ F751247C2C42919C00E63DB8 /* NCPhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F751247A2C42919C00E63DB8 /* NCPhotoCell.swift */; }; F751247E2C42919C00E63DB8 /* NCPhotoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */; }; F752BA052E58C05200616A26 /* Maintenance.swift in Sources */ = {isa = PBXBuildFile; fileRef = F752BA042E58C05200616A26 /* Maintenance.swift */; }; + F75379202AE2AD9400C0250E /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F753791F2AE2AD9400C0250E /* JGProgressHUD */; }; + F75379222AE2ADA100C0250E /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F75379212AE2ADA100C0250E /* JGProgressHUD */; }; F753BA93281FD8020015BFB6 /* EasyTipView in Frameworks */ = {isa = PBXBuildFile; productRef = F753BA92281FD8020015BFB6 /* EasyTipView */; }; F755BD9B20594AC7008C5FBB /* NCService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F755BD9A20594AC7008C5FBB /* NCService.swift */; }; F755CB402B8CB13C00CE27E9 /* NCMediaLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F755CB3F2B8CB13C00CE27E9 /* NCMediaLayout.swift */; }; @@ -633,7 +723,7 @@ F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768820E2C0DD1E7001CF441 /* NCManageE2EEView.swift */; }; F76882292C0DD1E7001CF441 /* NCManageE2EEModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882102C0DD1E7001CF441 /* NCManageE2EEModel.swift */; }; F768822A2C0DD1E7001CF441 /* NCSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882112C0DD1E7001CF441 /* NCSettingsModel.swift */; }; - F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F768822C2C0DD1E7001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */ = {isa = PBXBuildFile; fileRef = F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */; }; F768822E2C0DD1E7001CF441 /* NCSettingsBundleHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */; }; F76882302C0DD1E7001CF441 /* NCFileNameModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882192C0DD1E7001CF441 /* NCFileNameModel.swift */; }; @@ -643,12 +733,12 @@ F76882342C0DD1E7001CF441 /* NCDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768821E2C0DD1E7001CF441 /* NCDisplayView.swift */; }; F76882352C0DD1E7001CF441 /* NCWebBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882202C0DD1E7001CF441 /* NCWebBrowserView.swift */; }; F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882212C0DD1E7001CF441 /* NCAcknowledgementsView.swift */; }; - F76882372C0DD22F001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; - F76882382C0DD22F001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; - F76882392C0DD230001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; - F768823A2C0DD230001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; - F768823B2C0DD231001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; - F768823C2C0DD231001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F76882372C0DD22F001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F76882382C0DD22F001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F76882392C0DD230001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F768823A2C0DD230001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F768823B2C0DD231001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F768823C2C0DD231001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; F768823E2C0DD305001CF441 /* LazyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768823D2C0DD304001CF441 /* LazyView.swift */; }; F76882402C0DD30B001CF441 /* ViewOnAppear.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768823F2C0DD30B001CF441 /* ViewOnAppear.swift */; }; F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F769453B22E9CFFF000A798A /* NCShareUserCell.xib */; }; @@ -686,6 +776,7 @@ F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F774264822EB4D0000B23912 /* NCSearchUserDropDownCell.xib */; }; F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7743A112C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift */; }; F7743A142C33F13A0034F670 /* NCCollectionViewCommon+CollectionViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7743A132C33F13A0034F670 /* NCCollectionViewCommon+CollectionViewDataSource.swift */; }; + F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77444F322281649000D5EB0 /* NCMediaCell.swift */; }; F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F77444F422281649000D5EB0 /* NCMediaCell.xib */; }; F77444F8222816D5000D5EB0 /* NCPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77444F7222816D5000D5EB0 /* NCPickerViewController.swift */; }; F778231E2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F778231D2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift */; }; @@ -723,6 +814,9 @@ F7817CF829801A3500FFBC65 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7817CF729801A3500FFBC65 /* Data+Extension.swift */; }; F7817CFB29801A3500FFBC65 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7817CF729801A3500FFBC65 /* Data+Extension.swift */; }; F7817CFF29802D1A00FFBC65 /* NCPushNotificationEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F72D1005210B6882009C96B7 /* NCPushNotificationEncryption.m */; }; + F7817D0029802D3D00FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; + F7817D0129802D5F00FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; + F7817D0229802D7700FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; F78295311F962EFA00A572F5 /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; }; F782FDC424E6933900666099 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; }; F78302F728B4C3C900B84583 /* NCManageDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB51ED5A87C00B7EAD4 /* NCManageDatabase.swift */; }; @@ -760,6 +854,7 @@ F78ACD4221903CE00088454D /* NCListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD4121903CE00088454D /* NCListCell.swift */; }; F78ACD4421903CF20088454D /* NCListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4321903CF20088454D /* NCListCell.xib */; }; F78ACD4621903D010088454D /* NCGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4521903D010088454D /* NCGridCell.xib */; }; + F78ACD4A21903F850088454D /* NCTrashListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD4821903F850088454D /* NCTrashListCell.swift */; }; F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD4921903F850088454D /* NCTrashListCell.xib */; }; F78ACD52219046DC0088454D /* NCSectionFirstHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD51219046DC0088454D /* NCSectionFirstHeader.swift */; }; F78ACD54219047D40088454D /* NCSectionFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD53219047D40088454D /* NCSectionFooter.xib */; }; @@ -816,6 +911,8 @@ F7A560462AE15D3D00BE8FD6 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7A560452AE15D3D00BE8FD6 /* Queuer */; }; F7A560482AE15D5000BE8FD6 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7A560472AE15D5000BE8FD6 /* Queuer */; }; F7A573692E190387009C9257 /* NCShareExtensionData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A573682E190377009C9257 /* NCShareExtensionData.swift */; }; + F7A60F86292D215000FCE1F2 /* NCShareAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */; }; + F7A60F87292D215000FCE1F2 /* NCShareAccounts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */; }; F7A76DC8256A71CD00119AB3 /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B7504A2397D38E004E13EC /* UIImage+Extension.swift */; }; F7A7FDDD2C2DBD6200E9A93A /* NCDeepLinkHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */; }; F7A846DE2BB01ACB0024816F /* NCTrashCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A846DD2BB01ACB0024816F /* NCTrashCellProtocol.swift */; }; @@ -834,11 +931,14 @@ F7A8D74128F18254008BBE1C /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; F7A8D74228F18261008BBE1C /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; }; F7A8D74428F1827B008BBE1C /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; + F7A8FD522C5E2557006C9CF8 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */; }; F7AC1CB028AB94490032D99F /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AC1CAF28AB94490032D99F /* Array+Extension.swift */; }; F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */ = {isa = PBXBuildFile; fileRef = F7AC9349296193050002BC0F /* Reasons to use Nextcloud.pdf */; }; F7AE00F5230D5F9E007ACF8A /* NCLoginProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AE00F4230D5F9E007ACF8A /* NCLoginProvider.swift */; }; F7AE00F8230E81CB007ACF8A /* NCBrowserWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AE00F7230E81CB007ACF8A /* NCBrowserWeb.swift */; }; F7AE00FA230E81EB007ACF8A /* NCBrowserWeb.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7AE00F9230E81EB007ACF8A /* NCBrowserWeb.storyboard */; }; + F7AEEAA62C11DBAF00011412 /* NCAccountSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */; }; + F7AEEAA82C11DBFD00011412 /* NCAccountSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */; }; F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */; }; F7B398432A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */; }; F7B6B70427C4E7FA00A7F6EB /* NCScan+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B6B70327C4E7FA00A7F6EB /* NCScan+CollectionView.swift */; }; @@ -917,12 +1017,25 @@ F7CBC31C24F78E79004D3812 /* NCSortMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC31B24F78E79004D3812 /* NCSortMenu.swift */; }; F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CEE5FE2BA9A5C9003EFD89 /* NCTrashGridCell.xib */; }; F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */; }; + F7CF067B2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; + F7CF067C2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; + F7CF067D2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; + F7CF067E2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; + F7CF067F2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; F7CF06802E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; F7CF06832E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06852E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06862E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06872E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06882E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; + F7CF06812E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; + F7CF06832E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06842E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06852E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06862E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06872E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06882E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; + F7CF06892E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */; }; F7D1C4AC2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D1C4AB2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift */; }; F7D368DF2DAFE19E0037E7C6 /* NCActivityNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D368DE2DAFE19E0037E7C6 /* NCActivityNavigationController.swift */; }; @@ -966,6 +1079,8 @@ F7D4BF4D2CA2E8D800A5E746 /* TOPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D4BF2A2CA2E8D800A5E746 /* TOPasscodeViewController.m */; }; F7D4BF542CA2ED9D00A5E746 /* VLCKitSPM in Frameworks */ = {isa = PBXBuildFile; productRef = F7D4BF532CA2ED9D00A5E746 /* VLCKitSPM */; }; F7D56B1A2972405500FA46C4 /* Mantis in Frameworks */ = {isa = PBXBuildFile; productRef = F7D56B192972405500FA46C4 /* Mantis */; }; + F7D57C8626317BDA00DE301D /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; }; + F7D57C8B26317BDE00DE301D /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D60CAE2C941ACB008FBFDD /* NCMediaPinchGesture.swift */; }; F7D61E932EBF1366007F865B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; F7D61E942EBF1366007F865B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; @@ -1030,13 +1145,15 @@ F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7EDE513262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib */; }; F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7EDE51A262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib */; }; F7EE66AD2A20B226009AE765 /* UILabel+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EE66AC2A20B226009AE765 /* UILabel+Extension.swift */; }; - F7EF2AEB2E43157B0081B2C9 /* NCNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */; }; - F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */; }; F7EFA47825ADBA500083159A /* NCViewerProviderContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EFA47725ADBA500083159A /* NCViewerProviderContextMenu.swift */; }; F7F1FB9D2E27CE7200C79E20 /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; }; F7F1FB9E2E27CE7200C79E20 /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; }; F7F1FBA82E27D13700C79E20 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7F1FBA72E27D13700C79E20 /* Queuer */; }; F7F1FBB02E27D3A800C79E20 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7F1FBAF2E27D3A800C79E20 /* Queuer */; }; + F7EFC0CD256BF8DD00461AAD /* NCUserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EFC0CC256BF8DD00461AAD /* NCUserStatus.swift */; }; + F7F3E58B2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; + F7F3E58C2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; + F7F3E58D2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F0FD27ECDBDB008676F9 /* Inconsolata-SemiBold.ttf */; }; F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F0FE27ECDBDB008676F9 /* Inconsolata-Medium.ttf */; }; @@ -1047,6 +1164,7 @@ F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F10327ECDBDB008676F9 /* Inconsolata-Light.ttf */; }; F7F4F10C27ECDBDB008676F9 /* Inconsolata-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F10427ECDBDB008676F9 /* Inconsolata-Regular.ttf */; }; F7F563042E15762B00631A11 /* MigrationMultiDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */; }; + F7F4F11227ECDC52008676F9 /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F4F11127ECDC52008676F9 /* UIFont+Extension.swift */; }; F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = F7F623B42A5EF4D30022D3D4 /* Gzip */; }; F7F623B72A5EFA0C0022D3D4 /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = F7F623B62A5EFA0C0022D3D4 /* Gzip */; }; F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; }; @@ -1065,6 +1183,7 @@ F7FDFF6F2E437E55000D7688 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FDFF592E437E55000D7688 /* NCAccount.swift */; }; F7FDFF702E437E55000D7688 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7FDFF512E437E55000D7688 /* NCAccountRequest.storyboard */; }; F7FDFF722E437E55000D7688 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FDFF522E437E55000D7688 /* NCAccountRequest.swift */; }; + F7FAFD3A28BFA948000777FE /* NCNotification+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */; }; F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */; }; F7FFFCA02FB300440015441E /* NCAssistantSharedTextStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */; }; F7FFFCA22FB300600015441E /* NCAssistantSharedTextStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */; }; @@ -1273,65 +1392,6 @@ 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; - 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; - 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; - 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = ""; }; - 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionEditCell.swift; sourceTree = ""; }; - 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionEditCell.xib; sourceTree = ""; }; - 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFilePermissionCell.swift; sourceTree = ""; }; - 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCFilePermissionCell.xib; sourceTree = ""; }; - 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareHeaderCustomCell.xib; sourceTree = ""; }; - 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareHeaderCustomCell.swift; sourceTree = ""; }; - 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareTextInputCell.xib; sourceTree = ""; }; - 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareTextInputCell.swift; sourceTree = ""; }; - 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareEmailFieldCell.xib; sourceTree = ""; }; - 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareEmailFieldCell.swift; sourceTree = ""; }; - 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareDownloadLimitNetwork.swift; sourceTree = ""; }; - 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; - 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; - 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; - 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; - 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; - 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; - 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; - 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; - 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; - 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; - 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; - 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; - 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; - 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; - 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; - 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; - 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; - 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; - 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; - 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; - 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; - 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; - 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; - 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; - 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; - 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; - 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; - 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; - 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; - 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; - 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; - 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; - 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; - 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; - 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCTrashGridCell.xib; sourceTree = ""; }; - 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; - 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; - 566FCF582B3ECD3400168DEA /* AdjustHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; - 566FCF592B3ECD3400168DEA /* AdjustHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; - 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; - 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; - 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; - 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = ""; }; AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestBackend.swift; sourceTree = ""; }; AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCSResponse.swift; sourceTree = ""; }; @@ -1453,60 +1513,77 @@ AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIToolbar+Extension.swift"; sourceTree = ""; }; AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = ""; }; AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = ""; }; - AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+Helper.swift"; sourceTree = ""; }; - B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; - B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; - B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; - B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; - B5877EA02DAFDDC60096BD3A /* MoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; - B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; - B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; - B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; - B5877EA42DAFDDC60096BD3A /* Placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = ""; }; - B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; - B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; - B5877EA72DAFDDC60096BD3A /* ScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; - B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; - B5877EA92DAFDDC60096BD3A /* SharingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; - B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseXCTestCase.swift; sourceTree = ""; }; - B5877EBA2DAFDE110096BD3A /* TestConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; - B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationXCTestCase.swift; sourceTree = ""; }; - B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesIntegrationTests.swift; sourceTree = ""; }; - B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginIntegrationTests.swift; sourceTree = ""; }; - B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisDataCollectionSwitch.swift; sourceTree = ""; }; - B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AnalysisDataCollectionSwitch.xib; sourceTree = ""; }; - B5E2E6F62DAE86DC00AB2EDD /* CCAdvanced.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCAdvanced.h; sourceTree = ""; }; - B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCAdvanced.m; sourceTree = ""; }; - B5E2E6F82DAE86DC00AB2EDD /* CCManageAccount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCManageAccount.h; sourceTree = ""; }; - B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCManageAccount.m; sourceTree = ""; }; - B5E2E6FA2DAE86DC00AB2EDD /* CCManageAutoUpload.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CCManageAutoUpload.h; sourceTree = ""; }; - B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CCManageAutoUpload.m; sourceTree = ""; }; - B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpViewController.swift; sourceTree = ""; }; - B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImprintViewController.swift; sourceTree = ""; }; - B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitialPrivacySettingsViewController.swift; sourceTree = ""; }; - B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MagentaCloudVersionView.swift; sourceTree = ""; }; - B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MagentaCloudVersionView.xib; sourceTree = ""; }; - B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCManageAutoUploadFileName.swift; sourceTree = ""; }; - B5E2E7032DAE86DC00AB2EDD /* NCSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NCSettings.h; sourceTree = ""; }; - B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NCSettings.m; sourceTree = ""; }; - B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCSettings.storyboard; sourceTree = ""; }; - B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSourceSoftwareViewController.swift; sourceTree = ""; }; - B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyViewController.swift; sourceTree = ""; }; - B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettingsViewController.swift; sourceTree = ""; }; - B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequiredDataCollectionSwitch.swift; sourceTree = ""; }; - B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RequiredDataCollectionSwitch.xib; sourceTree = ""; }; - B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveSettingsCustomButtonCell.swift; sourceTree = ""; }; - B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SaveSettingsCustomButtonCell.xib; sourceTree = ""; }; - B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginWeb.swift; sourceTree = ""; }; - B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadDocuments.storyboard; sourceTree = ""; }; - B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadDocuments.swift; sourceTree = ""; }; - B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadVoiceNote.storyboard; sourceTree = ""; }; - B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadVoiceNote.swift; sourceTree = ""; }; - B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSectionHeaderMenu.swift; sourceTree = ""; }; - B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCSectionHeaderMenu.xib; sourceTree = ""; }; - B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; - B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEmptyDataSet.swift; sourceTree = ""; }; - B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCEmptyView.xib; sourceTree = ""; }; + AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = ""; }; + B5BEBD272E93AD540002C9E5 /* File_Provider_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = File_Provider_Extension.entitlements; sourceTree = ""; }; + B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = File_Provider_Extension.plist; sourceTree = ""; }; + B5BEBD292E93AD540002C9E5 /* iOSClient.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSClient.entitlements; sourceTree = ""; }; + B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = iOSClient.plist; sourceTree = ""; }; + B5BEBD2B2E93AD540002C9E5 /* Notification_Service_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Notification_Service_Extension.entitlements; sourceTree = ""; }; + B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Notification_Service_Extension.plist; sourceTree = ""; }; + B5BEBD2D2E93AD540002C9E5 /* Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Share.entitlements; sourceTree = ""; }; + B5BEBD2E2E93AD540002C9E5 /* Share.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Share.plist; sourceTree = ""; }; + B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseXCTestCase.swift; sourceTree = ""; }; + B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; + B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationXCTestCase.swift; sourceTree = ""; }; + B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesIntegrationTests.swift; sourceTree = ""; }; + B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginIntegrationTests.swift; sourceTree = ""; }; + B5BEBD5E2E93AE4B0002C9E5 /* AssetUploadTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; + B5BEBD5F2E93AE4B0002C9E5 /* AudioUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; + B5BEBD602E93AE4B0002C9E5 /* CollaboraTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; + B5BEBD612E93AE4B0002C9E5 /* E2EETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; + B5BEBD622E93AE4B0002C9E5 /* MoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; + B5BEBD632E93AE4B0002C9E5 /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + B5BEBD642E93AE4B0002C9E5 /* NCNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; + B5BEBD652E93AE4B0002C9E5 /* OnboardingTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; + B5BEBD662E93AE4B0002C9E5 /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; + B5BEBD672E93AE4B0002C9E5 /* RenameFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; + B5BEBD682E93AE4B0002C9E5 /* ScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; + B5BEBD692E93AE4B0002C9E5 /* SettingsTestCases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; + B5BEBD6A2E93AE4B0002C9E5 /* SharingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; + B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; + B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; + B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; + B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; + B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; + B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEmptyDataSet.swift; sourceTree = ""; }; + B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCEmptyView.xib; sourceTree = ""; }; + B5BEBD9F2E93AF010002C9E5 /* AdjustHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; + B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; + B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; + B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginWeb.swift; sourceTree = ""; }; + B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSelectableNavigationView.swift; sourceTree = ""; }; + B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSectionHeaderMenu.swift; sourceTree = ""; }; + B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCSectionHeaderMenu.xib; sourceTree = ""; }; + B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadDocuments.storyboard; sourceTree = ""; }; + B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadDocuments.swift; sourceTree = ""; }; + B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadVoiceNote.storyboard; sourceTree = ""; }; + B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadVoiceNote.swift; sourceTree = ""; }; + B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; + B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; + B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; + B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; + B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; + B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; + B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; + B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; + B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; + B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; + B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; + B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; + B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; + B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; + B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; + B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; + B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; + B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; + B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; + B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; + B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; + B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; + B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; + B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; + B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; + B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityTableViewCell.swift; sourceTree = ""; }; @@ -1531,11 +1608,9 @@ F34E1ADA2ECC842200FA10C3 /* NCStatusMessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCStatusMessageModel.swift; sourceTree = ""; }; F351D1A52D0AF24A00930F94 /* PHAssetCollection+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHAssetCollection+Extension.swift"; sourceTree = ""; }; F359D8662A7D03420023F405 /* NCUtility+Exif.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCUtility+Exif.swift"; sourceTree = ""; }; - F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+BlurVibrancy.swift"; sourceTree = ""; }; - F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+SelectTabBarDelegate.swift"; sourceTree = ""; }; + F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+SelectTabBar.swift"; sourceTree = ""; }; F37208742BAB4AB0006B5430 /* TestConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; F3754A7C2CF87D600009312E /* SetupPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupPasscodeView.swift; sourceTree = ""; }; - F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMenuActions.swift; sourceTree = ""; }; F389C9F42CEE383300049762 /* SelectAlbumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectAlbumView.swift; sourceTree = ""; }; F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCollectionViewCommonSelectTabBar.swift; sourceTree = ""; }; F39170A82CB8201B006127BC /* FileAutoRenamer+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileAutoRenamer+Extensions.swift"; sourceTree = ""; }; @@ -1556,7 +1631,6 @@ F3DDFE222F1FB4C300A784C8 /* NCAssistantChatModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAssistantChatModel.swift; sourceTree = ""; }; F3E173AF2C9AF637006D177A /* ScreenAwakeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenAwakeManager.swift; sourceTree = ""; }; F3E173BF2C9B1067006D177A /* AwakeMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AwakeMode.swift; sourceTree = ""; }; - F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMetadataPermissions.swift; sourceTree = ""; }; F700222B1EC479840080073F /* Custom.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Custom.xcassets; sourceTree = ""; }; F700510022DF63AC003A3356 /* NCShare.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCShare.storyboard; sourceTree = ""; }; F700510422DF6A89003A3356 /* NCShare.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShare.swift; sourceTree = ""; }; @@ -1595,6 +1669,7 @@ F710D2012405826100A6033D /* NCContextMenuViewer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCContextMenuViewer.swift; sourceTree = ""; }; F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+AppRefresh.swift"; sourceTree = ""; }; F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+AppProcessing.swift"; sourceTree = ""; }; + F710D2012405826100A6033D /* NCViewer+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCViewer+Menu.swift"; sourceTree = ""; }; F711A4DB2AF92CAD00095DD8 /* NCUtility+Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCUtility+Date.swift"; sourceTree = ""; }; F7132C6B2D085AD200B42D6A /* NCTermOfServiceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceModel.swift; sourceTree = ""; }; F7132C6C2D085AD200B42D6A /* NCTermOfServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceView.swift; sourceTree = ""; }; @@ -1614,7 +1689,6 @@ F717402C24F699A5000C87D5 /* NCFavorite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFavorite.swift; sourceTree = ""; }; F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerMediaDetailView.swift; sourceTree = ""; }; F718E2572DF2D5C3004038AF /* NCBackgroundLocationUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCBackgroundLocationUploadManager.swift; sourceTree = ""; }; - F71916102E2901E800E13E96 /* NCNetworking+Upload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Upload.swift"; sourceTree = ""; }; F719D9DF288D37A300762E33 /* NCColorPicker.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCColorPicker.storyboard; sourceTree = ""; }; F719D9E1288D396100762E33 /* NCColorPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCColorPicker.swift; sourceTree = ""; }; F71CFA662F2A07C6007A3AE9 /* NCMedia+Netwoking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+Netwoking.swift"; sourceTree = ""; }; @@ -1627,7 +1701,7 @@ F723985B253C95CE00257F49 /* NCViewerRichdocument.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichdocument.storyboard; sourceTree = ""; }; F723B3DC22FC6D1C00301EFE /* NCShareCommentsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareCommentsCell.xib; sourceTree = ""; }; F72408322B8A27C900F128E2 /* NCMedia+Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+Command.swift"; sourceTree = ""; }; - F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSharePermissions.swift; sourceTree = ""; }; + F724377A2C10B83E00C7C68D /* NCPermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCPermissions.swift; sourceTree = ""; }; F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThreadSafeDictionary.swift; sourceTree = ""; }; F72685E827C78E490019EF5E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; F72944F12A84246400246839 /* NCEndToEndMetadataV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEndToEndMetadataV2.swift; sourceTree = ""; }; @@ -1650,6 +1724,7 @@ F7320934201B812F008A0888 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; F732093B201B81E4008A0888 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Download.swift"; sourceTree = ""; }; + F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Upload.swift"; sourceTree = ""; }; F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+WebDAV.swift"; sourceTree = ""; }; F7327E342B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+LivePhoto.swift"; sourceTree = ""; }; F732D23227CF8AED000B0F1B /* NCPlayerToolBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCPlayerToolBar.xib; sourceTree = ""; }; @@ -1663,6 +1738,8 @@ F7381EDA218218C9000B1560 /* NCOffline.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCOffline.swift; sourceTree = ""; }; F7381EDE218218C9000B1560 /* NCOffline.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCOffline.storyboard; sourceTree = ""; }; F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAppVersionManager.swift; sourceTree = ""; }; + F73B42292476764F00A30FD3 /* NCNotification.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = NCNotification.storyboard; path = Notification/NCNotification.storyboard; sourceTree = ""; }; + F73B422A2476764F00A30FD3 /* NCNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NCNotification.swift; path = Notification/NCNotification.swift; sourceTree = ""; }; F73CB3B122E072A000AD728E /* NCShareHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCShareHeaderView.xib; sourceTree = ""; }; F73CB5771ED46807005F2A5A /* NCBridgeSwift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCBridgeSwift.h; sourceTree = ""; }; F73D11F9253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerDirectEditing.storyboard; sourceTree = ""; }; @@ -1675,7 +1752,6 @@ F7411C532D7B26C600F57358 /* NCNetworking+ServerError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+ServerError.swift"; sourceTree = ""; }; F741C2232B6B9FD600E849BB /* NCMediaSelectTabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCMediaSelectTabBar.swift; sourceTree = ""; }; F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Task.swift"; sourceTree = ""; }; - F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScene+Extension.swift"; sourceTree = ""; }; F745B252222D88AE00346520 /* NCLoginQRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginQRCode.swift; sourceTree = ""; }; F747EB0C2C4AC1FF00F959A8 /* NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift"; sourceTree = ""; }; F749B649297B0CBB00087535 /* NCManageDatabase+Share.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Share.swift"; sourceTree = ""; }; @@ -1691,7 +1767,6 @@ F7501C312212E57400FB1415 /* NCMedia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCMedia.swift; sourceTree = ""; }; F751247A2C42919C00E63DB8 /* NCPhotoCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCPhotoCell.swift; sourceTree = ""; }; F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCPhotoCell.xib; sourceTree = ""; }; - F752BA042E58C05200616A26 /* Maintenance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Maintenance.swift; sourceTree = ""; }; F753701822723D620041C76C /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; F753701922723E0D0041C76C /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; F753701A22723EC80041C76C /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; @@ -1738,7 +1813,7 @@ F768820E2C0DD1E7001CF441 /* NCManageE2EEView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCManageE2EEView.swift; sourceTree = ""; }; F76882102C0DD1E7001CF441 /* NCManageE2EEModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCManageE2EEModel.swift; sourceTree = ""; }; F76882112C0DD1E7001CF441 /* NCSettingsModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSettingsModel.swift; sourceTree = ""; }; - F76882132C0DD1E7001CF441 /* NCPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCPreferences.swift; sourceTree = ""; }; + F76882132C0DD1E7001CF441 /* NCKeychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCKeychain.swift; sourceTree = ""; }; F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Acknowledgements.rtf; sourceTree = ""; }; F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSettingsBundleHelper.swift; sourceTree = ""; }; F76882192C0DD1E7001CF441 /* NCFileNameModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFileNameModel.swift; sourceTree = ""; }; @@ -1806,7 +1881,6 @@ F77C3F5A2D9BF8B500F3C471 /* UITabBar+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBar+Extension.swift"; sourceTree = ""; }; F77C97382953131000FDDD09 /* NCCameraRoll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCameraRoll.swift; sourceTree = ""; }; F77DD6A72C5CC093009448FB /* NCSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSession.swift; sourceTree = ""; }; - F77E8C1E2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+LivePhoto.swift"; sourceTree = ""; }; F77ED59028C9CE9D00E24ED0 /* ToolbarData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarData.swift; sourceTree = ""; }; F77ED59228C9CEA000E24ED0 /* ToolbarWidgetProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarWidgetProvider.swift; sourceTree = ""; }; F77ED59428C9CEA300E24ED0 /* ToolbarWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarWidgetView.swift; sourceTree = ""; }; @@ -1867,8 +1941,11 @@ F7A509242C26BD5D00326106 /* NCCreate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreate.swift; sourceTree = ""; }; F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCOperationSaveLivePhoto.swift; sourceTree = ""; }; F7A573682E190377009C9257 /* NCShareExtensionData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareExtensionData.swift; sourceTree = ""; }; + F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareAccounts.swift; sourceTree = ""; }; + F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCShareAccounts.storyboard; sourceTree = ""; }; F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCDeepLinkHandler.swift; sourceTree = ""; }; F7A846DD2BB01ACB0024816F /* NCTrashCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTrashCellProtocol.swift; sourceTree = ""; }; + F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; F7AA41B827C7CF4600494705 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/InfoPlist.strings; sourceTree = ""; }; F7AA41B927C7CF4B00494705 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; F7AA41BA27C7CF5000494705 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/InfoPlist.strings"; sourceTree = ""; }; @@ -1916,6 +1993,8 @@ F7AE00F4230D5F9E007ACF8A /* NCLoginProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginProvider.swift; sourceTree = ""; }; F7AE00F7230E81CB007ACF8A /* NCBrowserWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCBrowserWeb.swift; sourceTree = ""; }; F7AE00F9230E81EB007ACF8A /* NCBrowserWeb.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCBrowserWeb.storyboard; sourceTree = ""; }; + F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; + F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; F7B1A7761EBB3C8000BFB6D1 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionFirstHeader.xib; sourceTree = ""; }; F7B6B70327C4E7FA00A7F6EB /* NCScan+CollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCScan+CollectionView.swift"; sourceTree = ""; }; @@ -1998,6 +2077,9 @@ F7CAFE1A2F16AA8600DB35A5 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Actor.swift"; sourceTree = ""; }; F7CB77632F5843D700DE649A /* UIFont+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; + F7CA212B25F1333200826ABB /* NCAccountRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCAccountRequest.swift; sourceTree = ""; }; + F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCAccountRequest.storyboard; sourceTree = ""; }; + F7CB68992541676B0050EC94 /* NCMore.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCMore.storyboard; sourceTree = ""; }; F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionFirstHeaderEmptyData.xib; sourceTree = ""; }; F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSectionFirstHeaderEmptyData.swift; sourceTree = ""; }; F7CC04E61F5AD50D00378CEF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; @@ -2009,7 +2091,6 @@ F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAppStateManager.swift; sourceTree = ""; }; F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+CreateMetadata.swift"; sourceTree = ""; }; F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Metadata+Create.swift"; sourceTree = ""; }; - F7CF16A22A4D7C7A000FF107 /* NCMoreUserCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCMoreUserCell.xib; sourceTree = ""; }; F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichWorkspace.storyboard; sourceTree = ""; }; F7D1C4AB2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+CollectionViewDataSourcePrefetching.swift"; sourceTree = ""; }; F7D368DE2DAFE19E0037E7C6 /* NCActivityNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityNavigationController.swift; sourceTree = ""; }; @@ -2078,8 +2159,6 @@ F7EDE513262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "NCSelectCommandViewSelect+CreateFolder.xib"; sourceTree = ""; }; F7EDE51A262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSelectCommandViewCopyMove.xib; sourceTree = ""; }; F7EE66AC2A20B226009AE765 /* UILabel+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Extension.swift"; sourceTree = ""; }; - F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCNotification.storyboard; sourceTree = ""; }; - F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotification.swift; sourceTree = ""; }; F7EFA47725ADBA500083159A /* NCViewerProviderContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerProviderContextMenu.swift; sourceTree = ""; }; F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Recommendations.swift"; sourceTree = ""; }; F7F4F0FD27ECDBDB008676F9 /* Inconsolata-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-SemiBold.ttf"; sourceTree = ""; }; @@ -2091,6 +2170,7 @@ F7F4F10327ECDBDB008676F9 /* Inconsolata-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-Light.ttf"; sourceTree = ""; }; F7F4F10427ECDBDB008676F9 /* Inconsolata-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-Regular.ttf"; sourceTree = ""; }; F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationMultiDomains.swift; sourceTree = ""; }; + F7F4F11127ECDC52008676F9 /* UIFont+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; F7F67BB81A24D27800EE80DA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEndToEndMetadata.swift; sourceTree = ""; }; F7F9D1BA25397CE000D9BFF5 /* NCViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewer.swift; sourceTree = ""; }; @@ -2105,18 +2185,22 @@ F7FDFF562E437E55000D7688 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; F7FDFF572E437E55000D7688 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; F7FDFF592E437E55000D7688 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; + F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCNotification+Menu.swift"; sourceTree = ""; }; F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionHeader.xib; sourceTree = ""; }; F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAssistantSharedTextStore.swift; sourceTree = ""; }; F7FFFCA32FB3088D0015441E /* NCShareExtension+Assistant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+Assistant.swift"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + AA517BB42D66149900F8D37C /* .tx */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = .tx; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 2C33C47C23E2C475005F963B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( F33EE6ED2BF4C03800CA1A51 /* NIOSSL in Frameworks */, - F7F1FBB02E27D3A800C79E20 /* Queuer in Frameworks */, F72AD71128C24BBB006CB92D /* NextcloudKit in Frameworks */, F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */, F760DE0F2AE66EE60027D78A /* KeychainAccess in Frameworks */, @@ -2170,6 +2254,8 @@ buildActionMask = 2147483647; files = ( F7490E8B29882CE4009DCE94 /* NextcloudKit in Frameworks */, + F7490E8929882CC8009DCE94 /* SwiftEntryKit in Frameworks */, + F33EE6EB2BF4C03200CA1A51 /* NIOSSL in Frameworks */, F7490E7229882BB4009DCE94 /* RealmSwift in Frameworks */, F71221802F51AF9F00ACEB08 /* LucidBanner in Frameworks */, F760DE0D2AE66EDF0027D78A /* KeychainAccess in Frameworks */, @@ -2221,18 +2307,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B5E2E6F22DAE854D00AB2EDD /* TealiumTagManagement in Frameworks */, - B5E2E6F12DAE854D00AB2EDD /* TealiumLifecycle in Frameworks */, F7D4BF542CA2ED9D00A5E746 /* VLCKitSPM in Frameworks */, F7D56B1A2972405500FA46C4 /* Mantis in Frameworks */, F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */, F788ECC7263AAAFA00ADC67F /* MarkdownKit in Frameworks */, F3374AF02D78B01B002A38F9 /* BitCollections in Frameworks */, - 56AB28992B8351720089D373 /* TealiumCore in Frameworks */, - 56AB28972B8351720089D373 /* TealiumAutotracking in Frameworks */, - 56AB28A32B8351740089D373 /* TealiumVisitorService in Frameworks */, - 56AB289F2B8351730089D373 /* TealiumRemoteCommands in Frameworks */, - 56AB289D2B8351730089D373 /* TealiumLocation in Frameworks */, F77BC3EB293E5268005F2B08 /* Swifter in Frameworks */, F7BB7E4727A18C56009B9F29 /* Parchment in Frameworks */, F33EE6E12BF4BDA500CA1A51 /* NIOSSL in Frameworks */, @@ -2249,14 +2328,12 @@ F7160A822BE933390034DCB3 /* RealmSwift in Frameworks */, F76DA963277B760E0082465B /* Queuer in Frameworks */, F3374AF22D78B01B002A38F9 /* Collections in Frameworks */, - 56A32E6A2CE4B69B0020EFF5 /* MoEngage-iOS-SDK in Frameworks */, F72AD70D28C24B93006CB92D /* NextcloudKit in Frameworks */, F70B86752642CE3B00ED5349 /* FirebaseCrashlytics in Frameworks */, F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */, F76DA969277B77EA0082465B /* DropDown in Frameworks */, F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */, F75EAED826D2552E00F4320E /* MarqueeLabel in Frameworks */, - 56AB28942B833E2D0089D373 /* Adjust in Frameworks */, F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */, F76B649E2ADFFDEC00014640 /* LRUCache in Frameworks */, ); @@ -2275,7 +2352,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F7F1FBA82E27D13700C79E20 /* Queuer in Frameworks */, F7A8D72828F17728008BBE1C /* RealmSwift in Frameworks */, F7A8D72428F1771B008BBE1C /* NextcloudKit in Frameworks */, F33EE6E52BF4C02000CA1A51 /* NIOSSL in Frameworks */, @@ -2298,17 +2374,19 @@ 371B5A2F23D0B04B00FAFAE9 /* Menu */ = { isa = PBXGroup; children = ( - F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */, - 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */, - F78C6FDD296D677300C952C3 /* NCContextMenuMain.swift */, - F72EC7252F45C90600A2135C /* NCContextMenuNavigation.swift */, - F7FAFD3928BFA947000777FE /* NCContextMenuNotification.swift */, - B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */, - F72EC7272F45FF0600A2135C /* NCContextMenuPlus.swift */, - BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */, - AF93471127E2341B002537EE /* NCContextMenuShare.swift */, - F75D19E225EFE09000D74598 /* NCContextMenuTrash.swift */, - F710D2012405826100A6033D /* NCContextMenuViewer.swift */, + 3704EB2923D5A58400455C5B /* NCMenu.storyboard */, + 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */, + AF68326927BE65A90010BF0B /* NCMenuAction.swift */, + F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */, + AF935066276B84E700BD078F /* NCMenu+FloatingPanel.swift */, + 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */, + 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */, + F77A697C250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift */, + F75D19E225EFE09000D74598 /* NCTrash+Menu.swift */, + AF93471127E2341B002537EE /* NCShare+Menu.swift */, + F710D2012405826100A6033D /* NCViewer+Menu.swift */, + F78C6FDD296D677300C952C3 /* NCContextMenu.swift */, + F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */, ); path = Menu; sourceTree = ""; @@ -2435,14 +2513,6 @@ isa = PBXGroup; children = ( AA8D316D2D4123B200FE2775 /* DownloadLimit */, - 566EB7D82B3D721700FB7CAD /* NCShareTextInputCell.swift */, - 566EB7D72B3D721700FB7CAD /* NCShareTextInputCell.xib */, - 566EB7D42B3D71F700FB7CAD /* NCShareHeaderCustomCell.swift */, - 566EB7D32B3D71F700FB7CAD /* NCShareHeaderCustomCell.xib */, - 566EB7CD2B3D712200FB7CAD /* NCFilePermissionCell.swift */, - 566EB7CE2B3D712200FB7CAD /* NCFilePermissionCell.xib */, - 566EB7CB2B3D712200FB7CAD /* NCFilePermissionEditCell.swift */, - 566EB7CC2B3D712200FB7CAD /* NCFilePermissionEditCell.xib */, AF93471627E2361E002537EE /* NCShareAdvancePermission.swift */, AF93471827E2361E002537EE /* NCShareAdvancePermissionFooter.swift */, AF93471427E2361E002537EE /* NCShareAdvancePermissionFooter.xib */, @@ -2454,90 +2524,94 @@ path = Advanced; sourceTree = ""; }; - B5877EAA2DAFDDC60096BD3A /* NextcloudUnitTests */ = { + B5BEBD512E93AE1C0002C9E5 /* Common */ = { isa = PBXGroup; children = ( - B5877E9C2DAFDDC60096BD3A /* AssetUploadTest.swift */, - B5877E9D2DAFDDC60096BD3A /* AudioUploadTests.swift */, - B5877E9E2DAFDDC60096BD3A /* CollaboraTestCase.swift */, - B5877E9F2DAFDDC60096BD3A /* E2EETests.swift */, - B5877EA02DAFDDC60096BD3A /* MoreTests.swift */, - B5877EA12DAFDDC60096BD3A /* MoveAndCopyTests.swift */, - B5877EA22DAFDDC60096BD3A /* NCNotificationText.swift */, - B5877EA32DAFDDC60096BD3A /* OnboardingTestCase.swift */, - B5877EA42DAFDDC60096BD3A /* Placeholder.swift */, - B5877EA52DAFDDC60096BD3A /* PrivacyPolicyTest.swift */, - B5877EA62DAFDDC60096BD3A /* RenameFileTests.swift */, - B5877EA72DAFDDC60096BD3A /* ScanTests.swift */, - B5877EA82DAFDDC60096BD3A /* SettingsTestCases.swift */, - B5877EA92DAFDDC60096BD3A /* SharingTest.swift */, + B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */, + B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */, ); - path = NextcloudUnitTests; + path = Common; sourceTree = ""; }; - B5877EBB2DAFDE110096BD3A /* Common */ = { + B5BEBD792E93AEA30002C9E5 /* MoEngage */ = { isa = PBXGroup; children = ( - B5877EB92DAFDE110096BD3A /* BaseXCTestCase.swift */, - B5877EBA2DAFDE110096BD3A /* TestConstants.swift */, + B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */, ); - path = Common; + path = MoEngage; sourceTree = ""; }; - B5877EC52DAFDEE70096BD3A /* NextcloudIntegrationTests */ = { + B5BEBD7C2E93AEA30002C9E5 /* Analytics */ = { isa = PBXGroup; children = ( - B5877EC22DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift */, - B5877EC32DAFDEE70096BD3A /* FilesIntegrationTests.swift */, - B5877EC42DAFDEE70096BD3A /* LoginIntegrationTests.swift */, + B5BEBD792E93AEA30002C9E5 /* MoEngage */, + B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */, + B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */, ); - path = NextcloudIntegrationTests; + path = Analytics; sourceTree = ""; }; - B5E2E6F32DAE854D00AB2EDD /* Recovered References */ = { + B5BEBD932E93AED80002C9E5 /* AppUpdate */ = { isa = PBXGroup; children = ( - 566EB7C92B3D6FE500FB7CAD /* UIButton+Extension.swift */, - 566FCF512B3EBADE00168DEA /* NCTrashGridCell.xib */, - AA52EB452D42AC5A0089C348 /* Placeholder.swift */, - 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, - 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, - 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, - 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, - 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, - 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, - 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, - 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */, - 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, - 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, - 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */, - 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */, - 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, - AAA7BC2F2D3E3B83008F1A22 /* CapabilityResponse.swift */, - AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */, - AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */, - AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */, - AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, - AA3C85F12D394B3600F74F12 /* DownloadLimitResponse.swift */, + B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */, ); - name = "Recovered References"; + path = AppUpdate; sourceTree = ""; }; - B5E2E7372DAE89D700AB2EDD /* AppUpdate */ = { + B5BEBD9E2E93AF010002C9E5 /* EmptyView */ = { isa = PBXGroup; children = ( - B5E2E7362DAE89D700AB2EDD /* AppUpdater.swift */, + B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */, + B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */, ); - path = AppUpdate; + path = EmptyView; sourceTree = ""; }; - B5E2E73A2DAE89D700AB2EDD /* EmptyView */ = { + B5BEBDA22E93AF010002C9E5 /* Helper */ = { isa = PBXGroup; children = ( - B5E2E7382DAE89D700AB2EDD /* NCEmptyDataSet.swift */, - B5E2E7392DAE89D700AB2EDD /* NCEmptyView.xib */, + B5BEBD9F2E93AF010002C9E5 /* AdjustHelper.h */, + B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */, + B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */, ); - path = EmptyView; + path = Helper; + sourceTree = ""; + }; + B5BEBDE82E93BDB40002C9E5 /* NMC Custom Views */ = { + isa = PBXGroup; + children = ( + B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */, + B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */, + B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */, + B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */, + ); + path = "NMC Custom Views"; + sourceTree = ""; + }; + B5BEBE192E93BE200002C9E5 /* NMC Views */ = { + isa = PBXGroup; + children = ( + B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */, + B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */, + B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */, + B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */, + B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */, + B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */, + B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */, + B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */, + B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */, + B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */, + B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */, + B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */, + B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */, + B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */, + B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */, + B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */, + B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */, + B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */, + ); + path = "NMC Views"; sourceTree = ""; }; C0046CDB2A17B98400D87C9D /* NextcloudUITests */ = { @@ -2545,6 +2619,7 @@ children = ( F3374A952D6744A4002A38F9 /* BaseUIXCTestCase.swift */, AABD0C882D5F631600F009E6 /* Extensions */, + AA3C85E92D36BBDE00F74F12 /* UITestBackend */, AA8E03DB2D2FBAAD00E7E89C /* DownloadLimitUITests.swift */, F3374A932D674454002A38F9 /* AssistantUITests.swift */, F33D303D2D8B129600531D64 /* AutoUploadUITests.swift */, @@ -2553,14 +2628,25 @@ path = NextcloudUITests; sourceTree = ""; }; + C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */ = { + isa = PBXGroup; + children = ( + B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */, + B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */, + B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */, + ); + path = NextcloudIntegrationTests; + sourceTree = ""; + }; F30A962A2A27A9C800D7BCFE /* Tests */ = { isa = PBXGroup; children = ( - B5877EC52DAFDEE70096BD3A /* NextcloudIntegrationTests */, - B5877EBB2DAFDE110096BD3A /* Common */, - B5877EAA2DAFDDC60096BD3A /* NextcloudUnitTests */, + B5BEBD512E93AE1C0002C9E5 /* Common */, + C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */, + AA52EB442D42AC500089C348 /* NextcloudUnitTests */, C0046CDB2A17B98400D87C9D /* NextcloudUITests */, AABD0C862D5F58C400F009E6 /* Server.sh */, + F37208742BAB4AB0006B5430 /* TestConstants.swift */, ); path = Tests; sourceTree = ""; @@ -2797,12 +2883,8 @@ F728CE741BF6322C00E69702 /* Share */ = { isa = PBXGroup; children = ( - 566EB7E32B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift */, - 566EB7DC2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift */, - 566EB7DB2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib */, AF93471327E235EB002537EE /* Advanced */, - F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */, - F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */, + F724377A2C10B83E00C7C68D /* NCPermissions.swift */, F700510022DF63AC003A3356 /* NCShare.storyboard */, F700510422DF6A89003A3356 /* NCShare.swift */, AF730AF727834B1400B7520E /* NCShare+NCCellDelegate.swift */, @@ -2823,7 +2905,7 @@ AF2D7C7D2742559100ADF566 /* NCShareUserCell.swift */, AF93471727E2361E002537EE /* NCShareHeader.xib */, AF93471527E2361E002537EE /* NCShareHeader.swift */, - AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */, + AFCE353827E5DE0400FEA6C2 /* Shareable.swift */, AA8E03D92D2ED83300E7E89C /* TransientShare.swift */, ); path = Share; @@ -2909,7 +2991,7 @@ F7411C532D7B26C600F57358 /* NCNetworking+ServerError.swift */, F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */, F785129A2D79899E0087DDD0 /* NCNetworking+TermsOfService.swift */, - F71916102E2901E800E13E96 /* NCNetworking+Upload.swift */, + F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */, F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */, F70D8D8024A4A9BF000A5756 /* NCNetworkingProcess.swift */, F755BD9A20594AC7008C5FBB /* NCService.swift */, @@ -2929,8 +3011,8 @@ F758B41E212C516300515F55 /* Scan document */ = { isa = PBXGroup; children = ( - 566EB7E92B3D7B5F00FB7CAD /* NMC Views */, - 566EB7E72B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift */, + B5BEBE192E93BE200002C9E5 /* NMC Views */, + B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */, F758B457212C564000515F55 /* NCScan.storyboard */, F758B45D212C569C00515F55 /* NCScanCell.swift */, F758B45F212C56A400515F55 /* NCScan.swift */, @@ -2961,7 +3043,6 @@ F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */, F75D901E2D2BE12E003E740B /* NCRecommendationsCell.xib */, F75D90202D2BE26C003E740B /* NCRecommendationsCell.swift */, - F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */, ); path = Cell; sourceTree = ""; @@ -2969,6 +3050,7 @@ F7603298252F0E550015A421 /* Collection Common */ = { isa = PBXGroup; children = ( + B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */, F75FE06B2BB01D0D00A0EFEF /* Cell */, F70D7C3525FFBF81002B9E34 /* NCCollectionViewCommon.swift */, F76995F32F9A4AC000291FA7 /* NCCollectionViewCommon+UIEditMenuInteractionDelegate.swift */, @@ -2983,6 +3065,7 @@ F7865FF02F39D32500D09AE4 /* NCCollectionViewCommon+Search.swift */, F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */, F7CCAB502ECF315F00F8E68B /* NCCollectionViewCommon+SyncMetadata.swift */, + F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */, F7D4BF002CA1831600A5E746 /* NCCollectionViewCommonPinchGesture.swift */, F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */, F7C1EEA425053A9C00866ACC /* NCCollectionViewDataSource.swift */, @@ -3024,30 +3107,6 @@ F76882042C0DD1E7001CF441 /* Settings */ = { isa = PBXGroup; children = ( - B5E2E6F42DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift */, - B5E2E6F52DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib */, - B5E2E6F62DAE86DC00AB2EDD /* CCAdvanced.h */, - B5E2E6F72DAE86DC00AB2EDD /* CCAdvanced.m */, - B5E2E6F82DAE86DC00AB2EDD /* CCManageAccount.h */, - B5E2E6F92DAE86DC00AB2EDD /* CCManageAccount.m */, - B5E2E6FA2DAE86DC00AB2EDD /* CCManageAutoUpload.h */, - B5E2E6FB2DAE86DC00AB2EDD /* CCManageAutoUpload.m */, - B5E2E6FC2DAE86DC00AB2EDD /* HelpViewController.swift */, - B5E2E6FD2DAE86DC00AB2EDD /* ImprintViewController.swift */, - B5E2E6FE2DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift */, - B5E2E6FF2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift */, - B5E2E7002DAE86DC00AB2EDD /* MagentaCloudVersionView.xib */, - B5E2E7012DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift */, - B5E2E7032DAE86DC00AB2EDD /* NCSettings.h */, - B5E2E7042DAE86DC00AB2EDD /* NCSettings.m */, - B5E2E7052DAE86DC00AB2EDD /* NCSettings.storyboard */, - B5E2E7062DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift */, - B5E2E7072DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift */, - B5E2E7082DAE86DC00AB2EDD /* PrivacySettingsViewController.swift */, - B5E2E7092DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift */, - B5E2E70A2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib */, - B5E2E70B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift */, - B5E2E70C2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib */, F768820B2C0DD1E7001CF441 /* Settings */, F76882162C0DD1E7001CF441 /* AutoUpload */, F389C9F32CEE381E00049762 /* SelectAlbum */, @@ -3055,7 +3114,7 @@ F76882052C0DD1E7001CF441 /* Advanced */, F768821F2C0DD1E7001CF441 /* Helpers */, F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */, - F76882132C0DD1E7001CF441 /* NCPreferences.swift */, + F76882132C0DD1E7001CF441 /* NCKeychain.swift */, F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */, F768820D2C0DD1E7001CF441 /* E2EE */, ); @@ -3228,8 +3287,8 @@ F78ACD50219046AC0088454D /* Section Header Footer */ = { isa = PBXGroup; children = ( - B5E2E7302DAE894C00AB2EDD /* NCSectionHeaderMenu.swift */, - B5E2E7312DAE894C00AB2EDD /* NCSectionHeaderMenu.xib */, + B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */, + B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */, F78ACD51219046DC0088454D /* NCSectionFirstHeader.swift */, F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */, F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */, @@ -3259,11 +3318,11 @@ F79018B1240962C7007C9B6D /* NCViewerMedia */ = { isa = PBXGroup; children = ( - F70753EA2542A99800972D44 /* NCViewerMediaPage.swift */, F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */, + F70753F62542A9C000972D44 /* NCViewerMediaPage.storyboard */, + F70753EA2542A99800972D44 /* NCViewerMediaPage.swift */, F70753F02542A9A200972D44 /* NCViewerMedia.swift */, F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */, - F70753F62542A9C000972D44 /* NCViewerMediaPage.storyboard */, F79EDA9E26B004980007D134 /* NCPlayer */, ); path = NCViewerMedia; @@ -3333,6 +3392,7 @@ F77BB7492899857B0090FC19 /* UINavigationController+Extension.swift */, F34BDB392F5744E5007A222C /* UINavigationItem+Extension.swift */, F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */, + F77BB747289985270090FC19 /* UITabBarController+Extension.swift */, F77C3F5A2D9BF8B500F3C471 /* UITabBar+Extension.swift */, F77BB747289985270090FC19 /* UITabBarController+Extension.swift */, AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */, @@ -3383,6 +3443,15 @@ path = BrowserWeb; sourceTree = ""; }; + F7AEEAA92C11DC0600011412 /* Account Settings */ = { + isa = PBXGroup; + children = ( + F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */, + F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */, + ); + path = "Account Settings"; + sourceTree = ""; + }; F7BAAD951ED5A63D00B7EAD4 /* Data */ = { isa = PBXGroup; children = ( @@ -3404,7 +3473,6 @@ F73EF7BE2B02250B0087E6E9 /* NCManageDatabase+GPS.swift */, F757CC8129E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift */, F7BF9D812934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift */, - F77E8C1E2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift */, F7864ACB2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift */, AF4BF61827562A4B0081CEEF /* NCManageDatabase+Metadata.swift */, F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */, @@ -3424,7 +3492,7 @@ F7BFFA621A24D7300044ED85 /* Login */ = { isa = PBXGroup; children = ( - B5E2E7222DAE873D00AB2EDD /* NCLoginWeb.swift */, + B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */, F702F2F025EE5CDA008F8E80 /* NCLogin.storyboard */, F702F2F625EE5CEC008F8E80 /* NCLogin.swift */, F745B252222D88AE00346520 /* NCLoginQRCode.swift */, @@ -3444,11 +3512,16 @@ F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */, F76D364528A4F8BF00214537 /* NCActivityIndicator.swift */, F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */, + F3E173BE2C9B1057006D177A /* ScreenAwakeManager */, + F702F2FC25EE5D2C008F8E80 /* NYMnemonic */, + F7D4BF2B2CA2E8D800A5E746 /* TOPasscodeViewController */, + F76D364528A4F8BF00214537 /* NCActivityIndicator.swift */, F733598025C1C188002ABA72 /* NCAskAuthorization.swift */, F77C97382953131000FDDD09 /* NCCameraRoll.swift */, F7A3DB8F2DDE238C008F7EC8 /* NCDebouncer.swift */, F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */, F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */, + F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */, F702F30725EE5D47008F8E80 /* NCPopupViewController.swift */, F707C26421A2DC5200F6181E /* NCStoreReview.swift */, F7814E952F3B5F170074DA3A /* NCSVGRenderer.swift */, @@ -3486,6 +3559,14 @@ F7C1CDD91E6DFC6F005D92BE /* Brand */ = { isa = PBXGroup; children = ( + B5BEBD272E93AD540002C9E5 /* File_Provider_Extension.entitlements */, + B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */, + B5BEBD292E93AD540002C9E5 /* iOSClient.entitlements */, + B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */, + B5BEBD2B2E93AD540002C9E5 /* Notification_Service_Extension.entitlements */, + B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */, + B5BEBD2D2E93AD540002C9E5 /* Share.entitlements */, + B5BEBD2E2E93AD540002C9E5 /* Share.plist */, F761856529E98543006EB3B0 /* Intro */, F700222B1EC479840080073F /* Custom.xcassets */, F7362A1E220C853A005101B5 /* LaunchScreen.storyboard */, @@ -3513,14 +3594,13 @@ path = E2EE; sourceTree = ""; }; - F7C55CC82FB5CE74004A974F /* Action Assistant */ = { + F7C5259A1E3B441D00FFE02C /* Notification */ = { isa = PBXGroup; children = ( - F7C55CC32FB5CE74004A974F /* ActionViewController.swift */, - F7C55CC42FB5CE74004A974F /* Images.xcassets */, - F7C55CC72FB5CE74004A974F /* MainInterface.storyboard */, + F73B42292476764F00A30FD3 /* NCNotification.storyboard */, + F73B422A2476764F00A30FD3 /* NCNotification.swift */, ); - path = "Action Assistant"; + name = Notification; sourceTree = ""; }; F7C9739328F17131002C43E2 /* WidgetDashboardIntentHandler */ = { @@ -3531,6 +3611,17 @@ path = WidgetDashboardIntentHandler; sourceTree = ""; }; + F7CA213725F1372B00826ABB /* Account Request */ = { + isa = PBXGroup; + children = ( + F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */, + F7CA212B25F1333200826ABB /* NCAccountRequest.swift */, + F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */, + F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */, + ); + path = "Account Request"; + sourceTree = ""; + }; F7CADB3D23CCDDA1000EEC78 /* RichWorkspace */ = { isa = PBXGroup; children = ( @@ -3645,15 +3736,15 @@ F7DFB7E9219C5A0500680748 /* Create */ = { isa = PBXGroup; children = ( - B5E2E7242DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard */, - B5E2E7252DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift */, - B5E2E7262DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard */, - B5E2E7272DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift */, + B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */, + B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */, + B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */, + B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */, + B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */, + B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */, F7FA7FFD2C0F4F3B0072FC60 /* Upload Assets */, F7A509242C26BD5D00326106 /* NCCreate.swift */, F7A509242C26BD5D00326106 /* NCCreateDocument.swift */, - 566FCF2A2B3EAD4700168DEA /* TextTableViewCell.swift */, - 566FCF2B2B3EAD4700168DEA /* TextTableViewCell.xib */, F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */, F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */, F704B5E82430C0B800632F5F /* NCCreateFormUploadConflictCell.swift */, @@ -3674,7 +3765,7 @@ F7EC9CB921185F2000F1C5CE /* Media */ = { isa = PBXGroup; children = ( - 568C76CF2BCD0822009EE9C7 /* NCMediaCommandView.xib */, + B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */, F720B5B72507B9A5008C94E5 /* Cell */, F7501C302212E57400FB1415 /* NCMedia.storyboard */, F7501C312212E57400FB1415 /* NCMedia.swift */, @@ -3687,6 +3778,7 @@ F71CFA662F2A07C6007A3AE9 /* NCMedia+Netwoking.swift */, F7E2B64E2DDCC5C30075B4D0 /* NCMedia+TransferDelegate.swift */, F78B87E62B62527100C65ADC /* NCMediaDataSource.swift */, + F7D60CAE2C941ACB008FBFDD /* NCMediaPinchGesture.swift */, F78B87E82B62550800C65ADC /* NCMediaDownloadThumbnail.swift */, F755CB3F2B8CB13C00CE27E9 /* NCMediaLayout.swift */, F79699E62E689F68000EC82A /* NCMediaNavigationController.swift */, @@ -3696,15 +3788,6 @@ path = Media; sourceTree = ""; }; - F7EF2AEA2E43157B0081B2C9 /* Notification */ = { - isa = PBXGroup; - children = ( - F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */, - F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */, - ); - path = Notification; - sourceTree = ""; - }; F7EFC0CB256BF89300461AAD /* UserStatus */ = { isa = PBXGroup; children = ( @@ -3770,19 +3853,19 @@ F70716E32987F81500E72C1D /* File Provider Extension UI.appex */, C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */, C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */, - B5E2E6F32DAE854D00AB2EDD /* Recovered References */, ); sourceTree = ""; }; F7F67BAA1A24D27800EE80DA /* iOSClient */ = { isa = PBXGroup; children = ( - B5E2E7372DAE89D700AB2EDD /* AppUpdate */, - B5E2E73A2DAE89D700AB2EDD /* EmptyView */, - 566EB8122B3D861400FB7CAD /* NMC Custom Views */, - 566FCF4E2B3EB84F00168DEA /* AppUtility.swift */, - 566FCF562B3ECD3400168DEA /* Helper */, - 56A32E6F2CE4B75C0020EFF5 /* Analytics */, + B5BEBDE82E93BDB40002C9E5 /* NMC Custom Views */, + B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */, + B5BEBD9E2E93AF010002C9E5 /* EmptyView */, + B5BEBDA22E93AF010002C9E5 /* Helper */, + B5BEBD932E93AED80002C9E5 /* AppUpdate */, + B5BEBD7C2E93AEA30002C9E5 /* Analytics */, + AA517BB42D66149900F8D37C /* .tx */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */, @@ -3790,6 +3873,7 @@ F794E13E2BBC0F70003693D7 /* SceneDelegate.swift */, F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */, F77DD6A72C5CC093009448FB /* NCSession.swift */, + F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */, F76B649B2ADFFAED00014640 /* NCImageCache.swift */, F702F2CE25EE5B5C008F8E80 /* NCGlobal.swift */, F718E2572DF2D5C3004038AF /* NCBackgroundLocationUploadManager.swift */, @@ -3800,7 +3884,8 @@ F769CA1B2966EF4F00039397 /* GUI */, F317C82C2E844C3C00761AEA /* Client Integration */, F70211F31BAC56E9003FC03E /* Main */, - F7FDFF5A2E437E55000D7688 /* Account */, + F7CA213725F1372B00826ABB /* Account Request */, + F7AEEAA92C11DC0600011412 /* Account Settings */, F7A321621E9E37960069AD1B /* Activity */, F76687042B7D067400779E3F /* AudioRecorder */, F3A0478E2BD2668800658E7B /* Assistant */, @@ -3817,7 +3902,7 @@ 371B5A2F23D0B04B00FAFAE9 /* Menu */, F7CB68942541670D0050EC94 /* More */, F74D3DB81BAC1941000BAE4B /* Networking */, - F7EF2AEA2E43157B0081B2C9 /* Notification */, + F7C5259A1E3B441D00FFE02C /* Notification */, F7381ED9218218A4000B1560 /* Offline */, F713418B2597513800768D21 /* PushNotification */, F765F72E25237E3F00391DBE /* Recent */, @@ -4029,6 +4114,7 @@ F7490E8A29882CE4009DCE94 /* NextcloudKit */, F760DE0C2AE66EDF0027D78A /* KeychainAccess */, F712217F2F51AF9F00ACEB08 /* LucidBanner */, + F33EE6EA2BF4C03200CA1A51 /* NIOSSL */, ); productName = "File Provider Extension UI"; productReference = F70716E32987F81500E72C1D /* File Provider Extension UI.appex */; @@ -4409,6 +4495,13 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B5BEBDBB2E93AF010002C9E5 /* NCEmptyView.xib in Resources */, + B5BEBDF72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDF82E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, + B5BEBD3F2E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD402E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD412E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD422E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F7E4022F2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F746EC53273906C50052598D /* NCViewCertificateDetails.storyboard in Resources */, ); @@ -4418,6 +4511,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B5BEBD472E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD482E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD492E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD4A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4440,8 +4537,15 @@ buildActionMask = 2147483647; files = ( F7490E8D29882F5B009DCE94 /* Custom.xcassets in Resources */, + B5BEBDEF2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDF02E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, + B5BEBDB12E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7490E8E2988334A009DCE94 /* Localizable.strings in Resources */, F7E4022E2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, + B5BEBD432E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD442E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD452E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD462E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, AA517B812D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F722F0112CFF569500065FB5 /* MainInterface.storyboard in Resources */, ); @@ -4453,20 +4557,29 @@ files = ( F714803B262EBE3900693E51 /* MainInterface.storyboard in Resources */, F7148054262ED51000693E51 /* NCListCell.xib in Resources */, + F7D57C8626317BDA00DE301D /* NCAccountRequest.storyboard in Resources */, F7E4022C2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, AF22B209277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.xib in Resources */, - B5E2E7352DAE896200AB2EDD /* NCSectionHeaderMenu.xib in Resources */, F7CBC1242BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */, F7B398432A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, AF22B207277B4E4C00DAB0CC /* NCCreateFormUploadConflict.storyboard in Resources */, AA517B822D660EFE00F8D37C /* Localizable.stringsdict in Resources */, + B5BEBD2F2E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBDD92E93B2450002C9E5 /* TextTableViewCell.xib in Resources */, + B5BEBDDA2E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */, + B5BEBDDB2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, + B5BEBD302E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBDB62E93AF010002C9E5 /* NCEmptyView.xib in Resources */, + B5BEBD312E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD322E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, + B5BEBDCD2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, F7145A231D12E3B700CAFEEC /* Localizable.strings in Resources */, F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, - B5E2E7432DAE89D700AB2EDD /* NCEmptyView.xib in Resources */, F76C26A62850D3A500E42BDF /* Images.xcassets in Resources */, F714805E262ED52900693E51 /* NCSectionFooter.xib in Resources */, + B5BEBDFB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDFC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, F700222D1EC479840080073F /* Custom.xcassets in Resources */, - F7FDFF702E437E55000D7688 /* NCAccountRequest.storyboard in Resources */, F79ED0F22D2FCA6A00A389D9 /* NCRecommendationsCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4476,8 +4589,15 @@ buildActionMask = 2147483647; files = ( F7C7B25128B8B0C400E7115D /* Images.xcassets in Resources */, + B5BEBDFD2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDFE2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, + B5BEBDA82E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7C7B25028B8AD4500E7115D /* Localizable.strings in Resources */, F7E4022A2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, + B5BEBD372E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD382E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD392E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD3A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, AA517B832D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F7346E2328B0FEBA006CE2D2 /* Assets.xcassets in Resources */, ); @@ -4487,6 +4607,13 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B5BEBDC12E93AF010002C9E5 /* NCEmptyView.xib in Resources */, + B5BEBE012E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBE022E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, + B5BEBD4B2E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD4C2E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD4D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD4E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F7E4022D2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F746EC52273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, ); @@ -4498,33 +4625,21 @@ files = ( F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */, F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, - 566EB7D02B3D712200FB7CAD /* NCFilePermissionEditCell.xib in Resources */, - 566EB7DD2B3D72CA00FB7CAD /* NCShareEmailFieldCell.xib in Resources */, - F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, - 566EB8172B3D861500FB7CAD /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDE32E93BD6F0002C9E5 /* NCMediaCommandView.xib in Resources */, F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, - 566FCF532B3EBADE00168DEA /* NCTrashGridCell.xib in Resources */, - B5E2E7332DAE894C00AB2EDD /* NCSectionHeaderMenu.xib in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, F7F4F10827ECDBDB008676F9 /* Inconsolata-ExtraLight.ttf in Resources */, F72685E727C78E490019EF5E /* InfoPlist.strings in Resources */, - 566EB7D52B3D71F800FB7CAD /* NCShareHeaderCustomCell.xib in Resources */, F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */, - 568C76D02BCD0822009EE9C7 /* NCMediaCommandView.xib in Resources */, F7F4F10927ECDBDB008676F9 /* Inconsolata-Bold.ttf in Resources */, F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, F700222C1EC479840080073F /* Custom.xcassets in Resources */, - 566EB8082B3D7B5F00FB7CAD /* FileNameInputTextField.xib in Resources */, - B5E2E71D2DAE86DC00AB2EDD /* NCSettings.storyboard in Resources */, - B5E2E71E2DAE86DC00AB2EDD /* MagentaCloudVersionView.xib in Resources */, - B5E2E71F2DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.xib in Resources */, - B5E2E7202DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.xib in Resources */, - B5E2E7212DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.xib in Resources */, - 566EB8022B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib in Resources */, F702F2F125EE5CDB008F8E80 /* NCLogin.storyboard in Resources */, + B5BEBDF32E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDF42E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */, F758B45A212C564000515F55 /* NCScan.storyboard in Resources */, F765F73225237E3F00391DBE /* NCRecent.storyboard in Resources */, @@ -4534,48 +4649,54 @@ F757CC8C29E82D0500F31428 /* NCGroupfolders.storyboard in Resources */, F79A65C32191D90F00FF6DCC /* NCSelect.storyboard in Resources */, F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */, - 566EB80C2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib in Resources */, - 566EB7D22B3D712200FB7CAD /* NCFilePermissionCell.xib in Resources */, AF56C1DC2784856200D8BAE2 /* NCActivityCommentView.xib in Resources */, - 566EB7D92B3D721700FB7CAD /* NCShareTextInputCell.xib in Resources */, F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */, F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */, F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, - AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, - 566EB8072B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib in Resources */, F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, - 566EB80B2B3D7B5F00FB7CAD /* PasswordInputField.xib in Resources */, F7A48415297028FC00BD1B49 /* Nextcloud Hub.png in Resources */, - 566EB7FF2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib in Resources */, F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */, F7F4F10C27ECDBDB008676F9 /* Inconsolata-Regular.ttf in Resources */, F7B8B83025681C3400967775 /* GoogleService-Info.plist in Resources */, F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */, F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */, F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */, + B5BEBDCF2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */, - 566EB7FD2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib in Resources */, F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */, F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */, F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */, AF93471927E2361E002537EE /* NCShareAdvancePermissionFooter.xib in Resources */, F7725A61251F33BB00D125E0 /* NCFiles.storyboard in Resources */, F7CBC1232BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */, - B5E2E73D2DAE89D700AB2EDD /* NCEmptyView.xib in Resources */, F700510122DF63AC003A3356 /* NCShare.storyboard in Resources */, F787704F22E7019900F287A9 /* NCShareLinkCell.xib in Resources */, F70753F72542A9C000972D44 /* NCViewerMediaPage.storyboard in Resources */, F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */, F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */, + F7A60F87292D215000FCE1F2 /* NCShareAccounts.storyboard in Resources */, F761856A29E98543006EB3B0 /* NCIntro.storyboard in Resources */, F719D9E0288D37A300762E33 /* NCColorPicker.storyboard in Resources */, AA517B802D660EFE00F8D37C /* Localizable.stringsdict in Resources */, + B5BEBE232E93BE200002C9E5 /* PasswordInputField.xib in Resources */, + B5BEBE242E93BE200002C9E5 /* ScanDocumentPathView.xib in Resources */, + B5BEBE252E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib in Resources */, + B5BEBE262E93BE200002C9E5 /* PdfWithOcrSwitchView.xib in Resources */, + B5BEBE272E93BE200002C9E5 /* PNGImageSaveSwitchView.xib in Resources */, + B5BEBE282E93BE200002C9E5 /* FileNameInputTextField.xib in Resources */, + B5BEBE292E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib in Resources */, + B5BEBE2A2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib in Resources */, + B5BEBE2B2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib in Resources */, F7F4F10A27ECDBDB008676F9 /* Inconsolata-ExtraBold.ttf in Resources */, F704B5E72430C06700632F5F /* NCCreateFormUploadConflictCell.xib in Resources */, + B5BEBDDF2E93B2450002C9E5 /* TextTableViewCell.xib in Resources */, + B5BEBDE02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */, + B5BEBDE12E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, + B5BEBDA72E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7E402292BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F7C9555321F0C4CA0024296E /* NCActivity.storyboard in Resources */, F7BC287E26663F6C004D46C5 /* NCViewCertificateDetails.storyboard in Resources */, @@ -4587,23 +4708,21 @@ F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */, F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */, F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, - 566EB8192B3D861500FB7CAD /* FolderPathCustomCell.xib in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, - 566FCF2D2B3EAD4700168DEA /* TextTableViewCell.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, + B5BEBD332E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD342E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD352E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD362E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, - 566EB80D2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib in Resources */, F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */, F77B0F7D1D118A16002130FE /* Images.xcassets in Resources */, F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */, F7AE00FA230E81EB007ACF8A /* NCBrowserWeb.storyboard in Resources */, F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */, - B5E2E72A2DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.storyboard in Resources */, - B5E2E72B2DAE880700AB2EDD /* NCCreateFormUploadDocuments.storyboard in Resources */, F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */, F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */, - 566EB8012B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib in Resources */, F76687082B7D067400779E3F /* NCAudioRecorderViewController.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4622,6 +4741,13 @@ buildActionMask = 2147483647; files = ( F7E4022B2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, + B5BEBDEB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, + B5BEBDEC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, + B5BEBDC02E93AF010002C9E5 /* NCEmptyView.xib in Resources */, + B5BEBD3B2E93AD540002C9E5 /* iOSClient.plist in Resources */, + B5BEBD3C2E93AD540002C9E5 /* Share.plist in Resources */, + B5BEBD3D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, + B5BEBD3E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4682,6 +4808,14 @@ 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */, F770768A263A8A2500A1BA94 /* NCUtilityFileSystem.swift in Sources */, F77E8C1F2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, + F7CF067B2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, + F71433E72C778FFB00E20B5A /* NotificationCenter+MainThread.swift in Sources */, + F39170AA2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, + F73EF7C52B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, + 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */, + F770768A263A8A2500A1BA94 /* NCUtilityFileSystem.swift in Sources */, + F76D364928A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, + F7817CFD29801A3500FFBC65 /* Data+Extension.swift in Sources */, F7D7A7712DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, AF4BF62127562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, F702F2D225EE5B5C008F8E80 /* NCGlobal.swift in Sources */, @@ -4694,9 +4828,14 @@ F7D61EC02EBF1878007F865B /* NCManageDatabase+Tag.swift in Sources */, F7864AD22A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, F724377D2C10B92300C7C68D /* NCSharePermissions.swift in Sources */, + F314F1142A30E2DE00BC7FAB /* View+Extension.swift in Sources */, + F724377D2C10B92300C7C68D /* NCPermissions.swift in Sources */, F7D68FD028CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, F7245927289BB59300474787 /* ThreadSafeDictionary.swift in Sources */, 2C33C48223E2C475005F963B /* NotificationService.swift in Sources */, + F73EF7A52B021FAE0087E6E9 /* NCLivePhoto.swift in Sources */, + F33EE6F82BF4C9B200CA1A51 /* PKCS12.swift in Sources */, + B5BEBD952E93AED80002C9E5 /* AppUpdater.swift in Sources */, AF4BF617275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, F7BF9D872934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, AA8D31592D41052900FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, @@ -4707,8 +4846,18 @@ F7CF06832E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F7D61EA62EBF1694007F865B /* NCManageDatabase+TableCapabilities.swift in Sources */, F757CC8829E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, + F7386E462DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, + B5BEBDF52E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBDF62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, + F33918CA2C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, + D575039F27146F93008DC9DC /* String+Extension.swift in Sources */, + F7CF06832E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, + F757CC8829E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, + B5BEBD8C2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD8D2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD8E2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, + F79B646326CA661600838ACA /* UIControl+Extension.swift in Sources */, F7C687EF2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, - F3F442F42DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, F77DD6AE2C5CC093009448FB /* NCSession.swift in Sources */, F78A10C429322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7B769AE2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, @@ -4719,10 +4868,18 @@ F76882372C0DD22F001CF441 /* NCPreferences.swift in Sources */, F73EF7E52B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F7CAFE232F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, + F343A4B92A1E084400DDA874 /* PHAsset+Extension.swift in Sources */, + F76882372C0DD22F001CF441 /* NCKeychain.swift in Sources */, + F73EF7E52B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, + F73EF7D52B0225BA0087E6E9 /* NCManageDatabase+Tag.swift in Sources */, F71F6D0D2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F763D2A32A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F749B656297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F782FDC424E6933900666099 /* NCUtility.swift in Sources */, + B5BEBDB72E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDB82E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDB92E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDBA2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F74B6D9B2A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4760,13 +4917,20 @@ B5877EB82DAFDDC60096BD3A /* NCNotificationText.swift in Sources */, 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, - 566FCF4D2B3EB78F00168DEA /* OnboardingTestCase.swift in Sources */, - 566EB81E2B3D8C5500FB7CAD /* SettingsTestCases.swift in Sources */, - 566EB81C2B3D889D00FB7CAD /* E2EETests.swift in Sources */, - 566EB7E62B3D7AE900FB7CAD /* ScanTests.swift in Sources */, + B5BEBD6B2E93AE4B0002C9E5 /* SharingTest.swift in Sources */, + B5BEBD6C2E93AE4B0002C9E5 /* AssetUploadTest.swift in Sources */, + B5BEBD6D2E93AE4B0002C9E5 /* NCNotificationText.swift in Sources */, + B5BEBD6E2E93AE4B0002C9E5 /* SettingsTestCases.swift in Sources */, + B5BEBD6F2E93AE4B0002C9E5 /* CollaboraTestCase.swift in Sources */, + B5BEBD702E93AE4B0002C9E5 /* MoveAndCopyTests.swift in Sources */, + B5BEBD712E93AE4B0002C9E5 /* MoreTests.swift in Sources */, + B5BEBD722E93AE4B0002C9E5 /* RenameFileTests.swift in Sources */, + B5BEBD732E93AE4B0002C9E5 /* AudioUploadTests.swift in Sources */, + B5BEBD742E93AE4B0002C9E5 /* OnboardingTestCase.swift in Sources */, + B5BEBD752E93AE4B0002C9E5 /* E2EETests.swift in Sources */, + B5BEBD762E93AE4B0002C9E5 /* ScanTests.swift in Sources */, + B5BEBD772E93AE4B0002C9E5 /* PrivacyPolicyTest.swift in Sources */, F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, - 566FCF552B3ECBDE00168DEA /* RenameFileTests.swift in Sources */, - 566EB80F2B3D833000FB7CAD /* AudioUploadTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4780,13 +4944,17 @@ AA74AA972D3172D100BE3458 /* UITestError.swift in Sources */, AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */, AA8E03DC2D2FBAC200E7E89C /* DownloadLimitUITests.swift in Sources */, + B5BEBD562E93AE1C0002C9E5 /* TestConstants.swift in Sources */, + B5BEBD572E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */, + B5BEBD5B2E93AE2F0002C9E5 /* LoginIntegrationTests.swift in Sources */, + B5BEBD5C2E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift in Sources */, + B5BEBD5D2E93AE2F0002C9E5 /* FilesIntegrationTests.swift in Sources */, AABD0C8A2D5F67A400F009E6 /* XCUIElement.swift in Sources */, AA3C85EE2D36BCCE00F74F12 /* SharesResponse.swift in Sources */, AAA7BC2E2D3E39F1008F1A22 /* CapabilitiesResponse.swift in Sources */, AA3C85F22D394B3A00F74F12 /* DownloadLimitResponse.swift in Sources */, - B5877EC02DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, - B5877EC12DAFDE110096BD3A /* TestConstants.swift in Sources */, F3374A962D6744A4002A38F9 /* BaseUIXCTestCase.swift in Sources */, + F37208812BAB5979006B5430 /* TestConstants.swift in Sources */, F33D303E2D8B129600531D64 /* AutoUploadUITests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4795,11 +4963,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5877EC62DAFDEE70096BD3A /* BaseIntegrationXCTestCase.swift in Sources */, - B5877EC72DAFDEE70096BD3A /* LoginIntegrationTests.swift in Sources */, - B5877EC82DAFDEE70096BD3A /* FilesIntegrationTests.swift in Sources */, - B5877EBE2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, - B5877EBF2DAFDE110096BD3A /* TestConstants.swift in Sources */, + B5BEBD522E93AE1C0002C9E5 /* TestConstants.swift in Sources */, + B5BEBD532E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */, + F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4809,6 +4975,16 @@ files = ( F78E2D6A29AF02DB0024D4F3 /* Database.swift in Sources */, F75F4BC52FD008D7009E55ED /* Optional+Extension.swift in Sources */, + F74B6D9A2A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, + F7490E8329882C84009DCE94 /* NCManageDatabase+LayoutForView.swift in Sources */, + AA8D31582D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, + F73EF7DC2B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, + F7490E8029882C76009DCE94 /* NCManageDatabase+Avatar.swift in Sources */, + F343A4B82A1E084300DDA874 /* PHAsset+Extension.swift in Sources */, + F78E2D6A29AF02DB0024D4F3 /* Database.swift in Sources */, + F7C687EE2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, + F7490E7429882BCC009DCE94 /* NCManageDatabase.swift in Sources */, + F7CF067E2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7490E6E29882B56009DCE94 /* NCBrand.swift in Sources */, F7D61E942EBF1366007F865B /* UIColor+Extension.swift in Sources */, F71F6D0C2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, @@ -4822,6 +4998,30 @@ F70716E62987F81500E72C1D /* DocumentActionViewController.swift in Sources */, F763412A2EBE10F00056F538 /* NCUtilityFileSystem.swift in Sources */, F7F1FB9E2E27CE7200C79E20 /* NCNetworking.swift in Sources */, + F7490E8629882C99009DCE94 /* NCUtilityFileSystem.swift in Sources */, + F763D2A22A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, + B5BEBDAD2E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDAE2E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDAF2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDB02E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, + F73EF7E42B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, + F343A4C02A1E734600DDA874 /* Optional+Extension.swift in Sources */, + F7D7A76D2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, + F711A4E12AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, + F76882382C0DD22F001CF441 /* NCKeychain.swift in Sources */, + F7C9B9222B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, + F7490E8529882C8C009DCE94 /* NCManageDatabase+Video.swift in Sources */, + F7CF06892E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, + F7386E4A2DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, + F7490E7729882C10009DCE94 /* UIColor+Extension.swift in Sources */, + F70716E62987F81500E72C1D /* DocumentActionViewController.swift in Sources */, + F359D86C2A7D03420023F405 /* NCUtility+Exif.swift in Sources */, + F7490E8429882C89009DCE94 /* NCManageDatabase+Share.swift in Sources */, + F7490E6F29882B67009DCE94 /* UIImage+Extension.swift in Sources */, + F7490E7E29882C6E009DCE94 /* NCManageDatabase+Account.swift in Sources */, + F7490E7029882B9B009DCE94 /* NCManageDatabase+Metadata.swift in Sources */, + F73EF7AC2B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, + F73EF7C42B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, F77DD6AD2C5CC093009448FB /* NCSession.swift in Sources */, F76340F92EBDE9760056F538 /* NCManageDatabaseCore.swift in Sources */, F7CAFE222F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, @@ -4839,6 +5039,25 @@ F763413F2EBE5DC40056F538 /* FileProviderUtility.swift in Sources */, F763413A2EBE5DAB0056F538 /* FileProviderEnumerator.swift in Sources */, F763412F2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, + F73EF7A42B021FAD0087E6E9 /* NCLivePhoto.swift in Sources */, + F757CC8729E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, + F33EE6F72BF4C9B200CA1A51 /* PKCS12.swift in Sources */, + B5BEBDED2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBDEE2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, + F7B769AD2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, + F39170AC2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, + F73EF7BC2B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, + F724377E2C10B92300C7C68D /* NCPermissions.swift in Sources */, + F7490E8229882C80009DCE94 /* NCManageDatabase+E2EE.swift in Sources */, + F7490E7829882C28009DCE94 /* NCUtility.swift in Sources */, + F3E173C52C9B1067006D177A /* AwakeMode.swift in Sources */, + F71433E62C778FFB00E20B5A /* NotificationCenter+MainThread.swift in Sources */, + F33918C92C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, + F7490E7F29882C73009DCE94 /* NCManageDatabase+Activity.swift in Sources */, + B5BEBD962E93AED80002C9E5 /* AppUpdater.swift in Sources */, + B5BEBD832E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD842E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD852E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4861,7 +5080,6 @@ F72429362AFE39860040AEF3 /* NCLivePhoto.swift in Sources */, F74B91E82F51D45A0050813D /* ErrorBannerView.swift in Sources */, AF4BF61F27562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, - B5E2E7412DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */, F7CBC1262BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F7A0D1362591FBC5008F8A13 /* String+Extension.swift in Sources */, F7236DDE2F7C00E600F9D722 /* HudIndeterminateBannerView.swift in Sources */, @@ -4870,6 +5088,12 @@ F7CF06872E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F7FDFF722E437E55000D7688 /* NCAccountRequest.swift in Sources */, F7CAFE202F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, + F7327E372B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift in Sources */, + F7F3E58D2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, + F73EF7D22B0225BA0087E6E9 /* NCManageDatabase+Tag.swift in Sources */, + F74B6D982A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, + F7CF06872E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, + F7707687263A853700A1BA94 /* NCContentPresenter.swift in Sources */, F343A4B62A1E084200DDA874 /* PHAsset+Extension.swift in Sources */, F70BFC7520E0FA7D00C67599 /* NCUtility.swift in Sources */, F71DFA222F59FB9A003A93C5 /* View+Extension.swift in Sources */, @@ -4880,13 +5104,19 @@ F79ED0F12D2FCA5B00A389D9 /* NCSectionFirstHeader.swift in Sources */, F79B646126CA661600838ACA /* UIControl+Extension.swift in Sources */, F77C973A2953143A00FDDD09 /* NCCameraRoll.swift in Sources */, + B5BEBDD62E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */, + B5BEBDD72E93B2450002C9E5 /* TextTableViewCell.swift in Sources */, + B5BEBDD82E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */, F740BEF02A35C2AD00E9B6D5 /* UILabel+Extension.swift in Sources */, F7C30E01291BD2610017149B /* NCNetworkingE2EERename.swift in Sources */, F75F4BC22FD008D7009E55ED /* Optional+Extension.swift in Sources */, AF4BF61A27562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, AF4BF615275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, F798F0E225880608000DAFFD /* UIColor+Extension.swift in Sources */, + F7327E3F2B73B92800A462C7 /* NCNetworking+Synchronization.swift in Sources */, + F7CF067F2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7C9B9202B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, + B5BEBD942E93AED80002C9E5 /* AppUpdater.swift in Sources */, F78E2D6829AF02DB0024D4F3 /* Database.swift in Sources */, F7DF7B432F1A373E00514020 /* HelperBanner.swift in Sources */, AA8D31562D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, @@ -4905,7 +5135,6 @@ F7D4BF322CA2E8D800A5E746 /* TOPasscodeCircleImage.m in Sources */, F7CAFE192F168F6000DB35A5 /* NCDebouncer.swift in Sources */, F7D4BF332CA2E8D800A5E746 /* TOPasscodeView.m in Sources */, - F77E8C252E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, F7D4BF342CA2E8D800A5E746 /* TOPasscodeCircleButton.m in Sources */, F7D4BF352CA2E8D800A5E746 /* TOPasscodeInputField.m in Sources */, F7D4BF362CA2E8D800A5E746 /* TOSettingsKeypadImage.m in Sources */, @@ -4922,6 +5151,9 @@ AF22B206277B4E4C00DAB0CC /* NCCreateFormUploadConflict.swift in Sources */, F74D50362C9856D300BBBF4C /* NCCollectionViewDataSource.swift in Sources */, F7A573692E190387009C9257 /* NCShareExtensionData.swift in Sources */, + B5BEBD862E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD872E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD882E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F7BD71E62636EAFC00643C34 /* NCNetworkingE2EE.swift in Sources */, F7F878AF1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */, F7327E3B2B73B8D600A462C7 /* Array+Extension.swift in Sources */, @@ -4935,6 +5167,9 @@ F702F2D025EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F72437802C10B92400C7C68D /* NCSharePermissions.swift in Sources */, F7EDE4DB262D7BA200414FE6 /* NCCellMain.swift in Sources */, + F343A4BE2A1E734600DDA874 /* Optional+Extension.swift in Sources */, + F72437802C10B92400C7C68D /* NCPermissions.swift in Sources */, + F7EDE4DB262D7BA200414FE6 /* NCCellProtocol.swift in Sources */, F72944F62A8424F800246839 /* NCEndToEndMetadataV1.swift in Sources */, F73EF7BA2B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, F711A4EB2AF9327D00095DD8 /* UIImage+animatedGIF.m in Sources */, @@ -4947,6 +5182,7 @@ F749B64D297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F763412D2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, F72FD3B8297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, + B5BEBDCC2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */, F7A76DC8256A71CD00119AB3 /* UIImage+Extension.swift in Sources */, F7FFFCA42FB3088E0015441E /* NCShareExtension+Assistant.swift in Sources */, F3E173C32C9B1067006D177A /* AwakeMode.swift in Sources */, @@ -4955,14 +5191,19 @@ F763D2A02A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F757CC8529E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F768823A2C0DD230001CF441 /* NCPreferences.swift in Sources */, + F768823A2C0DD230001CF441 /* NCKeychain.swift in Sources */, + B5BEBDF92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBDFA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, + F7386E472DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, F737DA9E2B7B893C0063BAFC /* NCPasscode.swift in Sources */, + F7817D0129802D5F00FFBC65 /* NCViewCertificateDetails.swift in Sources */, + F7D57C8B26317BDE00DE301D /* NCAccountRequest.swift in Sources */, F7C30DF7291BC0D30017149B /* NCNetworkingE2EEUpload.swift in Sources */, F7C687EC2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, F33918C72C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, F78A10C229322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F79FFB272A97C24A0055EEA4 /* NCNetworkingE2EEMarkFolder.swift in Sources */, F7D68FCE28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, - F3F442F12DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, AF22B217277D196700DAB0CC /* NCShareExtension+DataSource.swift in Sources */, F73EF7E22B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F77DD6AB2C5CC093009448FB /* NCSession.swift in Sources */, @@ -4972,11 +5213,17 @@ AF22B208277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.swift in Sources */, F7DA0F662F66AA0D0033020C /* ShowBanner.swift in Sources */, F73EF7C22B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, + F7327E2B2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F7148041262EBE4000693E51 /* NCShareExtension.swift in Sources */, F71FA7992F3508C600E86192 /* NCNetworking+WebDAV.swift in Sources */, F76B3CCF1EAE01BD00921AC9 /* NCBrand.swift in Sources */, F72944F32A84246400246839 /* NCEndToEndMetadataV2.swift in Sources */, F7BAADCC1ED5A87C00B7EAD4 /* NCManageDatabase.swift in Sources */, + B5BEBDB22E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDB32E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDB42E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDB52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, + F7327E322B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4984,7 +5231,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F793E5A128B76541005E4B02 /* NotificationCenter+MainThread.swift in Sources */, + B5BEBDFF2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBE002E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, F76DEE9928F808AF0041B1C9 /* LockscreenWidgetView.swift in Sources */, + F7817D0029802D3D00FFBC65 /* NCViewCertificateDetails.swift in Sources */, F78302F928B4C3E600B84583 /* NCManageDatabase+Account.swift in Sources */, F7E0710128B13BB00001B882 /* DashboardData.swift in Sources */, F783030328B4C4DD00B84583 /* ThreadSafeDictionary.swift in Sources */, @@ -5000,15 +5251,22 @@ F711D63128F44801003F43C8 /* IntentHandler.swift in Sources */, F76DEE9728F808AF0041B1C9 /* LockscreenData.swift in Sources */, F72EA95A28B7BD0D00C88F0C /* FilesWidgetView.swift in Sources */, - F768823C2C0DD231001CF441 /* NCPreferences.swift in Sources */, + F7CF067C2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, + F768823C2C0DD231001CF441 /* NCKeychain.swift in Sources */, F71F6D082B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F78302FE28B4C44700B84583 /* NCBrand.swift in Sources */, F749B64B297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, AA8D31572D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, F7864ACD2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, + F343A4B42A1E084100DDA874 /* PHAsset+Extension.swift in Sources */, + F793E59F28B764F6005E4B02 /* NCContentPresenter.swift in Sources */, F76DEE9828F808AF0041B1C9 /* LockscreenWidgetProvider.swift in Sources */, F78A10C029322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F78302FA28B4C3EA00B84583 /* NCManageDatabase+Metadata.swift in Sources */, + B5BEBDA92E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDAA2E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDAB2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDAC2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F7B769A92B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, F78E2D6629AF02DB0024D4F3 /* Database.swift in Sources */, F77DD6A92C5CC093009448FB /* NCSession.swift in Sources */, @@ -5018,12 +5276,21 @@ F7BF9D832934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F757CC8329E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F73EF7A82B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, + F7327E212B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */, + B5BEBD7D2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD7E2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD7F2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, + F7BFFD2B2C8854430029A201 /* NCHud.swift in Sources */, + F7386E492DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, + F7327E3A2B73B8D500A462C7 /* Array+Extension.swift in Sources */, F74B6D962A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, F711A4E32AF9310400095DD8 /* NCUtility+Image.swift in Sources */, F749B652297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F763D29E2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F711A4DD2AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, F724377C2C10B92200C7C68D /* NCSharePermissions.swift in Sources */, + F724377C2C10B92200C7C68D /* NCPermissions.swift in Sources */, + F36E64FB2B9733F10085ABB5 /* UIView+Extension.swift in Sources */, F77ED59328C9CEA000E24ED0 /* ToolbarWidgetProvider.swift in Sources */, F72A17D828B221E300F3F159 /* DashboardWidgetView.swift in Sources */, F77ED59528C9CEA400E24ED0 /* ToolbarWidgetView.swift in Sources */, @@ -5035,12 +5302,13 @@ F76340F72EBDE9760056F538 /* NCManageDatabaseCore.swift in Sources */, F75F4BC02FD008D7009E55ED /* Optional+Extension.swift in Sources */, F7D496FD2EBFA6D9004F9823 /* String+Extension.swift in Sources */, + F33918C52C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, + F7327E292B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F7D7A7702DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, F72EA95828B7BC4F00C88F0C /* FilesData.swift in Sources */, F78302FF28B4C45000B84583 /* NCUtilityFileSystem.swift in Sources */, F73EF7B82B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, F73EF7C02B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, - F3F442EF2DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, F3E173C12C9B1067006D177A /* AwakeMode.swift in Sources */, F75DD766290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D68FCD28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, @@ -5050,6 +5318,7 @@ F72FD3B6297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, F783030128B4C49700B84583 /* UIImage+Extension.swift in Sources */, F72EA95428B7BABA00C88F0C /* FilesWidgetProvider.swift in Sources */, + B5BEBD992E93AED80002C9E5 /* AppUpdater.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5064,6 +5333,16 @@ F702F2D125EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F76341012EBDF6710056F538 /* NCManageDatabase+Tag.swift in Sources */, F7434B3820E2400600417916 /* NCBrand.swift in Sources */, + F711A4E02AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, + F76D364828A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, + F7327E242B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */, + F7C687ED2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, + F7817D0229802D7700FFBC65 /* NCViewCertificateDetails.swift in Sources */, + F7CF06842E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, + F7434B3820E2400600417916 /* NCBrand.swift in Sources */, + F7327E332B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, + F7411C572D7B26D700F57358 /* NCNetworking+ServerError.swift in Sources */, + F724377F2C10B92400C7C68D /* NCPermissions.swift in Sources */, F785EE9E2461A09900B3F945 /* NCNetworking.swift in Sources */, F771E3D320E2392D00AFB62D /* FileProviderExtension.swift in Sources */, F7D61EAB2EBF16B6007F865B /* NCManageDatabase+TableCapabilities.swift in Sources */, @@ -5079,6 +5358,43 @@ F7E742F52EC0A3DD00E2362A /* NCManageDatabase+Directory.swift in Sources */, F7E742F92EC0A5BC00E2362A /* NCManageDatabase+Metadata.swift in Sources */, F763412E2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, + F7D7A76F2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, + AF4BF616275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, + F343A4B72A1E084300DDA874 /* PHAsset+Extension.swift in Sources */, + B5BEBD972E93AED80002C9E5 /* AppUpdater.swift in Sources */, + F7434B3620E23FE000417916 /* NCManageDatabase.swift in Sources */, + F798F0E725880609000DAFFD /* UIColor+Extension.swift in Sources */, + F74B6D992A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, + F7327E2C2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, + B5BEBE032E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBE042E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, + F7D68FCF28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, + F33EE6F62BF4C9B200CA1A51 /* PKCS12.swift in Sources */, + F7A3DB922DDE23B5008F7EC8 /* NCDebouncer.swift in Sources */, + F7F3E58B2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, + F73EF7C32B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, + F7C9B9212B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, + F359D86B2A7D03420023F405 /* NCUtility+Exif.swift in Sources */, + F7864AD02A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, + F7327E402B73B92800A462C7 /* NCNetworking+Synchronization.swift in Sources */, + AF4BF61B27562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, + F70460542499095400BB98A7 /* NotificationCenter+MainThread.swift in Sources */, + F78A10C329322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, + F36E64FE2B9735920085ABB5 /* NCCellProtocol.swift in Sources */, + F7BF9D862934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, + F7E98C1827E0D0FC001F9F19 /* NCManageDatabase+Video.swift in Sources */, + F785EEA42461A4A600B3F945 /* NCUtility.swift in Sources */, + F79B646226CA661600838ACA /* UIControl+Extension.swift in Sources */, + F7C1DAEF2C3D1DF4000BDC69 /* FileProviderDomain.swift in Sources */, + B5BEBDC22E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDC32E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDC42E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDC52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, + B5BEBD8F2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD902E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD912E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, + F73EF7AB2B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, + F7327E392B73B8D400A462C7 /* Array+Extension.swift in Sources */, F78E2D6929AF02DB0024D4F3 /* Database.swift in Sources */, F771E3F320E239A600AFB62D /* FileProviderData.swift in Sources */, F7E742F32EC0A10C00E2362A /* NCManageDatabase+Account.swift in Sources */, @@ -5087,6 +5403,12 @@ F71F6D0B2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F771E3F820E239B500AFB62D /* FileProviderExtension+Thumbnail.swift in Sources */, F76882392C0DD230001CF441 /* NCPreferences.swift in Sources */, + F76882392C0DD230001CF441 /* NCKeychain.swift in Sources */, + F39170AB2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, + F7CF067D2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, + F343A4BF2A1E734600DDA874 /* Optional+Extension.swift in Sources */, + AF4BF62027562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, + F73ADD2226554FD10069EA0D /* NCContentPresenter.swift in Sources */, F77DD6AC2C5CC093009448FB /* NCSession.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5095,10 +5417,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5E2E73B2DAE89D700AB2EDD /* NCEmptyDataSet.swift in Sources */, - B5E2E73C2DAE89D700AB2EDD /* AppUpdater.swift in Sources */, - 566EB7E82B3D7B3500FB7CAD /* NCCreateFormUploadScanDocument.swift in Sources */, - B5E2E7322DAE894C00AB2EDD /* NCSectionHeaderMenu.swift in Sources */, + F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, F7E7AEA72BA32D0000512E52 /* NCCollectionViewUnifiedSearch.swift in Sources */, @@ -5125,8 +5444,10 @@ F7DF7B3F2F1A2EF900514020 /* WarningBannerView.swift in Sources */, F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */, F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */, + 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */, + F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, + F768822C2C0DD1E7001CF441 /* NCKeychain.swift in Sources */, F7BFFD282C8846020029A201 /* NCHud.swift in Sources */, - 566EB7E42B3D733900FB7CAD /* ShareDownloadLimitNetwork.swift in Sources */, F71CD6CA2930D7B1006C95C1 /* NCApplicationHandle.swift in Sources */, F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */, F73EF7D72B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, @@ -5152,6 +5473,15 @@ F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */, F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */, F73F537F1E929C8500F8678D /* NCMore.swift in Sources */, + B5BEBE1A2E93BE200002C9E5 /* PNGImageSaveSwitchView.swift in Sources */, + B5BEBE1B2E93BE200002C9E5 /* FileNameInputTextField.swift in Sources */, + B5BEBE1C2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift in Sources */, + B5BEBE1D2E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift in Sources */, + B5BEBE1E2E93BE200002C9E5 /* ScanDocumentPathView.swift in Sources */, + B5BEBE1F2E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift in Sources */, + B5BEBE202E93BE200002C9E5 /* JPGImageSaveSwitchView.swift in Sources */, + B5BEBE212E93BE200002C9E5 /* PasswordInputField.swift in Sources */, + B5BEBE222E93BE200002C9E5 /* PdfWithOcrSwitchView.swift in Sources */, F702F2CF25EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F794E13F2BBC0F70003693D7 /* SceneDelegate.swift in Sources */, F714A1472ED84AF90050A43B /* HudBannerView.swift in Sources */, @@ -5159,6 +5489,7 @@ F72CD63A25C19EBF00F46F9A /* NCAutoUpload.swift in Sources */, AF93471D27E2361E002537EE /* NCShareAdvancePermissionFooter.swift in Sources */, AF1A9B6427D0CA1E00F17A9E /* UIAlertController+Extension.swift in Sources */, + F73B422C2476764F00A30FD3 /* NCNotification.swift in Sources */, F7FA80012C0F4F3B0072FC60 /* NCUploadAssetsView.swift in Sources */, F74230F32C79B57200CA1ACA /* NCNetworking+Task.swift in Sources */, F757CC8229E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, @@ -5168,7 +5499,9 @@ F77444F8222816D5000D5EB0 /* NCPickerViewController.swift in Sources */, F77BB74A2899857B0090FC19 /* UINavigationController+Extension.swift in Sources */, F70898672EDDB39B00EF85BD /* NCNetworking+TransferDelegate.swift in Sources */, + F7327E282B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F769454622E9F1B0000A798A /* NCShareCommon.swift in Sources */, + B5BEBDC92E93AFF10002C9E5 /* NCSelectableNavigationView.swift in Sources */, F70753F12542A9A200972D44 /* NCViewerMedia.swift in Sources */, F799DF822C4B7DCC003410B5 /* NCSectionFooter.swift in Sources */, F76B649C2ADFFAED00014640 /* NCImageCache.swift in Sources */, @@ -5177,8 +5510,10 @@ F78A18B823CDE2B300F681F3 /* NCViewerRichWorkspace.swift in Sources */, F34E1AD92ECC839100FA10C3 /* EmojiTextField.swift in Sources */, F768822E2C0DD1E7001CF441 /* NCSettingsBundleHelper.swift in Sources */, + F7A60F86292D215000FCE1F2 /* NCShareAccounts.swift in Sources */, F72408332B8A27C900F128E2 /* NCMedia+Command.swift in Sources */, F755CB402B8CB13C00CE27E9 /* NCMediaLayout.swift in Sources */, + B5BEBDCE2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */, F73EF7B72B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, AF4BF61927562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */, @@ -5190,17 +5525,15 @@ F758B460212C56A400515F55 /* NCScan.swift in Sources */, F76882262C0DD1E7001CF441 /* NCSettingsView.swift in Sources */, F78ACD52219046DC0088454D /* NCSectionFirstHeader.swift in Sources */, - F743C89E2E5B25A1000173A9 /* UIScene+Extension.swift in Sources */, F72944F52A8424F800246839 /* NCEndToEndMetadataV1.swift in Sources */, F710D2022405826100A6033D /* NCContextMenuViewer.swift in Sources */, + F710D2022405826100A6033D /* NCViewer+Menu.swift in Sources */, F765E9CD295C585800A09ED8 /* NCUploadScanDocument.swift in Sources */, F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */, F77A697D250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift in Sources */, - 566EB7FC2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift in Sources */, F7BF9D822934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F7110AE02F9773230095AA5C /* AppDelegate+AppRefresh.swift in Sources */, AA8D31662D411FA100FE2775 /* NCShareDateCell.swift in Sources */, - F3F442EE2DDE292D00FD701F /* NCMetadataPermissions.swift in Sources */, F3374A812D64AB9F002A38F9 /* StatusInfo.swift in Sources */, AF7E504E27A2D8FF00B5E4AF /* UIBarButton+Extension.swift in Sources */, AA8D31682D41224800FE2775 /* NCShareToggleCell.swift in Sources */, @@ -5210,21 +5543,20 @@ F78A10BF29322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */, F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */, - F71916142E2901FB00E13E96 /* NCNetworking+Upload.swift in Sources */, F704B5E92430C0B800632F5F /* NCCreateFormUploadConflictCell.swift in Sources */, F72D404923D2082500A97FD0 /* NCViewerDirectEditing.swift in Sources */, AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */, + AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, - 566EB8042B3D7B5F00FB7CAD /* ScanDocumentPathView.swift in Sources */, F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */, F71638942FA0F65A00A913B7 /* NCMoreModel.swift in Sources */, F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */, - 566EB80A2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift in Sources */, F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */, F724377B2C10B83E00C7C68D /* NCSharePermissions.swift in Sources */, F317C82E2E844C5300761AEA /* ClientIntegrationUIViewer.swift in Sources */, + F724377B2C10B83E00C7C68D /* NCPermissions.swift in Sources */, F794E13D2BBBFF2E003693D7 /* NCMainTabBarController.swift in Sources */, F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F7D4BF3D2CA2E8D800A5E746 /* TOPasscodeKeypadView.m in Sources */, @@ -5250,7 +5582,6 @@ F7D4BF4B2CA2E8D800A5E746 /* TOPasscodeViewContentLayout.m in Sources */, F7D4BF4C2CA2E8D800A5E746 /* TOPasscodeSettingsKeypadButton.m in Sources */, F7D4BF4D2CA2E8D800A5E746 /* TOPasscodeViewController.m in Sources */, - F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */, AAE330042D2ED20200B04903 /* NCShareNavigationTitleSetting.swift in Sources */, F71CFA672F2A07DB007A3AE9 /* NCMedia+Netwoking.swift in Sources */, @@ -5260,11 +5591,9 @@ F76882352C0DD1E7001CF441 /* NCWebBrowserView.swift in Sources */, F72CA0572F5048C3002E2F06 /* UIApplication+Extension.swift in Sources */, F3A047972BD2668800658E7B /* NCAssistantEmptyView.swift in Sources */, - 566FCF2C2B3EAD4700168DEA /* TextTableViewCell.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, - 566FCF5A2B3ECD3400168DEA /* TealiumHelper.swift in Sources */, AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, @@ -5276,22 +5605,9 @@ 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */, F7E7AEA52BA32C6500512E52 /* NCCollectionViewDownloadThumbnail.swift in Sources */, - B5E2E70D2DAE86DC00AB2EDD /* HelpViewController.swift in Sources */, - B5E2E70E2DAE86DC00AB2EDD /* MagentaCloudVersionView.swift in Sources */, - B5E2E70F2DAE86DC00AB2EDD /* AnalysisDataCollectionSwitch.swift in Sources */, - B5E2E7102DAE86DC00AB2EDD /* CCAdvanced.m in Sources */, - B5E2E7112DAE86DC00AB2EDD /* InitialPrivacySettingsViewController.swift in Sources */, - B5E2E7122DAE86DC00AB2EDD /* NCManageAutoUploadFileName.swift in Sources */, - B5E2E7132DAE86DC00AB2EDD /* ImprintViewController.swift in Sources */, - B5E2E7152DAE86DC00AB2EDD /* OpenSourceSoftwareViewController.swift in Sources */, - B5E2E7162DAE86DC00AB2EDD /* RequiredDataCollectionSwitch.swift in Sources */, - B5E2E7172DAE86DC00AB2EDD /* NCSettings.m in Sources */, - B5E2E7182DAE86DC00AB2EDD /* CCManageAccount.m in Sources */, - B5E2E7192DAE86DC00AB2EDD /* CCManageAutoUpload.m in Sources */, - B5E2E71A2DAE86DC00AB2EDD /* PrivacyPolicyViewController.swift in Sources */, - B5E2E71B2DAE86DC00AB2EDD /* SaveSettingsCustomButtonCell.swift in Sources */, - B5E2E71C2DAE86DC00AB2EDD /* PrivacySettingsViewController.swift in Sources */, AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, + B5BEBE062E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift in Sources */, + F70460522499061800BB98A7 /* NotificationCenter+MainThread.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, F78F74362163781100C2ADAD /* NCTrash.swift in Sources */, F39298972A3B12CB00509762 /* BaseNCMoreCell.swift in Sources */, @@ -5308,6 +5624,7 @@ F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D4BF012CA1831900A5E746 /* NCCollectionViewCommonPinchGesture.swift in Sources */, F74B6D952A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, + F7A8FD522C5E2557006C9CF8 /* NCAccount.swift in Sources */, F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */, F702F2F725EE5CED008F8E80 /* NCLogin.swift in Sources */, F75D90212D2BE26F003E740B /* NCRecommendationsCell.swift in Sources */, @@ -5318,13 +5635,13 @@ F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */, F7A7FDDD2C2DBD6200E9A93A /* NCDeepLinkHandler.swift in Sources */, F778231E2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift in Sources */, + 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */, F710D1F52405770F00A6033D /* NCViewerPDF.swift in Sources */, F72EC7242F45C81600A2135C /* NotificationCenter+Extension.swift in Sources */, F389C9F52CEE383300049762 /* SelectAlbumView.swift in Sources */, F7B6B70427C4E7FA00A7F6EB /* NCScan+CollectionView.swift in Sources */, F7816EF22C2C3E1F00A52517 /* NCPushNotification.swift in Sources */, F76882342C0DD1E7001CF441 /* NCDisplayView.swift in Sources */, - 566EB7FE2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift in Sources */, F7C30DF6291BC0CA0017149B /* NCNetworkingE2EEUpload.swift in Sources */, F3DDFE232F1FB4C300A784C8 /* NCAssistantChatModel.swift in Sources */, F7501C332212E57500FB1415 /* NCMedia.swift in Sources */, @@ -5354,22 +5671,23 @@ F768823E2C0DD305001CF441 /* LazyView.swift in Sources */, F7CAFE1B2F16AA8D00DB35A5 /* main.swift in Sources */, F3E173B02C9AF637006D177A /* ScreenAwakeManager.swift in Sources */, + F7CA212D25F1333300826ABB /* NCAccountRequest.swift in Sources */, F747EB0D2C4AC1FF00F959A8 /* NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift in Sources */, F765F73125237E3F00391DBE /* NCRecent.swift in Sources */, F76B3CCE1EAE01BD00921AC9 /* NCBrand.swift in Sources */, F7FA7FFC2C0F4EE40072FC60 /* NCViewerQuickLookView.swift in Sources */, + B5BEBDC72E93AF7E0002C9E5 /* NCLoginWeb.swift in Sources */, F3A0479B2BD2668800658E7B /* NCAssistant.swift in Sources */, F359D8672A7D03420023F405 /* NCUtility+Exif.swift in Sources */, - B5E2E7232DAE873D00AB2EDD /* NCLoginWeb.swift in Sources */, F7A03E352D427312007AA677 /* NCMainNavigationController.swift in Sources */, F769CA192966EA3C00039397 /* ComponentView.swift in Sources */, F7C9B91D2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, F71070AB2F7E49F200AEE58A /* NCEndToEndSetup.swift in Sources */, AF93474C27E34120002537EE /* NCUtility+Image.swift in Sources */, + F7AEEAA62C11DBAF00011412 /* NCAccountSettingsView.swift in Sources */, F702F30125EE5D2C008F8E80 /* NYMnemonic.m in Sources */, AF93474E27E3F212002537EE /* NCShareNewUserAddComment.swift in Sources */, F7C30DFD291BD0B80017149B /* NCNetworkingE2EEDelete.swift in Sources */, - F77E8C232E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, F76882302C0DD1E7001CF441 /* NCFileNameModel.swift in Sources */, F7CF06882E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F72FD3B5297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, @@ -5383,7 +5701,6 @@ F7E8A391295DC5E0006CB2D0 /* View+Extension.swift in Sources */, F7CB77642F5843E500DE649A /* UIFont+Extension.swift in Sources */, F79B869B265E19D40085C0E0 /* NSMutableAttributedString+Extension.swift in Sources */, - 566EB81A2B3D861500FB7CAD /* FolderPathCustomCell.swift in Sources */, F7B7504B2397D38F004E13EC /* UIImage+Extension.swift in Sources */, AF3FDCC22796ECC300710F60 /* NCTrash+CollectionView.swift in Sources */, F70D7C3725FFBF82002B9E34 /* NCCollectionViewCommon.swift in Sources */, @@ -5396,15 +5713,11 @@ AAFC0D092F9AA10000F0A001 /* NCFocusedAutoUploadCloudAnimation.swift in Sources */, AAFC0D0B2F9AA10000F0A001 /* NCAutoUploadCounter.swift in Sources */, F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, - F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, - 566EB8052B3D7B5F00FB7CAD /* FileNameInputTextField.swift in Sources */, F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */, - 566EB8002B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift in Sources */, F75D19E325EFE09000D74598 /* NCTrash+Menu.swift in Sources */, F34E1ADB2ECC842B00FA10C3 /* NCStatusMessageModel.swift in Sources */, F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */, AA8D316E2D4123B200FE2775 /* NCShareDownloadLimitTableViewControllerDelegate.swift in Sources */, - F36C514F2E89393C0097E5F7 /* UIView+BlurVibrancy.swift in Sources */, AA8D316F2D4123B200FE2775 /* NCShareDownloadLimitTableViewController.swift in Sources */, AA8D31702D4123B200FE2775 /* DownloadLimitViewModel.swift in Sources */, AA8D31712D4123B200FE2775 /* NCShareDownloadLimitViewController.swift in Sources */, @@ -5422,7 +5735,6 @@ F749B651297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F7FAFD3A28BFA948000777FE /* NCContextMenuNotification.swift in Sources */, F74C0436253F1CDC009762AB /* NCShares.swift in Sources */, - F79699E72E689F68000EC82A /* NCMediaNavigationController.swift in Sources */, F7AC1CB028AB94490032D99F /* Array+Extension.swift in Sources */, F7AE00F5230D5F9E007ACF8A /* NCLoginProvider.swift in Sources */, F707C26521A2DC5200F6181E /* NCStoreReview.swift in Sources */, @@ -5439,18 +5751,22 @@ F7C30DFA291BCF790017149B /* NCNetworkingE2EECreateFolder.swift in Sources */, F72CA05C2F5051DB002E2F06 /* AlertActionBannerView.swift in Sources */, F76995F42F9A4AC400291FA7 /* NCCollectionViewCommon+UIEditMenuInteractionDelegate.swift in Sources */, + B5BEBDDC2E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */, + B5BEBDDD2E93B2450002C9E5 /* TextTableViewCell.swift in Sources */, + B5BEBDDE2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */, F722133B2D40EF9D002F7438 /* NCFilesNavigationController.swift in Sources */, F7BC288026663F85004D46C5 /* NCViewCertificateDetails.swift in Sources */, F78B87E92B62550800C65ADC /* NCMediaDownloadThumbnail.swift in Sources */, - 566EB8092B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift in Sources */, - F73EF7AF2B0224350087E6E9 /* NCManageDatabase+DirectEditing.swift in Sources */, D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, - 566EB7DE2B3D72CA00FB7CAD /* NCShareEmailFieldCell.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, + F7AEEAA82C11DBFD00011412 /* NCAccountSettingsModel.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, - 566EB8182B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift in Sources */, + B5BEBDA32E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDA42E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDA52E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDA62E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F7725A60251F33BB00D125E0 /* NCFiles.swift in Sources */, F704B5E52430AA8000632F5F /* NCCreateFormUploadConflict.swift in Sources */, F7865FF12F39D32F00D09AE4 /* NCCollectionViewCommon+Search.swift in Sources */, @@ -5458,7 +5774,6 @@ F76687072B7D067400779E3F /* NCAudioRecorderViewController.swift in Sources */, AA8E03DA2D2ED83300E7E89C /* TransientShare.swift in Sources */, F7A03E2F2D425A14007AA677 /* NCFavoriteNavigationController.swift in Sources */, - 566FCF4F2B3EB84F00168DEA /* AppUtility.swift in Sources */, F343A4BB2A1E734600DDA874 /* Optional+Extension.swift in Sources */, F76882232C0DD1E7001CF441 /* NCCapabilitiesModel.swift in Sources */, F3DDFE212F1F953000A784C8 /* NCAssistantChatConversations.swift in Sources */, @@ -5474,16 +5789,21 @@ F70CEF5623E9C7E50007035B /* UIColor+Extension.swift in Sources */, F76882242C0DD1E7001CF441 /* NCSettingsAdvancedView.swift in Sources */, F785129C2D7989B30087DDD0 /* NCNetworking+TermsOfService.swift in Sources */, + B5BEBDF12E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBDF22E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, F77C3F5B2D9BF8CD00F3C471 /* UITabBar+Extension.swift in Sources */, F7D7A76E2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, - F7F563042E15762B00631A11 /* MigrationMultiDomains.swift in Sources */, F75CA1472962F13700B01130 /* NCHUDView.swift in Sources */, F77BB748289985270090FC19 /* UITabBarController+Extension.swift in Sources */, F7DA0F672F66AA0D0033020C /* ShowBanner.swift in Sources */, F752BA052E58C05200616A26 /* Maintenance.swift in Sources */, + B5BEBD982E93AED80002C9E5 /* AppUpdater.swift in Sources */, F763D29D2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F76882252C0DD1E7001CF441 /* NCSettingsAdvancedModel.swift in Sources */, F7C7B489245EBA4100D93E60 /* NCViewerQuickLook.swift in Sources */, + B5BEBD892E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD8A2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD8B2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F758B45E212C569D00515F55 /* NCScanCell.swift in Sources */, F78B87E72B62527100C65ADC /* NCMediaDataSource.swift in Sources */, F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */, @@ -5537,14 +5857,21 @@ F7F1FB9D2E27CE7200C79E20 /* NCNetworking.swift in Sources */, F7A8D73528F17E16008BBE1C /* NCManageDatabase.swift in Sources */, F3F442F02DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, + F343A4BD2A1E734600DDA874 /* Optional+Extension.swift in Sources */, + F7A8D73528F17E16008BBE1C /* NCManageDatabase.swift in Sources */, F7A8D74428F1827B008BBE1C /* ThreadSafeDictionary.swift in Sources */, F7C9739528F17131002C43E2 /* IntentHandler.swift in Sources */, F7A8D73D28F181D3008BBE1C /* NCUtilityFileSystem.swift in Sources */, + B5BEBD802E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, + B5BEBD812E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, + B5BEBD822E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F73EF7E12B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F7C9B91F2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, F75DD767290ABB25002EB562 /* Intent.intentdefinition in Sources */, F72437812C10B92500C7C68D /* NCSharePermissions.swift in Sources */, F7D61EBE2EBF1878007F865B /* NCManageDatabase+Tag.swift in Sources */, + F72437812C10B92500C7C68D /* NCPermissions.swift in Sources */, + F39170A92CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, F749B64C297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7A8D73F28F181EF008BBE1C /* NCGlobal.swift in Sources */, F74B6D972A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, @@ -5553,11 +5880,19 @@ F763D29F2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F7A8D73728F17E1E008BBE1C /* NCManageDatabase+Account.swift in Sources */, F77E8C202E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, + F7A8D74328F1826F008BBE1C /* String+Extension.swift in Sources */, + F73EF7A32B021FAC0087E6E9 /* NCLivePhoto.swift in Sources */, + B5BEBD9A2E93AED80002C9E5 /* AppUpdater.swift in Sources */, + F7A8D73728F17E1E008BBE1C /* NCManageDatabase+Account.swift in Sources */, + F7817CFA29801A3500FFBC65 /* Data+Extension.swift in Sources */, F7BF9D842934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F73EF7A92B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, + F7CF06812E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7A8D73C28F181BC008BBE1C /* NCBrand.swift in Sources */, F711A4DE2AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, - F768823B2C0DD231001CF441 /* NCPreferences.swift in Sources */, + F768823B2C0DD231001CF441 /* NCKeychain.swift in Sources */, + B5BEBDE92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, + B5BEBDEA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, AA8D31532D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, F7A8D74228F18261008BBE1C /* NCUtility.swift in Sources */, F7A8D73A28F17E28008BBE1C /* NCManageDatabase+Video.swift in Sources */, @@ -5576,6 +5911,10 @@ F7B769AA2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, F7A8D74028F18212008BBE1C /* UIImage+Extension.swift in Sources */, F73EF7B92B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, + B5BEBDBC2E93AF010002C9E5 /* AppUtility.swift in Sources */, + B5BEBDBD2E93AF010002C9E5 /* AdjustHelper.m in Sources */, + B5BEBDBE2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, + B5BEBDBF2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F71F6D092B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F757CC8429E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F78E2D6729AF02DB0024D4F3 /* Database.swift in Sources */, @@ -6583,7 +6922,6 @@ F7F67BC91A24D27800EE80DA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; @@ -6651,7 +6989,6 @@ F7F67BCA1A24D27800EE80DA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; @@ -6829,30 +7166,6 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/Tealium/tealium-swift.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.0.0; - }; - }; - 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/adjust/ios_sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 4.29.5; - }; - }; - 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/moengage/MoEngage-iOS-SDK.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 9.18.1; - }; - }; F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apple/swift-collections.git"; @@ -6898,7 +7211,7 @@ repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 12.0.0; + minimumVersion = 8.9.0; }; }; F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */ = { @@ -6919,10 +7232,18 @@ }; F734B06428E75C0100E180D5 /* XCRemoteSwiftPackageReference "TLPhotoPicker" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/tilltue/TLPhotoPicker"; + repositoryURL = "https://github.com/marinofaggiana/TLPhotoPicker"; + requirement = { + branch = master; + kind = branch; + }; + }; + F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/huri000/SwiftEntryKit"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 2.0.0; + minimumVersion = 1.2.7; }; }; F753BA91281FD8010015BFB6 /* XCRemoteSwiftPackageReference "EasyTipView" */ = { @@ -6946,7 +7267,7 @@ repositoryURL = "https://github.com/nicklockwood/LRUCache"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 1.0.7; + minimumVersion = 1.0.4; }; }; F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */ = { @@ -6965,6 +7286,14 @@ kind = branch; }; }; + F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/scenee/FloatingPanel"; + requirement = { + kind = exactVersion; + version = 2.8.6; + }; + }; F77333862927A72100466E35 /* XCRemoteSwiftPackageReference "OpenSSL" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/krzyzanowskim/OpenSSL"; @@ -7048,43 +7377,6 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */ = { - isa = XCSwiftPackageProductDependency; - package = 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */; - productName = "MoEngage-iOS-SDK"; - }; - 56AB28932B833E2D0089D373 /* Adjust */ = { - isa = XCSwiftPackageProductDependency; - productName = Adjust; - }; - 56AB28962B8351720089D373 /* TealiumAutotracking */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumAutotracking; - }; - 56AB28982B8351720089D373 /* TealiumCore */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumCore; - }; - 56AB289A2B8351720089D373 /* TealiumLifecycle */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumLifecycle; - }; - 56AB289C2B8351730089D373 /* TealiumLocation */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumLocation; - }; - 56AB289E2B8351730089D373 /* TealiumRemoteCommands */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumRemoteCommands; - }; - 56AB28A02B8351730089D373 /* TealiumTagManagement */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumTagManagement; - }; - 56AB28A22B8351740089D373 /* TealiumVisitorService */ = { - isa = XCSwiftPackageProductDependency; - productName = TealiumVisitorService; - }; F3374AEF2D78B01B002A38F9 /* BitCollections */ = { isa = XCSwiftPackageProductDependency; package = F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */; diff --git a/iOSClient/Analytics/AnalyticsHelper.swift b/iOSClient/Analytics/AnalyticsHelper.swift index ef86eb7cf0..54281e40df 100644 --- a/iOSClient/Analytics/AnalyticsHelper.swift +++ b/iOSClient/Analytics/AnalyticsHelper.swift @@ -81,5 +81,10 @@ class AnalyticsHelper: NSObject, AnalyticsService { self.analyticsServices.forEach { $0.trackCreateFolder(isEncrypted: isEncrypted, creationDate: creationDate) } } } + + func displayInAppNotification() { + self.analyticsServices.forEach { $0.displayInAppNotification() } + } + } diff --git a/iOSClient/Analytics/AnalyticsService.swift b/iOSClient/Analytics/AnalyticsService.swift index 8c57108ba4..e20600ca76 100644 --- a/iOSClient/Analytics/AnalyticsService.swift +++ b/iOSClient/Analytics/AnalyticsService.swift @@ -19,6 +19,7 @@ protocol AnalyticsService { func trackCreateVoiceMemo(size: Int64, date: Date) func trackCreateFolder(isEncrypted: Bool, creationDate: Date) func trackEventWithMetadata(eventName: AnalyticEvents, metadata: tableMetadata) + func displayInAppNotification() } // swiftlint:disable identifier_name diff --git a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift index 29b4a9ecbc..ca07324744 100644 --- a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift +++ b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift @@ -8,11 +8,15 @@ import Foundation import MoEngageSDK +import MoEngageInApps +import StoreKit -class MoEngageAnalytics { +class MoEngageAnalytics: NSObject { // Initializer for the MoEngageAnalytics class - init() { + override init() { + super.init() + // Create a configuration object for MoEngage SDK with the given App ID and Data Center let sdkConfig = MoEngageSDKConfig(appId: "7KWWUKA6OKXGP8Q6DMCXLDX5", dataCenter: MoEngageDataCenter.data_center_02) @@ -27,12 +31,59 @@ class MoEngageAnalytics { #else MoEngage.sharedInstance.initializeDefaultLiveInstance(sdkConfig) #endif + setupMoEngageInAppMessaging() + + // Register delegate for In-App Native callbacks + MoEngageSDKInApp.sharedInstance.setInAppDelegate(self) } // Method to track the App ID func trackAppId() { MoEngageSDKAnalytics.sharedInstance.trackLocale(forAppID: "312838242") } + + func setupMoEngageInAppMessaging() { + //MARK: MoEngage In-App messages + MoEngageSDKInApp.sharedInstance.showInApp() + MoEngageSDKInApp.sharedInstance.showNudge() + } + + // Handles triggering Apple's native review popup +// private func requestAppStoreReview() { +// DispatchQueue.main.async { +// if let scene = UIApplication.shared.connectedScenes +// .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { +// SKStoreReviewController.requestReview(in: scene) +// } +// } +// } + + private func requestAppStoreReview() { + DispatchQueue.main.async { + guard + let windowScene = UIApplication.shared.connectedScenes + .compactMap({ $0 as? UIWindowScene }) + .first(where: { $0.activationState == .foregroundActive }) + else { + return + } + + #if targetEnvironment(simulator) + // Simulator fallback for testing + let alert = UIAlertController( + title: "Review Prompt (Simulator)", + message: "This simulates the App Store review dialog.", + preferredStyle: .alert + ) + alert.addAction(UIAlertAction(title: "OK", style: .default)) + windowScene.keyWindow?.rootViewController?.present(alert, animated: true) + #else + // Real request on device + SKStoreReviewController.requestReview(in: windowScene) + #endif + } + } + } // AnalyticsService protocol @@ -136,7 +187,11 @@ extension MoEngageAnalytics: AnalyticsService { MoEngageSDKAnalytics.sharedInstance.trackEvent(AnalyticEvents.EVENT__CREATE_VOICE_MEMO.rawValue, withProperties: properties) } - + func displayInAppNotification() { + MoEngageSDKInApp.sharedInstance.showInApp() + //For showing nudges at any mentioned position + MoEngageSDKInApp.sharedInstance.showNudge() + } } // Functions @@ -176,6 +231,44 @@ extension MoEngageAnalytics { } -// SCAN("scan"), +// MARK: - MoEngage In-App Native Delegate +extension MoEngageAnalytics: MoEngageInAppNativeDelegate { + // Called when user clicks an in-app with navigation action (e.g., deep link) + func inAppClicked(withCampaignInfo inappCampaign: MoEngageInAppCampaign, + andNavigationActionInfo navigationAction: MoEngageInAppNavigationAction, + forAccountMeta accountMeta: MoEngageAccountMeta) { + // handle navigation actions if needed + } + + // Called when user clicks an in-app with custom action (e.g., our rating trigger) + func inAppClicked(withCampaignInfo inappCampaign: MoEngageInAppCampaign, + andCustomActionInfo customAction: MoEngageInAppAction, + forAccountMeta accountMeta: MoEngageAccountMeta) { + + let kv = customAction.keyValuePairs + + if let showRating = kv["show-native-rating"] as? String, + showRating.lowercased() == "true" { + requestAppStoreReview() + } + } + // Called when a "self-handled" in-app is triggered + func selfHandledInAppTriggered(withInfo inAppCampaign: MoEngageInAppSelfHandledCampaign, + forAccountMeta accountMeta: MoEngageAccountMeta) { + // no-op unless you use self-handled campaigns + } + + // Optional — track impression + func inAppShown(withCampaignInfo inappCampaign: MoEngageInAppCampaign, + forAccountMeta accountMeta: MoEngageAccountMeta) { + // no-op + } + + // Optional — track dismissal + func inAppDismissed(withCampaignInfo inappCampaign: MoEngageInAppCampaign, + forAccountMeta accountMeta: MoEngageAccountMeta) { + // no-op + } +} diff --git a/iOSClient/AppUpdate/AppUpdater.swift b/iOSClient/AppUpdate/AppUpdater.swift index 631490a28b..15dd5f6991 100644 --- a/iOSClient/AppUpdate/AppUpdater.swift +++ b/iOSClient/AppUpdate/AppUpdater.swift @@ -75,6 +75,16 @@ class AppUpdater { completion(nil, nil) } } +// let iOSVersion = remoteConfig["ios_app_version"].stringValue ?? "default_value" +// let isForcheUpdate = remoteConfig["ios_force_update"].boolValue +// if let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { +// if iOSVersion != currentVersion { +// // There is an update available +// completion(iOSVersion,isForcheUpdate) +// } else { +// completion(nil, nil) +// } +// } } } else { // Handle error diff --git a/iOSClient/Helper/AdjustHelper.h b/iOSClient/Helper/AdjustHelper.h index 3323a8fab0..9b63269a17 100644 --- a/iOSClient/Helper/AdjustHelper.h +++ b/iOSClient/Helper/AdjustHelper.h @@ -6,7 +6,8 @@ // Copyright © 2023 Marino Faggiana. All rights reserved. // #import -#import +//#import +#import NS_ASSUME_NONNULL_BEGIN diff --git a/iOSClient/Helper/AdjustHelper.m b/iOSClient/Helper/AdjustHelper.m index 7ff8ad7aee..5556a35d13 100644 --- a/iOSClient/Helper/AdjustHelper.m +++ b/iOSClient/Helper/AdjustHelper.m @@ -14,10 +14,10 @@ @implementation AdjustHelper -(void)configAdjust { self.yourAppToken = @"1zfaxn19pd7k"; self.environment = ADJEnvironmentProduction; - self.adjustConfig = [ADJConfig configWithAppToken:self.yourAppToken + self.adjustConfig = [[ADJConfig alloc] initWithAppToken:self.yourAppToken environment:self.environment]; [self.adjustConfig setLogLevel:ADJLogLevelVerbose]; - [Adjust appDidLaunch:self.adjustConfig]; + [Adjust initSdk:self.adjustConfig]; } -(void)subsessionEnd { @@ -29,7 +29,8 @@ -(void)subsessionStart { } - (void)trackLogin { - self.eventLogin = [ADJEvent eventWithEventToken:@"p8hl78"]; + self.eventLogin = [[ADJEvent alloc] initWithEventToken:@"p8hl78"]; +// self.eventLogin = [ADJEvent eventWithEventToken:@"p8hl78"]; [Adjust trackEvent: self.eventLogin]; } @@ -43,7 +44,7 @@ -(void)trackEvent:(TriggerEvent)event { switch(event){ case Login: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"p8hl78"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"p8hl78"]; // event = [ADJEvent eventWithEventToken:@"gb97gb"]; // self.event = [ADJEvent eventWithEventToken:@"gb97gb"]; [Adjust trackEvent:event]; @@ -51,7 +52,7 @@ -(void)trackEvent:(TriggerEvent)event { break; case LoginSuccessful: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"dowf81"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"dowf81"]; // event = [ADJEvent eventWithEventToken:@"gb97gb"]; // self.event = [ADJEvent eventWithEventToken:@"gb97gb"]; [Adjust trackEvent:event]; @@ -59,7 +60,7 @@ -(void)trackEvent:(TriggerEvent)event { break; case Sharing: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"mbeoyd"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"mbeoyd"]; [Adjust trackEvent:event]; NSLog(@"%@", [event debugDescription]); } @@ -67,77 +68,77 @@ -(void)trackEvent:(TriggerEvent)event { break; case CreateLink: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"29b333"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"29b333"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"qeyql3"]; break; case DocumentScan: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"im963g"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"im963g"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"7fec8n"]; break; case CameraUpload: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"hf9paq"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"hf9paq"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"v1g6ly"]; break; case FileUpload: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"hsbk2m"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"hsbk2m"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"4rd8r4"]; break; case UseCamera: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"3czack"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"3czack"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"3czack"]; break; case Logout: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"n5q2qu"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"n5q2qu"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"g6mj9y"]; break; case ResetsApp: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"3sj1xp"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"3sj1xp"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"zi18r0"]; break; case AutomaticUploadPhotosOn: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"5lxz6h"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"5lxz6h"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"vwd9yk"]; break; case AutomaticUploadPhotosOff: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"176496"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"176496"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"e95w5t"]; break; case ManualBackup: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"oojr4y"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"oojr4y"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"oojr4y"]; break; case AutomaticBackup: { - ADJEvent *event = [ADJEvent eventWithEventToken:@"7dkhkx"]; + ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"7dkhkx"]; [Adjust trackEvent:event]; } // self.event = [ADJEvent eventWithEventToken:@"7dkhkx"]; @@ -150,4 +151,3 @@ -(void)trackEvent:(TriggerEvent)event { } @end - diff --git a/iOSClient/Helper/TealiumHelper.swift b/iOSClient/Helper/TealiumHelper.swift index 9680da8e0a..6d4065b5ea 100644 --- a/iOSClient/Helper/TealiumHelper.swift +++ b/iOSClient/Helper/TealiumHelper.swift @@ -53,4 +53,3 @@ class TealiumHelper: NSObject { TealiumHelper.shared.tealium?.track(tealEvent) } } - diff --git a/iOSClient/Login/NCLoginWeb.swift b/iOSClient/Login/NCLoginWeb.swift index daa39f5e6c..9c77f83e49 100644 --- a/iOSClient/Login/NCLoginWeb.swift +++ b/iOSClient/Login/NCLoginWeb.swift @@ -49,6 +49,9 @@ class NCLoginWeb: UIViewController { var loginFlowV2Endpoint = "" var loginFlowV2Login = "" + /// Controller + var controller: NCMainTabBarController? + // MARK: - View Life Cycle override func viewDidLoad() { @@ -329,42 +332,54 @@ extension NCLoginWeb: WKNavigationDelegate { // MARK: - - func createAccount(urlBase: String, user: String, password: String) { - let controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController +// func createAccount(urlBase: String, user: String, password: String) { +// let controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController +// if let host = URL(string: urlBase)?.host { +// NCNetworking.shared.writeCertificate(host: host) +// } +// NCAccount().createAccount(urlBase: urlBase, user: user, password: password, controller: controller) { account, error in +// if error == .success { +// let window = UIApplication.shared.firstWindow +// if let controller = window?.rootViewController as? NCMainTabBarController { +// controller.account = account +// self.dismiss(animated: true) +// } else { +// if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? NCMainTabBarController { +// AnalyticsHelper.shared.trackUserData() +// controller.account = account +// controller.modalPresentationStyle = .fullScreen +// controller.view.alpha = 0 +// +// window?.rootViewController = controller +// window?.makeKeyAndVisible() +// +// if let scene = window?.windowScene { +// SceneManager.shared.register(scene: scene, withRootViewController: controller) +// } +// +// UIView.animate(withDuration: 0.5) { +// controller.view.alpha = 1 +// } +// } +// } +// } else { +// let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: error.errorDescription, preferredStyle: .alert) +// alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) +// self.present(alertController, animated: true) +// } +// } +// } + + private func createAccount(urlBase: String, user: String, password: String) { + if self.controller == nil { + self.controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController + } + if let host = URL(string: urlBase)?.host { NCNetworking.shared.writeCertificate(host: host) } - NCAccount().createAccount(urlBase: urlBase, user: user, password: password, controller: controller) { account, error in - if error == .success { - let window = UIApplication.shared.firstWindow - if let controller = window?.rootViewController as? NCMainTabBarController { - controller.account = account - self.dismiss(animated: true) - } else { - if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? NCMainTabBarController { - AnalyticsHelper.shared.trackUserData() - controller.account = account - controller.modalPresentationStyle = .fullScreen - controller.view.alpha = 0 - - window?.rootViewController = controller - window?.makeKeyAndVisible() - - if let scene = window?.windowScene { - SceneManager.shared.register(scene: scene, withRootViewController: controller) - } - - UIView.animate(withDuration: 0.5) { - controller.view.alpha = 1 - } - } - } - } else { - let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: error.errorDescription, preferredStyle: .alert) - alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) - self.present(alertController, animated: true) - } - } + + NCAccount().createAccount(viewController: self, urlBase: urlBase, user: user, password: password, controller: self.controller) } } diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift index 4a57032ba3..40376ef0dd 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift @@ -1,6 +1,25 @@ -// SPDX-FileCopyrightText: Nextcloud GmbH -// SPDX-FileCopyrightText: 2024 Marino Faggiana -// SPDX-License-Identifier: GPL-3.0-or-later +// +// NCCollectionViewCommon+CollectionViewDelegate.swift +// Nextcloud +// +// Created by Marino Faggiana on 02/07/24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// import Foundation import UIKit @@ -138,7 +157,9 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let metadata = self.dataSource.getMetadata(indexPath: indexPath) else { + guard let metadata = self.dataSource.getMetadata(indexPath: indexPath), + !metadata.isInvalidated + else { return } @@ -161,7 +182,7 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { guard let metadata = self.dataSource.getMetadata(indexPath: indexPath), - metadata.classFile != NKTypeClassFile.url.rawValue, + metadata.classFile != NKCommon.TypeClassFile.url.rawValue, !isEditMode else { return nil diff --git a/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift index 5f99d9ac21..94715d4e44 100644 --- a/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift +++ b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift @@ -40,19 +40,15 @@ public protocol NCSelectableViewTabBar { protocol NCSelectableNavigationView: AnyObject { var viewController: UIViewController { get } -// var appDelegate: AppDelegate { get } var selectableDataSource: [RealmSwiftObject] { get } var collectionView: UICollectionView! { get set } var isEditMode: Bool { get set } var fileSelect: [String] { get set } -// var selectIndexPaths: [IndexPath] { get set } var titleCurrentFolder: String { get } var navigationItem: UINavigationItem { get } var navigationController: UINavigationController? { get } var layoutKey: String { get } var serverUrl: String { get } -// var tabBarSelect: NCSelectableViewTabBar? { get set } -// var dataSource: NCCollectionViewDataSource { get set } // func reloadDataSource(withQueryDB: Bool) func setNavigationLeftItems() @@ -78,7 +74,6 @@ extension NCSelectableNavigationView { DispatchQueue.main.async { self.isEditMode = isOn ?? !self.isEditMode self.fileSelect.removeAll() -// self.selectIndexPaths.removeAll() self.setNavigationLeftItems() self.setNavigationRightItems(enableMenu: true) self.collectionView.reloadData() @@ -88,7 +83,6 @@ extension NCSelectableNavigationView { func collectionViewSelectAll() { fileSelect = selectableDataSource.compactMap({ $0.primaryKeyValue }) -// fileSelect = NCCollectionViewDataSource().getMetadataSourceForAllSections().compactMap({ $0.primaryKeyValue }) collectionView.reloadData() setNavigationRightItems(enableMenu: false) } diff --git a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift index 65e644cd64..c9aae962b1 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift @@ -84,7 +84,7 @@ import XLForm self.navigationItem.rightBarButtonItem = saveButton self.navigationItem.rightBarButtonItem?.isEnabled = false - // title + // title self.title = titleForm fileName = NCUtilityFileSystem().createFileNameDate("Text", ext: getFileExtension()) @@ -113,7 +113,7 @@ import XLForm row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: "") row.action.formSelector = #selector(changeDestinationFolder(_:)) row.cellConfig["folderImage.image"] = UIImage(named: "folder")!.imageColor(NCBrandColor.shared.customer) - row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.right.rawValue + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) row.cellConfig["photoLabel.textColor"] = UIColor.label //photos if(self.fileNameFolder == "/"){ @@ -288,10 +288,14 @@ import XLForm self.present(alert, animated: true) return } + + // Ensure fileName is not nil or empty guard var fileNameForm: String = fileName, !fileNameForm.isEmpty else { return } - // Trim whitespaces after checks above + // Trim whitespaces and newlines fileNameForm = fileNameForm.trimmingCharacters(in: .whitespacesAndNewlines) + + fileName = FileAutoRenamer.rename(fileNameForm, account: session.account) let result = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileNameForm, mimeType: "", directory: false, account: session.account ) @@ -299,21 +303,25 @@ import XLForm fileNameForm = (fileNameForm as NSString).deletingPathExtension + "." + fileNameExtension } - if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: String(describing: fileNameForm), nativeFormat: false) != nil { - -// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate.account, user: appDelegate.user, userId: appDelegate.userId, fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: "", serverUrl: serverUrl, urlBase: appDelegate.urlBase, url: "", contentType: "") - - let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) - - guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } - - conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") - conflict.alwaysNewFileNameNumber = true - conflict.serverUrl = serverUrl - conflict.metadatasUploadInConflict = [metadataForUpload] - conflict.delegate = self - - self.present(conflict, animated: true, completion: nil) + // verify if already exists + if NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView == %@", session.account, self.serverUrl, fileNameForm)) != nil { + NCContentPresenter().showError(error: NKError(errorCode: 0, errorDescription: "_rename_already_exists_")) + return +// } +// +// if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: String(describing: fileNameForm), nativeFormat: false) != nil { +// +// let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) +// +// guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } +// +// conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") +// conflict.alwaysNewFileNameNumber = true +// conflict.serverUrl = serverUrl +// conflict.metadatasUploadInConflict = [metadataForUpload] +// conflict.delegate = self +// +// self.present(conflict, animated: true, completion: nil) } else { @@ -350,7 +358,7 @@ import XLForm options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) } - NextcloudKit.shared.NCTextCreateFile(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account, options: options) { account, url, _, error in + NextcloudKit.shared.textCreateFile(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account, options: options) { account, url, _, error in guard error == .success, account == self.session.account, let url = url else { self.navigationItem.rightBarButtonItem?.isEnabled = true NCContentPresenter().showError(error: error) @@ -416,7 +424,7 @@ import XLForm options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) } - NextcloudKit.shared.NCTextGetListOfTemplates(account: session.account, options: options) { account, templates, _, error in + NextcloudKit.shared.textGetListOfTemplates(account: session.account, options: options) { account, templates, _, error in self.indicator.stopAnimating() diff --git a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift index 56d769c51d..fcec7ded45 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift @@ -147,7 +147,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground row.action.formSelector = #selector(changeDestinationFolder(_:)) row.cellConfig["folderImage.image"] = UIImage(named: "folder_nmcloud")?.image(color: NCBrandColor.shared.brandElement, size: 25) - row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.right.rawValue + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) row.cellConfig["photoLabel.textColor"] = UIColor.label //photos if(self.titleServerUrl == "/"){ @@ -186,7 +186,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud self.form.delegate = nil if let fileNameNew = formRow.value as? String { - self.fileName = utility.removeForbiddenCharacters(fileNameNew) + self.fileName = FileAutoRenamer.rename(fileNameNew, account: session.account) } else { self.fileName = "" } @@ -243,7 +243,6 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud fileNameSave = (name as NSString).deletingPathExtension + ".m4a" } -// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: self.appDelegate.account, user: self.appDelegate.user, userId: self.appDelegate.userId, fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: self.serverUrl, urlBase: self.appDelegate.urlBase, url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground @@ -252,7 +251,6 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud metadataForUpload.size = utilityFileSystem.getFileSize(filePath: fileNamePath) if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { - guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") diff --git a/iOSClient/NMC Custom Views/FolderPathCustomCell.xib b/iOSClient/NMC Custom Views/FolderPathCustomCell.xib index a231ae7c72..caca063abf 100644 --- a/iOSClient/NMC Custom Views/FolderPathCustomCell.xib +++ b/iOSClient/NMC Custom Views/FolderPathCustomCell.xib @@ -1,9 +1,9 @@ - + - + @@ -18,13 +18,13 @@ - + @@ -55,6 +55,7 @@ + @@ -68,7 +69,7 @@ - + diff --git a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift index 6f245f53a1..3baa5dbf54 100644 --- a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift +++ b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift @@ -141,47 +141,44 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC var section: XLFormSectionDescriptor var row: XLFormRowDescriptor - + // Section: Destination Folder - section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "")) + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "").uppercased()) + section.footerTitle = "" form.addFormSection(section) - - XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScamFileNameCustomInputField"] = FileNameInputTextField.self - row = XLFormRowDescriptor(tag: "fileName", rowType: "NMCScamFileNameCustomInputField", title: NSLocalizedString("_filename_", comment: "")) - row.cellClass = FileNameInputTextField.self - row.cellConfig["fileNameInputTextField.placeholder"] = self.fileName - - row.cellConfig["fileNameInputTextField.textAlignment"] = NSTextAlignment.left.rawValue - row.cellConfig["fileNameInputTextField.font"] = UIFont.systemFont(ofSize: 15.0) - row.cellConfig["fileNameInputTextField.textColor"] = NCBrandColor.shared.label - - - section.addFormRow(row) - //FileName custom view END - - section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_location_", comment: "")) - form.addFormSection(section) - - //Scan documnet folder path - XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScanFolderPathCustomCell"] = ScanDocumentPathView.self - row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "NMCScanFolderPathCustomCell", title: self.titleServerUrl) + + XLFormViewController.cellClassesForRowDescriptorTypes()["kNMCFolderCustomCellType"] = FolderPathCustomCell.self + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: self.titleServerUrl) + row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground row.action.formSelector = #selector(changeDestinationFolder(_:)) - row.cellConfig["backgroundColor"] = cellBackgoundColor - row.cellConfig["folderImage.image"] = UIImage(named: "folder")?.imageColor(NCBrandColor.shared.customer) + row.cellConfig["folderImage.image"] = UIImage(named: "folder_nmcloud")?.image(color: NCBrandColor.shared.brandElement, size: 25) row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) - row.cellConfig["photoLabel.textColor"] = NCBrandColor.shared.label + row.cellConfig["photoLabel.textColor"] = UIColor.label //photos if(self.titleServerUrl == "/"){ row.cellConfig["photoLabel.text"] = NSLocalizedString("_prefix_upload_path_", comment: "") }else{ row.cellConfig["photoLabel.text"] = self.titleServerUrl } row.cellConfig["textLabel.text"] = "" - section.addFormRow(row) - // END of Scan documnet folder path + + // Section: File Name + + XLFormViewController.cellClassesForRowDescriptorTypes()["kMyAppCustomCellType"] = TextTableViewCell.self + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_filename_", comment: "").uppercased()) + form.addFormSection(section) + + row = XLFormRowDescriptor(tag: "fileName", rowType: "kMyAppCustomCellType", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = TextTableViewCell.self + row.cellConfigAtConfigure["backgroundColor"] = UIColor.secondarySystemGroupedBackground; + row.cellConfig["fileNameTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameTextField.textColor"] = UIColor.label + row.cellConfig["fileNameTextField.text"] = self.fileName + section.addFormRow(row) section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_with_text_recognition_", comment: "")) form.addFormSection(section) @@ -309,7 +306,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC let fileNameNew = newValue as? String if let fileNameNew = newValue as? String { - self.fileName = utility.removeForbiddenCharacters(fileNameNew) + self.fileName = FileAutoRenamer.rename(fileNameNew, account: session.account) } else { self.fileName = "" } @@ -456,7 +453,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC var newFileName: String = "" if fileName == nil || fileName == "" { - name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") + name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") } else { name = fileName! } @@ -473,8 +470,9 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC } // MARK: - Action + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { - + if serverUrl != nil { self.serverUrl = serverUrl! @@ -711,16 +709,15 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC } } - -// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload - + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { + guard let conflictViewController = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } conflictViewController.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") conflictViewController.serverUrl = serverUrl @@ -772,8 +769,6 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC } } - -// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground @@ -846,15 +841,15 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC let image = changeCompressionImage(arrayImages[count]) -// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload - + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { + guard let conflictViewController = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } conflictViewController.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") conflictViewController.serverUrl = serverUrl @@ -1063,6 +1058,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC // let image = changeCompressionImage(self.arrayImages[0]) guard let data = image.jpegData(compressionQuality: CGFloat(0.5)) else { NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: "_error_creation_file_"), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) return } @@ -1071,6 +1067,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC try data.write(to: fileUrl, options: .atomic) } catch { NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: "_error_creation_file_"), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) return } @@ -1087,6 +1084,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC // let image = changeCompressionImage(self.arrayImages[0]) guard let data = image.jpegData(compressionQuality: CGFloat(0.5)) else { NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: "_error_creation_file_"), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) return } @@ -1095,6 +1093,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC try data.write(to: NSURL.fileURL(withPath: fileNameGenerateExport), options: .atomic) } catch { NCActivityIndicator.shared.stop() + contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: "_error_creation_file_"), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) contentPresenter.messageNotification("_error_", error: NKError(errorCode: NCGlobal.shared.errorCreationFile, errorDescription: NSLocalizedString("_error_creation_file_", comment: "")), delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info) return } @@ -1268,4 +1267,3 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC return nil } } - diff --git a/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift index 2144580281..7f0130f7c4 100644 --- a/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift +++ b/iOSClient/Scan document/NMC Views/PdfWithoutOcrSwitchView.swift @@ -7,6 +7,7 @@ // import Foundation + import XLForm class PdfWithoutOcrSwitchView: XLFormBaseCell{ diff --git a/iOSClient/Settings/AnalysisDataCollectionSwitch.swift b/iOSClient/Settings/AnalysisDataCollectionSwitch.swift index e24216220f..58f2d55d8d 100644 --- a/iOSClient/Settings/AnalysisDataCollectionSwitch.swift +++ b/iOSClient/Settings/AnalysisDataCollectionSwitch.swift @@ -7,6 +7,7 @@ // import UIKit +import XLForm class AnalysisDataCollectionSwitch: XLFormBaseCell { diff --git a/iOSClient/Settings/CCAdvanced.m b/iOSClient/Settings/CCAdvanced.m index d35322fb22..4ab8e5a55f 100755 --- a/iOSClient/Settings/CCAdvanced.m +++ b/iOSClient/Settings/CCAdvanced.m @@ -25,6 +25,7 @@ #import "CCUtility.h" #import "NCBridgeSwift.h" #import "AdjustHelper.h" +//#import @interface CCAdvanced () { @@ -126,15 +127,17 @@ - (void)initializeForm [section addFormRow:row]; } -#ifdef DEBUG +//#ifdef DEBUG // Section DIAGNOSTICS ------------------------------------------------- section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_diagnostics_", nil)]; [form addFormSection:section]; -// if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { - if ([[NSFileManager defaultManager] fileExistsAtPath:@""] && NCBrandOptions.shared.disable_log == false) { - + if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { + // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version +// if ([[NSFileManager defaultManager] fileExistsAtPath:NKLogFileManager.shared.logDirectory.path] && NCBrandOptions.shared.disable_log == false) { +// if (NCBrandOptions.shared.disable_log) { + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"log" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_view_log_", nil)]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; @@ -144,12 +147,55 @@ - (void)initializeForm row.action.formBlock = ^(XLFormRowDescriptor * sender) { [self deselectFormRow:sender]; -// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] fileNameSource:@"" isEditingEnabled:false metadata:nil]; - NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:@""] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + +// NSURL *logFilePath = [self getLogFilePath]; +// if (logFilePath) { +// // Use the log file path (e.g., to write logs) +// NSLog(@"Log file path: %@", logFilePath.path); +// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:logFilePath fileNameSource:@"" isEditingEnabled:false metadata:nil]; +// [self presentViewController:viewerQuickLook animated:YES completion:nil]; +// } else { +// // Handle error (logs folder could not be created) +// NSLog(@"Failed to get log file path."); +// } + + NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version +// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NKLogFileManager.shared.logDirectory.path] fileNameSource:NKLogFileManager.shared.logFileName isEditingEnabled:false metadata:nil]; +// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:@""] fileNameSource:@"" isEditingEnabled:false metadata:nil]; [self presentViewController:viewerQuickLook animated:YES completion:nil]; }; [section addFormRow:row]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"logLevel" rowType:XLFormRowDescriptorTypeSelectorPush title:NSLocalizedString(@"_set_log_level_", nil)]; + NSInteger logLevel = [[NCKeychain alloc] init].logLevel; + row.value = @(logLevel); + switch ([[NCKeychain alloc] init].logLevel) { + case 0: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_disabled_", nil)]; + break; + case 1: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:NSLocalizedString(@"_standard_", nil)]; + break; + case 2: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:NSLocalizedString(@"_maximum_", nil)]; + break; + default: + row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:NSLocalizedString(@"_standard_", nil)]; + break; + } + + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.cellConfigForSelector[@"tintColor"] = NCBrandColor.shared.customer; + row.selectorTitle = NSLocalizedString(@"_set_log_level_", nil); + row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:NSLocalizedString(@"_disabled_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:NSLocalizedString(@"_standard_", nil)], + [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:NSLocalizedString(@"_maximum_", nil)], + ]; + [section addFormRow:row]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"clearlog" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_clear_log_", nil)]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; @@ -160,32 +206,32 @@ - (void)initializeForm [self deselectFormRow:sender]; -// [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; + [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; + // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version +// [[NKLogFileManager shared] clearLogFiles]; +// [self createLogFiles]; NSInteger logLevel = [[NCKeychain alloc] init].logLevel; BOOL isSimulatorOrTestFlight = [[[NCUtility alloc] init] isSimulatorOrTestFlight]; NSString *versionNextcloudiOS = [NSString stringWithFormat:[NCBrandOptions shared].textCopyrightNextcloudiOS, [[[NCUtility alloc] init] getVersionAppWithBuild:true]]; + if (isSimulatorOrTestFlight) { + [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; + } else { + [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; + } + // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version // if (isSimulatorOrTestFlight) { -// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; +// [[NKLogFileManager shared] writeLogWithInfo:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; // } else { -// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; +// [[NKLogFileManager shared] writeLogWithInfo:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; // } }; [section addFormRow:row]; - row = [XLFormRowDescriptor formRowDescriptorWithTag:@"logLevel" rowType:XLFormRowDescriptorTypeSlider title:NSLocalizedString(@"_level_log_", nil)]; - row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; - [row.cellConfig setObject:@(NSTextAlignmentCenter) forKey:@"textLabel.textAlignment"]; - [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; - [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; - NSInteger logLevel = [[NCKeychain alloc] init].logLevel; - row.value = @(logLevel); - [row.cellConfigAtConfigure setObject:@(2) forKey:@"slider.maximumValue"]; - [row.cellConfigAtConfigure setObject:@(0) forKey:@"slider.minimumValue"]; - [row.cellConfigAtConfigure setObject:@(2) forKey:@"steps"]; - [section addFormRow:row]; } - + +#ifdef DEBUG + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"capabilities" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_capabilities_", nil)]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; @@ -353,7 +399,7 @@ - (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor ol NSInteger levelLog = [[rowDescriptor.value valueData] intValue]; [[NCKeychain alloc] init].logLevel = levelLog; -// [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog]; + [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog]; } if ([rowDescriptor.tag isEqualToString:@"deleteoldfiles"]) { @@ -363,6 +409,72 @@ - (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor ol } } +#pragma mark - Log files + +- (NSURL *)getLogFilePath { + // Define the log file name + NSString *logFileName = @"log.txt"; + + // Get the documents directory URL + NSArray *documentURLs = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; + NSURL *documentsDirectory = [documentURLs firstObject]; + + // Define the logs folder URL + NSURL *logsFolder = [documentsDirectory URLByAppendingPathComponent:@"Logs" isDirectory:YES]; + + // Check if the "Logs" folder exists + if (![[NSFileManager defaultManager] fileExistsAtPath:logsFolder.path]) { + NSError *error = nil; + // Create the "Logs" folder if it doesn't exist + BOOL success = [[NSFileManager defaultManager] createDirectoryAtURL:logsFolder withIntermediateDirectories:YES attributes:nil error:&error]; + if (!success) { + NSLog(@"Failed to create Logs folder: %@", error.localizedDescription); + return nil; // Return nil in case of error + } + } + + // Create the full log file path + NSURL *logPath = [logsFolder URLByAppendingPathComponent:logFileName]; + + // Return the log file path + return logPath; +} + +// Method to create log files +- (void)createLogFiles { + + // Property to control whether to copy log to the Documents directory + BOOL copyLogToDocumentDirectory; + + copyLogToDocumentDirectory = (!NCBrandOptions.shared.disable_log) ? YES : NO; + + // Define log file paths + NSString *filenamePathLog = @"/log.txt"; // Set your desired path for the log file + NSString *filenameLog = @"log.txt"; // This will be the filename to copy + + // Create the log file at the given path + BOOL success = [[NSFileManager defaultManager] createFileAtPath:filenamePathLog contents:nil attributes:nil]; + if (!success) { + NSLog(@"Failed to create file at path: %@", filenamePathLog); + } + + // If we want to copy the log file to the Documents directory + if (copyLogToDocumentDirectory) { // Check the property value + NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *documentDirectory = [documentPaths firstObject]; + + // Create the path to copy the log file in Documents directory + NSString *filenameCopyToDocumentDirectory = [documentDirectory stringByAppendingPathComponent:filenameLog]; + + // Create the log file at the new path in the Documents directory + success = [[NSFileManager defaultManager] createFileAtPath:filenameCopyToDocumentDirectory contents:nil attributes:nil]; + if (!success) { + NSLog(@"Failed to create file at Documents path: %@", filenameCopyToDocumentDirectory); + } + } +} + + #pragma mark - Clear Cache - (void)clearCache:(NSString *)account @@ -376,7 +488,8 @@ - (void)clearCache:(NSString *)account [[NSURLCache sharedURLCache] setMemoryCapacity:0]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; - [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false]; + [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false removeAutoUpload:false]; +// [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false]; [ufs removeGroupDirectoryProviderStorage]; [ufs removeGroupLibraryDirectory]; @@ -387,6 +500,7 @@ - (void)clearCache:(NSString *)account [ufs createDirectoryStandard]; [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; +// [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; [[NCImageCache shared] createMediaCacheWithAccount:appDelegate.account withCacheSize:true]; diff --git a/iOSClient/Settings/CCManageAutoUpload.m b/iOSClient/Settings/CCManageAutoUpload.m index c4b06dd0b1..41882f136c 100644 --- a/iOSClient/Settings/CCManageAutoUpload.m +++ b/iOSClient/Settings/CCManageAutoUpload.m @@ -44,7 +44,7 @@ - (void)initializeForm XLFormRowDescriptor *row; tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; - + // Auto Upload section = [XLFormSectionDescriptor formSection]; @@ -146,11 +146,11 @@ - (void)initializeForm [form addFormSection:section]; NSString *title = NSLocalizedString(@"_autoupload_fullphotos_", nil); - row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadFull" rowType:XLFormRowDescriptorTypeBooleanSwitch title:title]; + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadStart" rowType:XLFormRowDescriptorTypeBooleanSwitch title:title]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; row.value = 0; - if (activeAccount.autoUploadFull) row.value = @1; + if (activeAccount.autoUploadStart) row.value = @1; else row.value = @0; [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; @@ -234,6 +234,7 @@ - (void)viewWillAppear:(BOOL)animated [super viewWillAppear:animated]; appDelegate.activeViewController = self; + appDelegate.account = [[[NCKeychain alloc] init] getAccountName] ; [[[NCAskAuthorization alloc] init] askAuthorizationPhotoLibraryWithController:self completion:^(BOOL status) { }]; } @@ -254,7 +255,7 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; - + if ([rowDescriptor.tag isEqualToString:@"autoUpload"]) { if ([[rowDescriptor.value valueData] boolValue] == YES) { @@ -273,10 +274,12 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; +// [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; + } else { [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUpload" state:NO]; - [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:NO]; // remove [[NCManageDatabase shared] clearMetadatasUploadWithAccount:appDelegate.account]; @@ -290,17 +293,18 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [[NCKeychain alloc] init].removePhotoCameraRoll = [[rowDescriptor.value valueData] boolValue]; } - if ([rowDescriptor.tag isEqualToString:@"autoUploadFull"]) { + if ([rowDescriptor.tag isEqualToString:@"autoUploadStart"]) { if ([[rowDescriptor.value valueData] boolValue] == YES) { [[NCAutoUpload shared] autoUploadFullPhotosWithController:self log:@"Auto upload full" account:appDelegate.account]; - [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:YES]; +// [[NCAutoUpload shared] autoUploadFullPhotosWithViewController:self log:@"Auto upload full"]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:YES]; } else { [[NCManageDatabase shared] clearMetadatasUploadWithAccount:appDelegate.account]; - [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:NO]; } } @@ -310,6 +314,7 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old if ([[rowDescriptor.value valueData] boolValue] == YES) { [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; +// [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; } } @@ -324,6 +329,7 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old if ([[rowDescriptor.value valueData] boolValue] == YES){ [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; +// [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; } } @@ -361,7 +367,7 @@ - (void)reloadForm XLFormRowDescriptor *rowAutoUploadWWAnVideo = [self.form formRowWithTag:@"autoUploadWWAnVideo"]; XLFormRowDescriptor *rowRemovePhotoCameraRoll = [self.form formRowWithTag:@"removePhotoCameraRoll"]; - XLFormRowDescriptor *rowAutoUploadFull = [self.form formRowWithTag:@"autoUploadFull"]; + XLFormRowDescriptor *rowAutoUploadFull = [self.form formRowWithTag:@"autoUploadStart"]; XLFormRowDescriptor *rowAutoUploadCreateSubfolder = [self.form formRowWithTag:@"autoUploadCreateSubfolder"]; @@ -390,7 +396,7 @@ - (void)reloadForm if (activeAccount.autoUploadWWAnVideo) [rowAutoUploadWWAnVideo setValue:@1]; else [rowAutoUploadWWAnVideo setValue:@0]; - if (activeAccount.autoUploadFull) + if (activeAccount.autoUploadStart) [rowAutoUploadFull setValue:@1]; else [rowAutoUploadFull setValue:@0]; if (activeAccount.autoUploadCreateSubfolder) diff --git a/iOSClient/Settings/MagentaCloudVersionView.swift b/iOSClient/Settings/MagentaCloudVersionView.swift index 16de2ec088..98c4f41784 100644 --- a/iOSClient/Settings/MagentaCloudVersionView.swift +++ b/iOSClient/Settings/MagentaCloudVersionView.swift @@ -7,7 +7,7 @@ // import Foundation - +import XLForm class MagentaCloudVersionView: XLFormBaseCell{ diff --git a/iOSClient/Settings/NCManageAutoUploadFileName.swift b/iOSClient/Settings/NCManageAutoUploadFileName.swift index 3f95d12119..b85d6e94be 100644 --- a/iOSClient/Settings/NCManageAutoUploadFileName.swift +++ b/iOSClient/Settings/NCManageAutoUploadFileName.swift @@ -24,6 +24,7 @@ import UIKit import Photos import NextcloudKit +import XLForm class NCManageAutoUploadFileName: XLFormViewController { @@ -169,7 +170,7 @@ class NCManageAutoUploadFileName: XLFormViewController { self.form.delegate = nil if let fileName = fileName { - formRow.value = NCUtility().removeForbiddenCharacters(fileName) + formRow.value = FileAutoRenamer.rename(fileName, account: appDelegate.account) } self.form.delegate = self @@ -183,10 +184,6 @@ class NCManageAutoUploadFileName: XLFormViewController { if newValue as? String != formRow.value as? String { self.reloadFormRow(formRow) - - let errorDescription = String(format: NSLocalizedString("_forbidden_characters_", comment: ""), NCGlobal.shared.forbiddenCharacters.joined(separator: " ")) - let error = NKError(errorCode: NCGlobal.shared.errorConflict, errorDescription: errorDescription) - NCContentPresenter().showInfo(error: error) } } diff --git a/iOSClient/Settings/NCSettingsBundleHelper.swift b/iOSClient/Settings/NCSettingsBundleHelper.swift index c169d58bc1..af6fa89e39 100644 --- a/iOSClient/Settings/NCSettingsBundleHelper.swift +++ b/iOSClient/Settings/NCSettingsBundleHelper.swift @@ -1,6 +1,25 @@ -// SPDX-FileCopyrightText: Nextcloud GmbH -// SPDX-FileCopyrightText: 2021 Marino Faggiana -// SPDX-License-Identifier: GPL-3.0-or-later +// +// NCSettingsBundleHelper.swift +// Nextcloud +// +// Created by Marino Faggiana on 17/02/21. +// Copyright © 2021 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// import Foundation import UIKit @@ -13,7 +32,7 @@ class NCSettingsBundleHelper: NSObject { } class func setVersionAndBuildNumber() { - let version = NCUtility().getVersionBuild() as String + let version = NCUtility().getVersionApp() as String UserDefaults.standard.set(version, forKey: SettingsBundleKeys.BuildVersionKey) } diff --git a/iOSClient/Settings/SaveSettingsCustomButtonCell.swift b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift index 6205727723..b314f62bab 100644 --- a/iOSClient/Settings/SaveSettingsCustomButtonCell.swift +++ b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift @@ -7,7 +7,7 @@ // import UIKit - +import XLForm class SaveSettingsCustomButtonCell: XLFormButtonCell { diff --git a/iOSClient/Share/NCShareEmailFieldCell.swift b/iOSClient/Share/NCShareEmailFieldCell.swift index da0039e8e3..7b8643fe08 100644 --- a/iOSClient/Share/NCShareEmailFieldCell.swift +++ b/iOSClient/Share/NCShareEmailFieldCell.swift @@ -7,83 +7,169 @@ // import UIKit +import MarqueeLabel +import NextcloudKit enum Tag { static let searchField = 999 } class NCShareEmailFieldCell: UITableViewCell { + @IBOutlet weak var searchField: UITextField! - @IBOutlet weak var btnCreateLink: UIButton! - @IBOutlet weak var labelYourShare: UILabel! - @IBOutlet weak var labelShareByMail: UILabel! + @IBOutlet weak var labelOrLink: UILabel! @IBOutlet weak var btnContact: UIButton! - @IBOutlet weak var labelNoShare: UILabel! - @IBOutlet weak var heightLabelNoShare: NSLayoutConstraint! - + @IBOutlet weak var labelSeparator1: UILabel! + @IBOutlet weak var labelSeparator2: UILabel! + @IBOutlet weak var labelSendLinkByMail: UILabel! + @IBOutlet weak var labelSharedWithBy: UILabel! + @IBOutlet weak var labelResharingAllowed: UILabel! + @IBOutlet weak var topConstraintResharingView: NSLayoutConstraint! + @IBOutlet weak var viewOrLinkSeparator: UIView! + + var ocId = "" + override func awakeFromNib() { super.awakeFromNib() - // Initialization code - setupCell() } - + override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) - - // Configure the view for the selected state } - - func setupCell(){ - self.btnCreateLink.setTitle(NSLocalizedString("_create_link_", comment: ""), for: .normal) - self.btnCreateLink.layer.cornerRadius = 7 - self.btnCreateLink.layer.masksToBounds = true - self.btnCreateLink.layer.borderWidth = 1 - self.btnCreateLink.titleLabel?.font = UIFont.systemFont(ofSize: 17) - self.btnCreateLink.titleLabel!.adjustsFontSizeToFitWidth = true - self.btnCreateLink.titleLabel!.minimumScaleFactor = 0.5 - self.btnCreateLink.layer.borderColor = NCBrandColor.shared.label.cgColor - self.btnCreateLink.setTitleColor(NCBrandColor.shared.label, for: .normal) - self.btnCreateLink.backgroundColor = .clear - - self.labelShareByMail.text = NSLocalizedString("personal_share_by_mail", comment: "") - self.labelShareByMail.textColor = NCBrandColor.shared.shareByEmailTextColor - - labelYourShare.text = NSLocalizedString("_your_shares_", comment: "") + + func setupCell(with metadata: tableMetadata) { + contentView.backgroundColor = NCBrandColor.shared.secondarySystemGroupedBackground + ocId = metadata.ocId + + configureSearchField() + configureContactButton() + configureLabels() + updateCanReshareUI() + setNeedsLayout() + layoutIfNeeded() + } + + private func configureSearchField() { searchField.layer.cornerRadius = 5 searchField.layer.masksToBounds = true searchField.layer.borderWidth = 1 - self.searchField.text = "" - searchField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("_shareLinksearch_placeholder_", comment: ""), - attributes: [NSAttributedString.Key.foregroundColor: NCBrandColor.shared.gray60]) - searchField.textColor = NCBrandColor.shared.label searchField.layer.borderColor = NCBrandColor.shared.label.cgColor + searchField.text = "" + searchField.textColor = NCBrandColor.shared.label + searchField.attributedPlaceholder = NSAttributedString( + string: NSLocalizedString("_shareLinksearch_placeholder_", comment: ""), + attributes: [.foregroundColor: NCBrandColor.shared.gray60] + ) searchField.tag = Tag.searchField setDoneButton(sender: searchField) - + } + + private func configureContactButton() { btnContact.layer.cornerRadius = 5 btnContact.layer.masksToBounds = true btnContact.layer.borderWidth = 1 btnContact.layer.borderColor = NCBrandColor.shared.label.cgColor btnContact.tintColor = NCBrandColor.shared.label - btnContact.setImage(NCUtility().loadImage(named: "contact", colors: [NCBrandColor.shared.label], size: 24), for: .normal) - labelNoShare.textColor = NCBrandColor.shared.textInfo - labelNoShare.numberOfLines = 0 - labelNoShare.font = UIFont.systemFont(ofSize: 17) - labelNoShare.text = NSLocalizedString("no_shares_created", comment: "") + let contactImage = NCUtility().loadImage(named: "contact").image(color: NCBrandColor.shared.label, size: 24) + btnContact.setImage(contactImage, for: .normal) } - + + private func configureLabels() { + labelOrLink.text = NSLocalizedString("_share_or_", comment: "") + labelSendLinkByMail.text = NSLocalizedString("_share_send_link_by_mail_", comment: "") + labelSharedWithBy.text = NSLocalizedString("_share_received_shares_text_", comment: "") + labelResharingAllowed.text = NSLocalizedString("_share_reshare_allowed_", comment: "") + + labelSendLinkByMail.textColor = NCBrandColor.shared.label + labelSharedWithBy.textColor = NCBrandColor.shared.label + labelResharingAllowed.textColor = NCBrandColor.shared.label + } + + func updateCanReshareUI() { + guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { return } + + let isCurrentUser = NCShareCommon().isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) + let canReshare = (metadata.sharePermissionsCollaborationServices & NCPermissions().permissionShareShare) != 0 + + labelSharedWithBy.isHidden = isCurrentUser + labelResharingAllowed.isHidden = isCurrentUser + + if !canReshare { + searchField.isUserInteractionEnabled = false + searchField.alpha = 0.5 + btnContact.isEnabled = false + btnContact.alpha = 0.5 + } + + if !isCurrentUser { + let ownerName = metadata.ownerDisplayName + let fullText = NSLocalizedString("_share_received_shares_text_", comment: "") + " " + ownerName + let attributed = NSMutableAttributedString(string: fullText) + + if let range = fullText.range(of: ownerName) { + let nsRange = NSRange(range, in: fullText) + attributed.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 16), range: nsRange) + } + + labelSharedWithBy.attributedText = attributed + labelSharedWithBy.numberOfLines = 0 + + labelResharingAllowed.text = canReshare + ? NSLocalizedString("_share_reshare_allowed_", comment: "") + : NSLocalizedString("_share_reshare_not_allowed_", comment: "") + + topConstraintResharingView.constant = 15 + } else { + topConstraintResharingView.constant = 0 + } + + viewOrLinkSeparator.isHidden = !canReshare + } + + func updateShareUI(ocId: String, count: Int) { + guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { return } + + let isCurrentUser = NCShareCommon().isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) + let canReshare = (metadata.sharePermissionsCollaborationServices & NCPermissions().permissionShareShare) != 0 + + if !isCurrentUser { + if canReshare { + labelOrLink.isHidden = true + labelSeparator1.isHidden = true + labelSeparator2.isHidden = true + } + } + } + @objc func cancelDatePicker() { self.searchField.endEditing(true) } - - func setDoneButton(sender: UITextField) { - //ToolBar - let toolbar = UIToolbar(); + + private func setDoneButton(sender: UITextField) { + let toolbar = UIToolbar() toolbar.sizeToFit() - let doneButton = UIBarButtonItem(title: NSLocalizedString("_done_", comment: ""), style: .plain, target: self, action: #selector(cancelDatePicker)); - let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil) - toolbar.setItems([spaceButton, doneButton], animated: false) + let doneButton = UIBarButtonItem( + title: NSLocalizedString("_done_", comment: ""), + style: .plain, + target: self, + action: #selector(cancelDatePicker) + ) + let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) + toolbar.setItems([space, doneButton], animated: false) sender.inputAccessoryView = toolbar } + + @IBAction func touchUpInsideFavorite(_ sender: UIButton) { + // Hook for favorite action if needed + } + + @IBAction func touchUpInsideDetails(_ sender: UIButton) { + // Hook for toggling detail visibility if needed + } + + @objc func longTap(_ sender: UIGestureRecognizer) { + let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_copied_path_") + NCContentPresenter().showInfo(error: error) + } } diff --git a/iOSClient/Share/NCShareEmailFieldCell.xib b/iOSClient/Share/NCShareEmailFieldCell.xib index 72cbdfe2d3..cfeb42cc45 100644 --- a/iOSClient/Share/NCShareEmailFieldCell.xib +++ b/iOSClient/Share/NCShareEmailFieldCell.xib @@ -1,9 +1,9 @@ - + - + @@ -11,112 +11,161 @@ - - + + - - + + - - + + - - + - - - - + - + - - - - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + - + - - - - - - - + + + + + + + + + + - + diff --git a/iOSClient/Share/ShareDownloadLimitNetwork.swift b/iOSClient/Share/ShareDownloadLimitNetwork.swift index 7b55999675..f2a2f26b82 100644 --- a/iOSClient/Share/ShareDownloadLimitNetwork.swift +++ b/iOSClient/Share/ShareDownloadLimitNetwork.swift @@ -144,7 +144,7 @@ class NMCCommunication: NSObject, XMLParserDelegate { } } -struct DownloadLimit: Codable { - var limit: Int? - var count: Int? -} +//struct DownloadLimit: Codable { +// var limit: Int? +// var count: Int? +//} From 32477606d51be991761470a446d148b730d4150b Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Fri, 19 Dec 2025 15:32:30 +0530 Subject: [PATCH 28/29] NMC 2015 - Updated configuration changes --- Brand/File_Provider_Extension.entitlements | 8 + Brand/File_Provider_Extension.plist | 72 +++--- ...otification_Service_Extension.entitlements | 12 + Brand/Notification_Service_Extension.plist | 50 ++-- Brand/Share.entitlements | 12 + Brand/Share.plist | 7 +- Brand/iOSClient.entitlements | 23 ++ Brand/iOSClient.plist | 20 +- Nextcloud.xcodeproj/project.pbxproj | 101 ++++---- .../SettingsTestCases.swift | 2 +- Tests/NextcloudUnitTests/SharingTest.swift | 14 +- iOSClient/Account/NCAccount.swift | 3 + .../MoEngage/MoEngageAnalytics.swift | 4 +- iOSClient/AppUpdate/AppUpdater.swift | 14 +- iOSClient/AppUtility.swift | 2 + iOSClient/Helper/AdjustHelper.m | 1 + iOSClient/Helper/TealiumHelper.swift | 1 + iOSClient/Login/NCLoginWeb.swift | 55 ++++- ...ionViewCommon+CollectionViewDelegate.swift | 161 +++++-------- ...mmon+SwipeCollectionViewCellDelegate.swift | 6 + .../NCSelectableNavigationView.swift | 20 ++ .../NCSectionHeaderMenu.swift | 10 +- .../Create/NCCreateFormUploadDocuments.swift | 227 ++++++++++-------- .../Create/NCCreateFormUploadVoiceNote.swift | 7 +- .../NCCreateFormUploadScanDocument.swift | 67 +++++- .../NMC Views/JPGImageSaveSwitchView.swift | 1 + .../NMC Views/PNGImageSaveSwitchView.swift | 1 + iOSClient/Settings/CCAdvanced.m | 36 ++- iOSClient/Settings/CCManageAutoUpload.m | 37 ++- ...InitialPrivacySettingsViewController.swift | 1 + .../Settings/MagentaCloudVersionView.swift | 1 + .../Settings/NCManageAutoUploadFileName.swift | 5 + iOSClient/Settings/NCSettings.m | 13 +- .../Settings/NCSettingsBundleHelper.swift | 2 +- .../PrivacySettingsViewController.swift | 1 + .../RequiredDataCollectionSwitch.swift | 2 +- .../SaveSettingsCustomButtonCell.swift | 1 + iOSClient/Share/NCShareEmailFieldCell.swift | 29 ++- iOSClient/Share/NCShareEmailFieldCell.xib | 25 +- .../Share/ShareDownloadLimitNetwork.swift | 6 + 40 files changed, 681 insertions(+), 379 deletions(-) diff --git a/Brand/File_Provider_Extension.entitlements b/Brand/File_Provider_Extension.entitlements index 946a20ea8d..0123881826 100755 --- a/Brand/File_Provider_Extension.entitlements +++ b/Brand/File_Provider_Extension.entitlements @@ -2,6 +2,14 @@ + com.apple.security.application-groups + + group.de.magentacloud.next.dev2.client + + keychain-access-groups + + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + com.apple.security.application-groups group.com.t-systems.pu-ds.magentacloud.qa diff --git a/Brand/File_Provider_Extension.plist b/Brand/File_Provider_Extension.plist index 6d726d0977..f824f92cb6 100755 --- a/Brand/File_Provider_Extension.plist +++ b/Brand/File_Provider_Extension.plist @@ -2,41 +2,41 @@ - CFBundleDevelopmentRegion - en - CFBundleDisplayName - MagentaCLOUD - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSExtension - - NSExtensionFileProviderDocumentGroup - group.de.telekom.Mediencenter - NSExtensionFileProviderSupportsEnumeration - - NSExtensionFileProviderSupportsPickingFolders - - NSExtensionPointIdentifier - com.apple.fileprovider-nonui - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).FileProviderExtension - + CFBundleDevelopmentRegion + en + CFBundleDisplayName + MagentaCLOUD + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSExtension + + NSExtensionFileProviderDocumentGroup + group.de.telekom.Mediencenter + NSExtensionFileProviderSupportsEnumeration + + NSExtensionFileProviderSupportsPickingFolders + + NSExtensionPointIdentifier + com.apple.fileprovider-nonui + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).FileProviderExtension + diff --git a/Brand/Notification_Service_Extension.entitlements b/Brand/Notification_Service_Extension.entitlements index 6443f3b16e..f0d4f751b3 100644 --- a/Brand/Notification_Service_Extension.entitlements +++ b/Brand/Notification_Service_Extension.entitlements @@ -2,6 +2,18 @@ + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.de.magentacloud.next.dev2.client + + com.apple.security.network.client + + keychain-access-groups + + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + com.apple.security.app-sandbox com.apple.security.application-groups diff --git a/Brand/Notification_Service_Extension.plist b/Brand/Notification_Service_Extension.plist index 9c65088ceb..7cba1da5f6 100644 --- a/Brand/Notification_Service_Extension.plist +++ b/Brand/Notification_Service_Extension.plist @@ -2,30 +2,30 @@ - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Notification Service Extension - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSExtension - - NSExtensionPointIdentifier - com.apple.usernotifications.service - NSExtensionPrincipalClass - $(PRODUCT_MODULE_NAME).NotificationService - + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Notification Service Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + diff --git a/Brand/Share.entitlements b/Brand/Share.entitlements index 6443f3b16e..f0d4f751b3 100755 --- a/Brand/Share.entitlements +++ b/Brand/Share.entitlements @@ -2,6 +2,18 @@ + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.de.magentacloud.next.dev2.client + + com.apple.security.network.client + + keychain-access-groups + + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + com.apple.security.app-sandbox com.apple.security.application-groups diff --git a/Brand/Share.plist b/Brand/Share.plist index a87b55d877..98af08a5bd 100755 --- a/Brand/Share.plist +++ b/Brand/Share.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Nextcloud + MagentaCLOUD CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -23,14 +23,15 @@ NSAppTransportSecurity NSAllowsArbitraryLoads - + NSExtension NSExtensionAttributes NSExtensionActivationRule - SUBQUERY (extensionItems, $extensionItem, SUBQUERY ($extensionItem.attachments, $attachment, (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data" OR ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text")).@count == $extensionItem.attachments.@count).@count > 0 + SUBQUERY (extensionItems, $extensionItem, SUBQUERY ($extensionItem.attachments,$attachment,(ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data")).@count == $extensionItem.attachments.@count).@count > 0 + NSExtensionMainStoryboard MainInterface diff --git a/Brand/iOSClient.entitlements b/Brand/iOSClient.entitlements index be9b8a7ad1..63987b375f 100755 --- a/Brand/iOSClient.entitlements +++ b/Brand/iOSClient.entitlements @@ -2,6 +2,29 @@ + aps-environment + development + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.de.magentacloud.next.dev2.client.apps + group.de.magentacloud.next.dev2.client + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + com.apple.security.network.client + + com.apple.security.personal-information.location + + com.apple.security.personal-information.photos-library + + keychain-access-groups + + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + aps-environment development com.apple.security.app-sandbox diff --git a/Brand/iOSClient.plist b/Brand/iOSClient.plist index df37696a82..66e0980c9d 100755 --- a/Brand/iOSClient.plist +++ b/Brand/iOSClient.plist @@ -12,7 +12,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Nextcloud + MagentaCLOUD CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -43,9 +43,7 @@ CFBundleVersion $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption - - ITSEncryptionExportComplianceCode - 8e9f9874-938e-460b-a9be-f82cb3393971 + LSApplicationQueriesSchemes nextcloudtalk @@ -60,24 +58,24 @@ NSAppTransportSecurity NSAllowsArbitraryLoads - + NSCameraUsageDescription - Camera access is required to scan documents and take photos in this app. + Camera access is required to scan documents and make photo and video. NSFaceIDUsageDescription Face ID is required to authenticate using face recognition. NSLocationAlwaysAndWhenInUseUsageDescription - This app needs access to your location even in the background to automatically start uploading files when significant movement is detected. GPS is not used. + The app will show your location on a map. NSLocationAlwaysUsageDescription - The app uses your location to automatically trigger file uploads when you move between areas. + The app will show your location on a map. NSLocationWhenInUseUsageDescription - This app uses your location to detect movement and automatically upload files. It does not use GPS and does not store your location. + The app will show your location on a map. NSMicrophoneUsageDescription Microphone access is required to create voice notes. NSPhotoLibraryAddUsageDescription - This lets you upload and save photos using this app. Photos can then be browsed and viewed via the Media tab. + Photo library access is required to upload your photos and videos to your cloud. NSPhotoLibraryUsageDescription - This lets you upload and save photos using this app. Photos can then be browsed and viewed via the Media tab. + Photo library access is required to upload your photos and videos to your cloud. NSUserActivityTypes AccountIntent diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 879b6b87fb..4eaa126c9a 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -90,6 +90,15 @@ AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; }; + B560B95A2EF5597A00E55904 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9582EF5597A00E55904 /* NCAccount.swift */; }; + B560B95B2EF5597A00E55904 /* NCShareAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9532EF5597A00E55904 /* NCShareAccounts.swift */; }; + B560B95C2EF5597A00E55904 /* NCAccountSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */; }; + B560B95D2EF5597A00E55904 /* NCAccountSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */; }; + B560B95E2EF5597A00E55904 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9512EF5597A00E55904 /* NCAccountRequest.swift */; }; + B560B95F2EF5597A00E55904 /* NCShareAccounts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */; }; + B560B9602EF5597A00E55904 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */; }; + B560B9612EF559C100E55904 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9512EF5597A00E55904 /* NCAccountRequest.swift */; }; + B560B9622EF559C100E55904 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */; }; B5BEBD2F2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; B5BEBD302E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; B5BEBD312E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; @@ -911,8 +920,6 @@ F7A560462AE15D3D00BE8FD6 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7A560452AE15D3D00BE8FD6 /* Queuer */; }; F7A560482AE15D5000BE8FD6 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7A560472AE15D5000BE8FD6 /* Queuer */; }; F7A573692E190387009C9257 /* NCShareExtensionData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A573682E190377009C9257 /* NCShareExtensionData.swift */; }; - F7A60F86292D215000FCE1F2 /* NCShareAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */; }; - F7A60F87292D215000FCE1F2 /* NCShareAccounts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */; }; F7A76DC8256A71CD00119AB3 /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B7504A2397D38E004E13EC /* UIImage+Extension.swift */; }; F7A7FDDD2C2DBD6200E9A93A /* NCDeepLinkHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */; }; F7A846DE2BB01ACB0024816F /* NCTrashCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A846DD2BB01ACB0024816F /* NCTrashCellProtocol.swift */; }; @@ -931,14 +938,11 @@ F7A8D74128F18254008BBE1C /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; F7A8D74228F18261008BBE1C /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; }; F7A8D74428F1827B008BBE1C /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; - F7A8FD522C5E2557006C9CF8 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */; }; F7AC1CB028AB94490032D99F /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AC1CAF28AB94490032D99F /* Array+Extension.swift */; }; F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */ = {isa = PBXBuildFile; fileRef = F7AC9349296193050002BC0F /* Reasons to use Nextcloud.pdf */; }; F7AE00F5230D5F9E007ACF8A /* NCLoginProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AE00F4230D5F9E007ACF8A /* NCLoginProvider.swift */; }; F7AE00F8230E81CB007ACF8A /* NCBrowserWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AE00F7230E81CB007ACF8A /* NCBrowserWeb.swift */; }; F7AE00FA230E81EB007ACF8A /* NCBrowserWeb.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7AE00F9230E81EB007ACF8A /* NCBrowserWeb.storyboard */; }; - F7AEEAA62C11DBAF00011412 /* NCAccountSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */; }; - F7AEEAA82C11DBFD00011412 /* NCAccountSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */; }; F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */; }; F7B398432A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */; }; F7B6B70427C4E7FA00A7F6EB /* NCScan+CollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B6B70327C4E7FA00A7F6EB /* NCScan+CollectionView.swift */; }; @@ -1079,8 +1083,6 @@ F7D4BF4D2CA2E8D800A5E746 /* TOPasscodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D4BF2A2CA2E8D800A5E746 /* TOPasscodeViewController.m */; }; F7D4BF542CA2ED9D00A5E746 /* VLCKitSPM in Frameworks */ = {isa = PBXBuildFile; productRef = F7D4BF532CA2ED9D00A5E746 /* VLCKitSPM */; }; F7D56B1A2972405500FA46C4 /* Mantis in Frameworks */ = {isa = PBXBuildFile; productRef = F7D56B192972405500FA46C4 /* Mantis */; }; - F7D57C8626317BDA00DE301D /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; }; - F7D57C8B26317BDE00DE301D /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D60CAE2C941ACB008FBFDD /* NCMediaPinchGesture.swift */; }; F7D61E932EBF1366007F865B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; F7D61E942EBF1366007F865B /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70CEF5523E9C7E50007035B /* UIColor+Extension.swift */; }; @@ -1514,6 +1516,13 @@ AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = ""; }; AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = ""; }; AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = ""; }; + B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCAccountRequest.storyboard; sourceTree = ""; }; + B560B9512EF5597A00E55904 /* NCAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountRequest.swift; sourceTree = ""; }; + B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCShareAccounts.storyboard; sourceTree = ""; }; + B560B9532EF5597A00E55904 /* NCShareAccounts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareAccounts.swift; sourceTree = ""; }; + B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; + B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; + B560B9582EF5597A00E55904 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; B5BEBD272E93AD540002C9E5 /* File_Provider_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = File_Provider_Extension.entitlements; sourceTree = ""; }; B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = File_Provider_Extension.plist; sourceTree = ""; }; B5BEBD292E93AD540002C9E5 /* iOSClient.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSClient.entitlements; sourceTree = ""; }; @@ -1941,11 +1950,8 @@ F7A509242C26BD5D00326106 /* NCCreate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreate.swift; sourceTree = ""; }; F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCOperationSaveLivePhoto.swift; sourceTree = ""; }; F7A573682E190377009C9257 /* NCShareExtensionData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareExtensionData.swift; sourceTree = ""; }; - F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCShareAccounts.swift; sourceTree = ""; }; - F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCShareAccounts.storyboard; sourceTree = ""; }; F7A7FDDB2C2DBD6200E9A93A /* NCDeepLinkHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCDeepLinkHandler.swift; sourceTree = ""; }; F7A846DD2BB01ACB0024816F /* NCTrashCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTrashCellProtocol.swift; sourceTree = ""; }; - F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; F7AA41B827C7CF4600494705 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/InfoPlist.strings; sourceTree = ""; }; F7AA41B927C7CF4B00494705 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; F7AA41BA27C7CF5000494705 /* zh-Hant-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant-TW"; path = "zh-Hant-TW.lproj/InfoPlist.strings"; sourceTree = ""; }; @@ -1993,8 +1999,6 @@ F7AE00F4230D5F9E007ACF8A /* NCLoginProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginProvider.swift; sourceTree = ""; }; F7AE00F7230E81CB007ACF8A /* NCBrowserWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCBrowserWeb.swift; sourceTree = ""; }; F7AE00F9230E81EB007ACF8A /* NCBrowserWeb.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCBrowserWeb.storyboard; sourceTree = ""; }; - F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; - F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; F7B1A7761EBB3C8000BFB6D1 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionFirstHeader.xib; sourceTree = ""; }; F7B6B70327C4E7FA00A7F6EB /* NCScan+CollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCScan+CollectionView.swift"; sourceTree = ""; }; @@ -2524,6 +2528,36 @@ path = Advanced; sourceTree = ""; }; + B560B9542EF5597A00E55904 /* Account Request */ = { + isa = PBXGroup; + children = ( + B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */, + B560B9512EF5597A00E55904 /* NCAccountRequest.swift */, + B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */, + B560B9532EF5597A00E55904 /* NCShareAccounts.swift */, + ); + path = "Account Request"; + sourceTree = ""; + }; + B560B9572EF5597A00E55904 /* Account Settings */ = { + isa = PBXGroup; + children = ( + B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */, + B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */, + ); + path = "Account Settings"; + sourceTree = ""; + }; + B560B9592EF5597A00E55904 /* Account */ = { + isa = PBXGroup; + children = ( + B560B9542EF5597A00E55904 /* Account Request */, + B560B9572EF5597A00E55904 /* Account Settings */, + B560B9582EF5597A00E55904 /* NCAccount.swift */, + ); + path = Account; + sourceTree = ""; + }; B5BEBD512E93AE1C0002C9E5 /* Common */ = { isa = PBXGroup; children = ( @@ -3443,15 +3477,6 @@ path = BrowserWeb; sourceTree = ""; }; - F7AEEAA92C11DC0600011412 /* Account Settings */ = { - isa = PBXGroup; - children = ( - F7AEEAA52C11DBAF00011412 /* NCAccountSettingsView.swift */, - F7AEEAA72C11DBFD00011412 /* NCAccountSettingsModel.swift */, - ); - path = "Account Settings"; - sourceTree = ""; - }; F7BAAD951ED5A63D00B7EAD4 /* Data */ = { isa = PBXGroup; children = ( @@ -3611,17 +3636,6 @@ path = WidgetDashboardIntentHandler; sourceTree = ""; }; - F7CA213725F1372B00826ABB /* Account Request */ = { - isa = PBXGroup; - children = ( - F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */, - F7CA212B25F1333200826ABB /* NCAccountRequest.swift */, - F7A60F85292D215000FCE1F2 /* NCShareAccounts.storyboard */, - F7A60F84292D215000FCE1F2 /* NCShareAccounts.swift */, - ); - path = "Account Request"; - sourceTree = ""; - }; F7CADB3D23CCDDA1000EEC78 /* RichWorkspace */ = { isa = PBXGroup; children = ( @@ -3859,6 +3873,7 @@ F7F67BAA1A24D27800EE80DA /* iOSClient */ = { isa = PBXGroup; children = ( + B560B9592EF5597A00E55904 /* Account */, B5BEBDE82E93BDB40002C9E5 /* NMC Custom Views */, B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */, B5BEBD9E2E93AF010002C9E5 /* EmptyView */, @@ -3873,7 +3888,6 @@ F794E13E2BBC0F70003693D7 /* SceneDelegate.swift */, F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */, F77DD6A72C5CC093009448FB /* NCSession.swift */, - F7A8FD512C5E2557006C9CF8 /* NCAccount.swift */, F76B649B2ADFFAED00014640 /* NCImageCache.swift */, F702F2CE25EE5B5C008F8E80 /* NCGlobal.swift */, F718E2572DF2D5C3004038AF /* NCBackgroundLocationUploadManager.swift */, @@ -3884,8 +3898,6 @@ F769CA1B2966EF4F00039397 /* GUI */, F317C82C2E844C3C00761AEA /* Client Integration */, F70211F31BAC56E9003FC03E /* Main */, - F7CA213725F1372B00826ABB /* Account Request */, - F7AEEAA92C11DC0600011412 /* Account Settings */, F7A321621E9E37960069AD1B /* Activity */, F76687042B7D067400779E3F /* AudioRecorder */, F3A0478E2BD2668800658E7B /* Assistant */, @@ -4557,7 +4569,6 @@ files = ( F714803B262EBE3900693E51 /* MainInterface.storyboard in Resources */, F7148054262ED51000693E51 /* NCListCell.xib in Resources */, - F7D57C8626317BDA00DE301D /* NCAccountRequest.storyboard in Resources */, F7E4022C2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, AF22B209277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.xib in Resources */, F7CBC1242BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */, @@ -4575,6 +4586,7 @@ B5BEBDCD2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, F7145A231D12E3B700CAFEEC /* Localizable.strings in Resources */, F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, + B560B9622EF559C100E55904 /* NCAccountRequest.storyboard in Resources */, F76C26A62850D3A500E42BDF /* Images.xcassets in Resources */, F714805E262ED52900693E51 /* NCSectionFooter.xib in Resources */, B5BEBDFB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, @@ -4657,6 +4669,8 @@ AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, + B560B95F2EF5597A00E55904 /* NCShareAccounts.storyboard in Resources */, + B560B9602EF5597A00E55904 /* NCAccountRequest.storyboard in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, F7A48415297028FC00BD1B49 /* Nextcloud Hub.png in Resources */, F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */, @@ -4666,7 +4680,6 @@ F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */, F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */, B5BEBDCF2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, - F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */, F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */, F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */, F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */, @@ -4678,7 +4691,6 @@ F70753F72542A9C000972D44 /* NCViewerMediaPage.storyboard in Resources */, F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */, F7AC934A296193050002BC0F /* Reasons to use Nextcloud.pdf in Resources */, - F7A60F87292D215000FCE1F2 /* NCShareAccounts.storyboard in Resources */, F761856A29E98543006EB3B0 /* NCIntro.storyboard in Resources */, F719D9E0288D37A300762E33 /* NCColorPicker.storyboard in Resources */, AA517B802D660EFE00F8D37C /* Localizable.stringsdict in Resources */, @@ -5197,7 +5209,6 @@ F7386E472DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, F737DA9E2B7B893C0063BAFC /* NCPasscode.swift in Sources */, F7817D0129802D5F00FFBC65 /* NCViewCertificateDetails.swift in Sources */, - F7D57C8B26317BDE00DE301D /* NCAccountRequest.swift in Sources */, F7C30DF7291BC0D30017149B /* NCNetworkingE2EEUpload.swift in Sources */, F7C687EC2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, F33918C72C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, @@ -5209,6 +5220,8 @@ F77DD6AB2C5CC093009448FB /* NCSession.swift in Sources */, F74B91E62F51D4170050813D /* InfoBannerView.swift in Sources */, F76D364728A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, + B560B9612EF559C100E55904 /* NCAccountRequest.swift in Sources */, + F7BFFD2A2C8854200029A201 /* NCHud.swift in Sources */, F749B654297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, AF22B208277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.swift in Sources */, F7DA0F662F66AA0D0033020C /* ShowBanner.swift in Sources */, @@ -5510,7 +5523,6 @@ F78A18B823CDE2B300F681F3 /* NCViewerRichWorkspace.swift in Sources */, F34E1AD92ECC839100FA10C3 /* EmojiTextField.swift in Sources */, F768822E2C0DD1E7001CF441 /* NCSettingsBundleHelper.swift in Sources */, - F7A60F86292D215000FCE1F2 /* NCShareAccounts.swift in Sources */, F72408332B8A27C900F128E2 /* NCMedia+Command.swift in Sources */, F755CB402B8CB13C00CE27E9 /* NCMediaLayout.swift in Sources */, B5BEBDCE2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */, @@ -5606,6 +5618,11 @@ F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */, F7E7AEA52BA32C6500512E52 /* NCCollectionViewDownloadThumbnail.swift in Sources */, AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, + B560B95A2EF5597A00E55904 /* NCAccount.swift in Sources */, + B560B95B2EF5597A00E55904 /* NCShareAccounts.swift in Sources */, + B560B95C2EF5597A00E55904 /* NCAccountSettingsModel.swift in Sources */, + B560B95D2EF5597A00E55904 /* NCAccountSettingsView.swift in Sources */, + B560B95E2EF5597A00E55904 /* NCAccountRequest.swift in Sources */, B5BEBE062E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift in Sources */, F70460522499061800BB98A7 /* NotificationCenter+MainThread.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, @@ -5624,7 +5641,6 @@ F75DD765290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D4BF012CA1831900A5E746 /* NCCollectionViewCommonPinchGesture.swift in Sources */, F74B6D952A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, - F7A8FD522C5E2557006C9CF8 /* NCAccount.swift in Sources */, F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */, F702F2F725EE5CED008F8E80 /* NCLogin.swift in Sources */, F75D90212D2BE26F003E740B /* NCRecommendationsCell.swift in Sources */, @@ -5671,7 +5687,6 @@ F768823E2C0DD305001CF441 /* LazyView.swift in Sources */, F7CAFE1B2F16AA8D00DB35A5 /* main.swift in Sources */, F3E173B02C9AF637006D177A /* ScreenAwakeManager.swift in Sources */, - F7CA212D25F1333300826ABB /* NCAccountRequest.swift in Sources */, F747EB0D2C4AC1FF00F959A8 /* NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift in Sources */, F765F73125237E3F00391DBE /* NCRecent.swift in Sources */, F76B3CCE1EAE01BD00921AC9 /* NCBrand.swift in Sources */, @@ -5684,7 +5699,6 @@ F7C9B91D2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, F71070AB2F7E49F200AEE58A /* NCEndToEndSetup.swift in Sources */, AF93474C27E34120002537EE /* NCUtility+Image.swift in Sources */, - F7AEEAA62C11DBAF00011412 /* NCAccountSettingsView.swift in Sources */, F702F30125EE5D2C008F8E80 /* NYMnemonic.m in Sources */, AF93474E27E3F212002537EE /* NCShareNewUserAddComment.swift in Sources */, F7C30DFD291BD0B80017149B /* NCNetworkingE2EEDelete.swift in Sources */, @@ -5760,7 +5774,6 @@ D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, - F7AEEAA82C11DBFD00011412 /* NCAccountSettingsModel.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, B5BEBDA32E93AF010002C9E5 /* AppUtility.swift in Sources */, diff --git a/Tests/NextcloudUnitTests/SettingsTestCases.swift b/Tests/NextcloudUnitTests/SettingsTestCases.swift index 4b16db93f3..13c4dacb82 100644 --- a/Tests/NextcloudUnitTests/SettingsTestCases.swift +++ b/Tests/NextcloudUnitTests/SettingsTestCases.swift @@ -298,7 +298,7 @@ import XLForm let section = XLFormSectionDescriptor.formSection() form.addFormSection(section) - let image = UIImage(named: "trash") + let image = UIImage(named: "trashIcon") let row = XLFormRowDescriptor(tag: "azzeracache", rowType:XLFormRowDescriptorTypeButton, title: NSLocalizedString("_clear_cache_", comment: "")) section.addFormRow(row) diff --git a/Tests/NextcloudUnitTests/SharingTest.swift b/Tests/NextcloudUnitTests/SharingTest.swift index 66d94dbfbb..984a4c0ac3 100644 --- a/Tests/NextcloudUnitTests/SharingTest.swift +++ b/Tests/NextcloudUnitTests/SharingTest.swift @@ -201,32 +201,32 @@ final class SharingTest: XCTestCase { } func testGetImageShareType() { - let sut = NCShareCommon() // Replace with the actual class containing the getImageShareType function + let sut = NCShareCommon // Replace with the actual class containing the getImageShareType function // Test case 1: SHARE_TYPE_USER - let shareType1 = sut.SHARE_TYPE_USER + let shareType1 = sut.shareTypeUser let result1 = sut.getImageShareType(shareType: shareType1) XCTAssertEqual(result1, UIImage(named: "shareTypeEmail")?.imageColor(NCBrandColor.shared.label)) // Test case 2: SHARE_TYPE_GROUP - let shareType2 = sut.SHARE_TYPE_GROUP + let shareType2 = sut.shareTypeGroup let result2 = sut.getImageShareType(shareType: shareType2) XCTAssertEqual(result2, UIImage(named: "shareTypeGroup")?.imageColor(NCBrandColor.shared.label)) // Test case 3: SHARE_TYPE_LINK - let shareType3 = sut.SHARE_TYPE_LINK + let shareType3 = sut.shareTypeLink let result3 = sut.getImageShareType(shareType: shareType3) XCTAssertEqual(result3, UIImage(named: "shareTypeLink")?.imageColor(NCBrandColor.shared.label)) // Test case 4: SHARE_TYPE_EMAIL (with isDropDown=false) - let shareType4 = sut.SHARE_TYPE_EMAIL + let shareType4 = sut.shareTypeEmail let result4 = sut.getImageShareType(shareType: shareType4) XCTAssertEqual(result4, UIImage(named: "shareTypeUser")?.imageColor(NCBrandColor.shared.label)) // Test case 5: SHARE_TYPE_EMAIL (with isDropDown=true) - let shareType5 = sut.SHARE_TYPE_EMAIL + let shareType5 = sut.shareTypeEmail let isDropDown5 = true - let result5 = sut.getImageShareType(shareType: shareType5, isDropDown: isDropDown5) + let result5 = sut.getImageShareType(shareType: shareType5)//, isDropDown: isDropDown5) XCTAssertEqual(result5, UIImage(named: "email")?.imageColor(NCBrandColor.shared.label)) } } diff --git a/iOSClient/Account/NCAccount.swift b/iOSClient/Account/NCAccount.swift index ecf49a4adf..3367205405 100644 --- a/iOSClient/Account/NCAccount.swift +++ b/iOSClient/Account/NCAccount.swift @@ -108,6 +108,9 @@ class NCAccount: NSObject { // set theming color NCBrandColor.shared.settingThemingColor(account: account, capabilities: capabilities) } + // Start the auto upload + let num = await NCAutoUpload.shared.initAutoUpload(tblAccount: tblAccount) + nkLog(start: "Auto upload with \(num) photo") // Networking Process await NCNetworkingProcess.shared.setCurrentAccount(account) diff --git a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift index ca07324744..8a3c903fa3 100644 --- a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift +++ b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift @@ -109,7 +109,7 @@ extension MoEngageAnalytics: AnalyticsService { MoEngageSDKAnalytics.sharedInstance.setUserAttribute(storageCapacity, withAttributeName: AnalyticEvents.USER_PROPERTIES_STORAGE_CAPACITY.rawValue) // Track whether auto-upload is enabled for the user - trackAutoUpload(isEnable: user.autoUpload) + trackAutoUpload(isEnable: user.autoUploadStart) } // Method to track the used storage data @@ -127,7 +127,7 @@ extension MoEngageAnalytics: AnalyticsService { // Method to track the app version func trackAppVersion(oldVersion: String?) { // Get the app version and set it as a user attribute - let version = NCUtility().getVersionApp() as String + let version = NCUtility().getVersionBuild() as String // Check if a build version key is present in UserDefaults if let oldVersion { diff --git a/iOSClient/AppUpdate/AppUpdater.swift b/iOSClient/AppUpdate/AppUpdater.swift index 15dd5f6991..c091a9323d 100644 --- a/iOSClient/AppUpdate/AppUpdater.swift +++ b/iOSClient/AppUpdate/AppUpdater.swift @@ -29,8 +29,8 @@ class AppUpdater { } } } - - func showUpdateAlert(version: String, isForceUpdate: Bool){ + + func showUpdateAlert(version: String, isForceUpdate: Bool) { guard let appDelegate = UIApplication.shared.delegate as? AppDelegate, let viewControlller = appDelegate.window?.rootViewController else { return } let descriptionMsg = String(format: NSLocalizedString("update_description", comment: ""), version) let alert = UIAlertController(title: NSLocalizedString("update_available", comment: ""), message: descriptionMsg, preferredStyle: .alert) @@ -47,7 +47,7 @@ class AppUpdater { alert.preferredAction = updateAction viewControlller.present(alert, animated: true, completion: {}) } - + func checkLastUpdate() -> Bool { if let lastUpdateCheckDate = UserDefaults.standard.object(forKey: AppUpdaterKey.lastUpdateCheckDate) as? Date { return daysBetweenDate(from: lastUpdateCheckDate) > 7 @@ -56,7 +56,7 @@ class AppUpdater { } } - func checkUpdate(completion: @escaping (String?, Bool?) -> Void) { + func checkUpdate(completion: @escaping (String?, Bool?) -> Void) { let remoteConfig = RemoteConfig.remoteConfig() remoteConfig.fetch(withExpirationDuration: 1) { (status, error) in if status == .success { @@ -70,7 +70,7 @@ class AppUpdater { // if let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String { if iOSVersion != currentVersion { // There is an update available - completion(iOSVersionString,isForcheUpdate) + completion(iOSVersionString, isForcheUpdate) } else { completion(nil, nil) } @@ -93,11 +93,11 @@ class AppUpdater { } } } - + func saveAppUpdateCheckDate() { UserDefaults.standard.setValue(Date(), forKey: AppUpdaterKey.lastUpdateCheckDate) } - + func daysBetweenDate(from date: Date) -> Int { return Calendar.current.dateComponents([.day], from: date, to: Date()).day ?? 0 } diff --git a/iOSClient/AppUtility.swift b/iOSClient/AppUtility.swift index bb7c625e53..6d940416ca 100644 --- a/iOSClient/AppUtility.swift +++ b/iOSClient/AppUtility.swift @@ -7,6 +7,8 @@ // import Foundation +import UIKit + struct AppUtility { static func lockOrientation(_ orientation: UIInterfaceOrientationMask) { if let delegate = UIApplication.shared.delegate as? AppDelegate { diff --git a/iOSClient/Helper/AdjustHelper.m b/iOSClient/Helper/AdjustHelper.m index 5556a35d13..780be4fe8e 100644 --- a/iOSClient/Helper/AdjustHelper.m +++ b/iOSClient/Helper/AdjustHelper.m @@ -151,3 +151,4 @@ -(void)trackEvent:(TriggerEvent)event { } @end + diff --git a/iOSClient/Helper/TealiumHelper.swift b/iOSClient/Helper/TealiumHelper.swift index 6d4065b5ea..9680da8e0a 100644 --- a/iOSClient/Helper/TealiumHelper.swift +++ b/iOSClient/Helper/TealiumHelper.swift @@ -53,3 +53,4 @@ class TealiumHelper: NSObject { TealiumHelper.shared.tealium?.track(tealEvent) } } + diff --git a/iOSClient/Login/NCLoginWeb.swift b/iOSClient/Login/NCLoginWeb.swift index 9c77f83e49..9d2380e112 100644 --- a/iOSClient/Login/NCLoginWeb.swift +++ b/iOSClient/Login/NCLoginWeb.swift @@ -157,7 +157,7 @@ class NCLoginWeb: UIViewController { // Stop timer error network appDelegate.timerErrorNetworking?.invalidate() - if let account = NCManageDatabase.shared.getActiveTableAccount(), NCKeychain().getPassword(account: account.account).isEmpty { + if let account = NCManageDatabase.shared.getActiveTableAccount(), NCPreferences().getPassword(account: account.account).isEmpty { let message = "\n" + NSLocalizedString("_password_not_present_", comment: "") let alertController = UIAlertController(title: titleView, message: message, preferredStyle: .alert) @@ -255,8 +255,9 @@ extension NCLoginWeb: WKNavigationDelegate { let username: String = user.replacingOccurrences(of: "user:", with: "").replacingOccurrences(of: "+", with: " ") let password: String = password.replacingOccurrences(of: "password:", with: "") - self.createAccount(urlBase: server, user: username, password: password) - + Task { + self.createAccount(urlBase: server, user: username, password: password) + } } } } @@ -291,7 +292,6 @@ extension NCLoginWeb: WKNavigationDelegate { } } - // Show an alert instead of closing the app private func showAccessDeniedAlert() { DispatchQueue.main.async { @@ -322,7 +322,6 @@ extension NCLoginWeb: WKNavigationDelegate { } } } - private func closeApp() { // Exit the app immediately @@ -332,6 +331,43 @@ extension NCLoginWeb: WKNavigationDelegate { // MARK: - +// func createAccount(urlBase: String, user: String, password: String) { +// let controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController +// if let host = URL(string: urlBase)?.host { +// NCNetworking.shared.writeCertificate(host: host) +// } +// NCAccount().createAccount(urlBase: urlBase, user: user, password: password, controller: controller) { account, error in +// if error == .success { +// let window = UIApplication.shared.firstWindow +// if let controller = window?.rootViewController as? NCMainTabBarController { +// controller.account = account +// self.dismiss(animated: true) +// } else { +// if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? NCMainTabBarController { +// AnalyticsHelper.shared.trackUserData() +// controller.account = account +// controller.modalPresentationStyle = .fullScreen +// controller.view.alpha = 0 +// +// window?.rootViewController = controller +// window?.makeKeyAndVisible() +// +// if let scene = window?.windowScene { +// SceneManager.shared.register(scene: scene, withRootViewController: controller) +// } +// +// UIView.animate(withDuration: 0.5) { +// controller.view.alpha = 1 +// } +// } +// } +// } else { +// let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: error.errorDescription, preferredStyle: .alert) +// alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in })) +// self.present(alertController, animated: true) +// } +// } +// } // func createAccount(urlBase: String, user: String, password: String) { // let controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController // if let host = URL(string: urlBase)?.host { @@ -374,12 +410,13 @@ extension NCLoginWeb: WKNavigationDelegate { if self.controller == nil { self.controller = UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController } - + if let host = URL(string: urlBase)?.host { NCNetworking.shared.writeCertificate(host: host) } - - NCAccount().createAccount(viewController: self, urlBase: urlBase, user: user, password: password, controller: self.controller) + + Task { + await NCAccount().createAccount(viewController: self, urlBase: urlBase, user: user, password: password, controller: self.controller) + } } - } diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift index 40376ef0dd..da51ddaaf9 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift @@ -1,25 +1,6 @@ -// -// NCCollectionViewCommon+CollectionViewDelegate.swift -// Nextcloud -// -// Created by Marino Faggiana on 02/07/24. -// Copyright © 2024 Marino Faggiana. All rights reserved. -// -// Author Marino Faggiana -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// +// SPDX-FileCopyrightText: Nextcloud GmbH +// SPDX-FileCopyrightText: 2024 Marino Faggiana +// SPDX-License-Identifier: GPL-3.0-or-later import Foundation import UIKit @@ -28,33 +9,15 @@ import Alamofire import LucidBanner extension NCCollectionViewCommon: UICollectionViewDelegate { - @MainActor - func didSelectMetadata(_ metadata: tableMetadata, withOcIds: Bool) async { - let capabilities = await NKCapabilities.shared.getCapabilities(for: session.account) - + func didSelectMetadata(_ metadata: tableMetadata, withOcIds: Bool) { + let capabilities = NCNetworking.shared.capabilities[session.account] ?? NKCapabilities.Capabilities() if metadata.e2eEncrypted { if capabilities.e2EEEnabled { if !NCPreferences().isEndToEndEnabled(account: metadata.account) { - do { - let e2ee = NCEndToEndSetup(controller: controller) - try await e2ee.start() - } catch let error as NKError { - if error.errorCode == NSUserCancelledError { - return - } - await showErrorBanner( - windowScene: windowScene, - text: error.errorDescription - ) - return - } catch { - // fallback (non NKError) - await showErrorBanner( - windowScene: windowScene, - text: error.localizedDescription - ) - return - } + let e2ee = NCEndToEndInitialize() + e2ee.delegate = self + e2ee.initEndToEndEncryption(controller: self.controller, metadata: metadata) + return } } else { await showInfoBanner(windowScene: windowScene, text: "_e2e_server_disabled_") @@ -107,70 +70,74 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { if metadata.directory { await pushMetadata(metadata) } else { - let image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: self.global.previewExt1024, userId: metadata.userId, urlBase: metadata.urlBase) - let fileExists = utilityFileSystem.fileProviderStorageExists(metadata) - - // --- E2EE ------- - if metadata.isDirectoryE2EE { - if fileExists { - if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: self) { - self.navigationController?.pushViewController(vc, animated: true) + Task { @MainActor in + let image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: self.global.previewExt1024, userId: metadata.userId, urlBase: metadata.urlBase) + let fileExists = utilityFileSystem.fileProviderStorageExists(metadata) + + // --- E2EE ------- + if metadata.isDirectoryE2EE { + if fileExists { + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: self) { + self.navigationController?.pushViewController(vc, animated: true) + } + } else { + await downloadFile() } - } else { - await downloadFile() + return } - return - } - // --------------- + // --------------- - if metadata.isImage || metadata.isAudioOrVideo { - let metadatas = self.dataSource.getMetadatas() - let ocIds = metadatas.filter { $0.classFile == NKTypeClassFile.image.rawValue || - $0.classFile == NKTypeClassFile.video.rawValue || - $0.classFile == NKTypeClassFile.audio.rawValue }.map(\.ocId) + if metadata.isImage || metadata.isAudioOrVideo { + let metadatas = self.dataSource.getMetadatas() + let ocIds = metadatas.filter { $0.classFile == NKTypeClassFile.image.rawValue || + $0.classFile == NKTypeClassFile.video.rawValue || + $0.classFile == NKTypeClassFile.audio.rawValue }.map(\.ocId) - if let vc = await NCViewer().getViewerController(metadata: metadata, ocIds: withOcIds ? ocIds : nil, image: image, delegate: self) { - self.navigationController?.pushViewController(vc, animated: true) - } - } else if !metadata.isDirectoryE2EE, metadata.isAvailableEditorView || utilityFileSystem.fileProviderStorageExists(metadata) || metadata.name == self.global.talkName { - if let vc = await NCViewer().getViewerController(metadata: metadata, image: image, delegate: self) { - self.navigationController?.pushViewController(vc, animated: true) - } - } else if NextcloudKit.shared.isNetworkReachable() { - guard let metadata = await database.setMetadataSessionInWaitDownloadAsync(ocId: metadata.ocId, - session: self.networking.sessionDownload, - selector: global.selectorLoadFileView, - sceneIdentifier: self.controller?.sceneIdentifier) else { - return - } + if let vc = await NCViewer().getViewerController(metadata: metadata, ocIds: withOcIds ? ocIds : nil, image: image, delegate: self) { + self.navigationController?.pushViewController(vc, animated: true) + } + } else if !metadata.isDirectoryE2EE, metadata.isAvailableEditorView || utilityFileSystem.fileProviderStorageExists(metadata) || metadata.name == self.global.talkName { + if let vc = await NCViewer().getViewerController(metadata: metadata, image: image, delegate: self) { + self.navigationController?.pushViewController(vc, animated: true) + } + } else if NextcloudKit.shared.isNetworkReachable() { + guard let metadata = await database.setMetadataSessionInWaitDownloadAsync(ocId: metadata.ocId, + session: self.networking.sessionDownload, + selector: global.selectorLoadFileView, + sceneIdentifier: self.controller?.sceneIdentifier) else { + return + } - if metadata.name == "files" { - await downloadFile() - } else if !metadata.url.isEmpty, - let vc = await NCViewer().getViewerController(metadata: metadata, delegate: self) { - self.navigationController?.pushViewController(vc, animated: true) + if metadata.name == "files" { + await downloadFile() + } else if !metadata.url.isEmpty, + let vc = await NCViewer().getViewerController(metadata: metadata, delegate: self) { + self.navigationController?.pushViewController(vc, animated: true) + } + } else { + let error = NKError(errorCode: global.errorOffline, errorDescription: "_go_online_") + NCContentPresenter().showInfo(error: error) } - } else { - await showErrorBanner(windowScene: windowScene, text: "_go_online_", errorCode: NCGlobal.shared.errorOfflineNotAllowed) } } } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let metadata = self.dataSource.getMetadata(indexPath: indexPath), - !metadata.isInvalidated - else { + guard let metadata = self.dataSource.getMetadata(indexPath: indexPath) else { return } if self.isEditMode { - if let index = self.fileSelect.firstIndex(of: metadata.ocId) { - self.fileSelect.remove(at: index) - } else { - self.fileSelect.append(metadata.ocId) + if !metadata.e2eEncrypted { + if let index = self.fileSelect.firstIndex(of: metadata.ocId) { + self.fileSelect.remove(at: index) + } else { + self.fileSelect.append(metadata.ocId) + } + self.collectionView.reloadItems(at: [indexPath]) + self.tabBarSelect?.update(fileSelect: self.fileSelect, metadatas: self.getSelectedMetadatas(), userId: metadata.userId) + // self.collectionView.reloadSections(IndexSet(integer: indexPath.section)) } - self.collectionView.reloadItems(at: [indexPath]) - self.tabBarSelect?.update(fileSelect: self.fileSelect, metadatas: self.getSelectedMetadatas(), userId: metadata.userId) self.collectionView.collectionViewLayout.invalidateLayout() return } @@ -182,7 +149,7 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { guard let metadata = self.dataSource.getMetadata(indexPath: indexPath), - metadata.classFile != NKCommon.TypeClassFile.url.rawValue, + metadata.classFile != NKTypeClassFile.url.rawValue, !isEditMode else { return nil @@ -202,9 +169,9 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { } return UIContextMenuConfiguration(identifier: identifier, previewProvider: { - return nil + return NCViewerProviderContextMenu(metadata: metadata, image: image, sceneIdentifier: self.sceneIdentifier) }, actionProvider: { _ in - let contextMenu = NCContextMenuMain(metadata: metadata.detachedCopy(), viewController: self, controller: self.controller, sender: cell) + let contextMenu = NCContextMenu(metadata: metadata.detachedCopy(), viewController: self, sceneIdentifier: self.sceneIdentifier, image: image) return contextMenu.viewMenu() }) } diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift index 8a08faca4e..d467e73701 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon+SwipeCollectionViewCellDelegate.swift @@ -47,6 +47,7 @@ extension NCCollectionViewCommon: SwipeCollectionViewCellDelegate { let shareAction = SwipeAction(style: .default, title: NSLocalizedString("_share_", comment: "")) { _, _ in NCActionCenter.shared.openActivityViewController(selectedMetadata: [metadata], controller: self.controller) + NCActionCenter.shared.openActivityViewController(selectedMetadata: [metadata]) } shareAction.backgroundColor = .blue shareAction.image = .init(systemName: "square.and.arrow.up") @@ -69,6 +70,11 @@ extension NCCollectionViewCommon: SwipeCollectionViewCellDelegate { self.viewController.present(alertController, animated: true, completion: nil) } deleteAction.image = UIImage.init(systemName: "trash") + let alertController = UIAlertController.deleteFileOrFolder(titleString: titleDelete + "?", message: message, canDeleteServer: !metadata.lock, selectedMetadatas: [metadata], indexPaths: self.selectIndexPaths) { _ in } + + self.viewController.present(alertController, animated: true, completion: nil) + } + deleteAction.image = .init(systemName: "trash") deleteAction.style = .destructive deleteAction.transitionDelegate = scaleTransition deleteAction.hidesWhenSelected = true diff --git a/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift index 94715d4e44..17dbb04c03 100644 --- a/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift +++ b/iOSClient/Main/Collection Common/NCSelectableNavigationView.swift @@ -40,16 +40,31 @@ public protocol NCSelectableViewTabBar { protocol NCSelectableNavigationView: AnyObject { var viewController: UIViewController { get } +// var appDelegate: AppDelegate { get } var selectableDataSource: [RealmSwiftObject] { get } var collectionView: UICollectionView! { get set } var isEditMode: Bool { get set } var fileSelect: [String] { get set } +// var selectIndexPaths: [IndexPath] { get set } + var appDelegate: AppDelegate { get } + var selectableDataSource: [RealmSwiftObject] { get } + var collectionView: UICollectionView! { get set } + var isEditMode: Bool { get set } + var selectOcId: [String] { get set } + var appDelegate: AppDelegate { get } + var selectIndexPaths: [IndexPath] { get set } var titleCurrentFolder: String { get } var navigationItem: UINavigationItem { get } var navigationController: UINavigationController? { get } var layoutKey: String { get } var serverUrl: String { get } +// var tabBarSelect: NCSelectableViewTabBar? { get set } +// var dataSource: NCCollectionViewDataSource { get set } + +// func reloadDataSource(withQueryDB: Bool) + var tabBarSelect: NCSelectableViewTabBar? { get set } + func reloadDataSource(withQueryDB: Bool) // func reloadDataSource(withQueryDB: Bool) func setNavigationLeftItems() func setNavigationRightItems(enableMenu: Bool) @@ -74,6 +89,9 @@ extension NCSelectableNavigationView { DispatchQueue.main.async { self.isEditMode = isOn ?? !self.isEditMode self.fileSelect.removeAll() +// self.selectIndexPaths.removeAll() + self.selectOcId.removeAll() + self.selectIndexPaths.removeAll() self.setNavigationLeftItems() self.setNavigationRightItems(enableMenu: true) self.collectionView.reloadData() @@ -83,6 +101,8 @@ extension NCSelectableNavigationView { func collectionViewSelectAll() { fileSelect = selectableDataSource.compactMap({ $0.primaryKeyValue }) +// fileSelect = NCCollectionViewDataSource().getMetadataSourceForAllSections().compactMap({ $0.primaryKeyValue }) +// selectOcId = selectableDataSource.compactMap({ $0.primaryKeyValue }) collectionView.reloadData() setNavigationRightItems(enableMenu: false) } diff --git a/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift index d9e0fdb52c..6cd8ae727d 100644 --- a/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift +++ b/iOSClient/Main/Collection Common/Section Header Footer/NCSectionHeaderMenu.swift @@ -61,11 +61,11 @@ class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate backgroundColor = .clear - buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconColor, size: 25), for: .normal) + buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconImageColor, size: 25), for: .normal) buttonOrder.setTitle("", for: .normal) buttonOrder.setTitleColor(NCBrandColor.shared.brand, for: .normal) - buttonMore.setImage(UIImage(named: "more")!.image(color: NCBrandColor.shared.iconColor, size: 25), for: .normal) + buttonMore.setImage(UIImage(named: "more")!.image(color: NCBrandColor.shared.iconImageColor, size: 25), for: .normal) // Gradient gradient.startPoint = CGPoint(x: 0, y: 0.50) @@ -132,12 +132,12 @@ class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate func setImageSwitchList() { - buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconColor, width: 20, height: 15), for: .normal) + buttonSwitch.setImage(UIImage(systemName: "list.bullet")!.image(color: NCBrandColor.shared.iconImageColor, width: 20, height: 15), for: .normal) } func setImageSwitchGrid() { - buttonSwitch.setImage(UIImage(systemName: "square.grid.2x2")!.image(color: NCBrandColor.shared.iconColor, size: 20), for: .normal) + buttonSwitch.setImage(UIImage(systemName: "square.grid.2x2")!.image(color: NCBrandColor.shared.iconImageColor, size: 20), for: .normal) } func setButtonsView(height: CGFloat) { @@ -200,7 +200,7 @@ class NCSectionHeaderMenu: UICollectionReusableView, UIGestureRecognizerDelegate var image: UIImage? if let ocId, let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) { - image = utility.createFilePreviewImage(ocId: metadata.ocId, etag: metadata.etag, fileNameView: metadata.fileNameView, classFile: metadata.classFile, status: metadata.status, createPreviewMedia: true)?.darken() + image = utility.createFilePreviewImage(ocId: metadata.ocId, etag: metadata.etag, fileNameView: metadata.fileNameView, classFile: metadata.classFile, status: metadata.status, createPreviewMedia: true)//?.darken() if image == nil { image = UIImage(named: metadata.iconName) buttonTransfer.backgroundColor = .lightGray diff --git a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift index c9aae962b1..758e2249e2 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift @@ -28,6 +28,10 @@ import XLForm // MARK: - @objc class NCCreateFormUploadDocuments: XLFormViewController, NCSelectDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, NCCreateFormUploadConflictDelegate { + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool, session: NCSession.Session) { + + } + @IBOutlet weak var indicator: UIActivityIndicatorView! @IBOutlet weak var collectionView: UICollectionView! @@ -43,8 +47,8 @@ import XLForm var fileName = "" var fileNameExtension = "" var titleForm = "" - var listOfTemplate: [NKEditorTemplates] = [] - var selectTemplate: NKEditorTemplates? + var listOfTemplate: [NKEditorTemplate] = [] + var selectTemplate: NKEditorTemplate? let utilityFileSystem = NCUtilityFileSystem() let utility = NCUtility() @@ -112,7 +116,7 @@ import XLForm XLFormViewController.cellClassesForRowDescriptorTypes()["kNMCFolderCustomCellType"] = FolderPathCustomCell.self row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "kNMCFolderCustomCellType", title: "") row.action.formSelector = #selector(changeDestinationFolder(_:)) - row.cellConfig["folderImage.image"] = UIImage(named: "folder")!.imageColor(NCBrandColor.shared.customer) + row.cellConfig["folderImage.image"] = UIImage(named: "folder")!.withTintColor(NCBrandColor.shared.customer) row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) row.cellConfig["photoLabel.textColor"] = UIColor.label //photos @@ -275,58 +279,62 @@ import XLForm @objc func save() { - guard let selectTemplate = self.selectTemplate else { return } - templateIdentifier = selectTemplate.identifier - - let rowFileName: XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! - var fileName = rowFileName.value as? String - if fileName?.isEmpty ?? false || fileName == nil { - fileName = NCUtilityFileSystem().createFileNameDate("Text", ext: getFileExtension()) - } else if fileName?.trimmingCharacters(in: .whitespaces).isEmpty ?? false { - let alert = UIAlertController(title: "", message: NSLocalizedString("_please_enter_file_name_", comment: ""), preferredStyle: .alert) - alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .cancel, handler: nil)) - self.present(alert, animated: true) - return - } - - // Ensure fileName is not nil or empty - guard var fileNameForm: String = fileName, !fileNameForm.isEmpty else { return } - - // Trim whitespaces and newlines - fileNameForm = fileNameForm.trimmingCharacters(in: .whitespacesAndNewlines) - - fileName = FileAutoRenamer.rename(fileNameForm, account: session.account) - - let result = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileNameForm, mimeType: "", directory: false, account: session.account - ) - if utility.editorsDirectEditing(account: session.account, contentType: result.mimeType).isEmpty { - fileNameForm = (fileNameForm as NSString).deletingPathExtension + "." + fileNameExtension - } - - // verify if already exists - if NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView == %@", session.account, self.serverUrl, fileNameForm)) != nil { - NCContentPresenter().showError(error: NKError(errorCode: 0, errorDescription: "_rename_already_exists_")) - return -// } -// -// if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: String(describing: fileNameForm), nativeFormat: false) != nil { -// -// let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) -// -// guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } -// -// conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") -// conflict.alwaysNewFileNameNumber = true -// conflict.serverUrl = serverUrl -// conflict.metadatasUploadInConflict = [metadataForUpload] -// conflict.delegate = self -// -// self.present(conflict, animated: true, completion: nil) - - } else { - - let fileNamePath = utilityFileSystem.getFileNamePath(String(describing: fileNameForm), serverUrl: serverUrl, session: session) - createDocument(fileNamePath: fileNamePath, fileName: String(describing: fileNameForm)) + Task { + guard let selectTemplate = self.selectTemplate else { return } + templateIdentifier = selectTemplate.identifier + + let rowFileName: XLFormRowDescriptor = self.form.formRow(withTag: "fileName")! + var fileName = rowFileName.value as? String + if fileName?.isEmpty ?? false || fileName == nil { + fileName = NCUtilityFileSystem().createFileNameDate("Text", ext: getFileExtension()) + } else if fileName?.trimmingCharacters(in: .whitespaces).isEmpty ?? false { + let alert = UIAlertController(title: "", message: NSLocalizedString("_please_enter_file_name_", comment: ""), preferredStyle: .alert) + alert.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .cancel, handler: nil)) + self.present(alert, animated: true) + return + } + + // Ensure fileName is not nil or empty + guard var fileNameForm: String = fileName, !fileNameForm.isEmpty else { return } + + // Trim whitespaces and newlines + fileNameForm = fileNameForm.trimmingCharacters(in: .whitespacesAndNewlines) + + let fileAutoRenamer = FileAutoRenamer() + fileName = fileAutoRenamer.rename(filename: fileNameForm, isFolderPath: true) + + let result = await NKTypeIdentifiers.shared.getInternalType(fileName: fileNameForm, mimeType: "", directory: false, account: session.account) + + if utility.editorsDirectEditing(account: session.account, contentType: result.mimeType).isEmpty { + fileNameForm = (fileNameForm as NSString).deletingPathExtension + "." + fileNameExtension + } + + // verify if already exists + if NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView == %@", session.account, self.serverUrl, fileNameForm)) != nil { + NCContentPresenter().showError(error: NKError(errorCode: 0, errorDescription: "_rename_already_exists_")) + return + // } + // + // if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: String(describing: fileNameForm), nativeFormat: false) != nil { + // + // let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: String(describing: fileNameForm), fileNameView: String(describing: fileNameForm), ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) + // + // guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } + // + // conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") + // conflict.alwaysNewFileNameNumber = true + // conflict.serverUrl = serverUrl + // conflict.metadatasUploadInConflict = [metadataForUpload] + // conflict.delegate = self + // + // self.present(conflict, animated: true, completion: nil) + + } else { + + let fileNamePath = utilityFileSystem.getFileNamePath(String(describing: fileNameForm), serverUrl: serverUrl, session: session) + await NCCreateDocument().createDocument(controller: controller, fileNamePath: fileNamePath, fileName: String(describing: fileNameForm), fileNameExtension: self.fileNameExtension, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account) + + } } } @@ -335,7 +343,11 @@ import XLForm if let metadatas, metadatas.count > 0 { let fileName = metadatas[0].fileName let fileNamePath = utilityFileSystem.getFileNamePath(fileName, serverUrl: serverUrl, session: session) - createDocument(fileNamePath: fileNamePath, fileName: fileName) +// createDocument(fileNamePath: fileNamePath, fileName: fileName) + Task { + await NCCreateDocument().createDocument(controller: controller, fileNamePath: fileNamePath, fileName: String(describing: fileName), editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account) + } + } else { DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { self.cancel() @@ -351,54 +363,63 @@ import XLForm if self.editorId == NCGlobal.shared.editorText || self.editorId == NCGlobal.shared.editorOnlyoffice { - var options = NKRequestOptions() - if self.editorId == NCGlobal.shared.editorOnlyoffice { - options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentOnlyOffice()) - } else if editorId == NCGlobal.shared.editorText { - options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) - } - - NextcloudKit.shared.textCreateFile(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account, options: options) { account, url, _, error in - guard error == .success, account == self.session.account, let url = url else { - self.navigationItem.rightBarButtonItem?.isEnabled = true - NCContentPresenter().showError(error: error) - return - } - - var results = NextcloudKit.shared.nkCommonInstance.getInternalType(fileName: fileName, mimeType: "", directory: false, account: self.session.account) - // FIXME: iOS 12.0,* don't detect UTI text/markdown, text/x-markdown - if results.mimeType.isEmpty { - results.mimeType = "text/x-markdown" + Task { + var options = NKRequestOptions() + if self.editorId == NCGlobal.shared.editorOnlyoffice { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentOnlyOffice()) + } else if editorId == NCGlobal.shared.editorText { + options = NKRequestOptions(customUserAgent: utility.getCustomUserAgentNCText()) } - - self.dismiss(animated: true, completion: { - let metadata = NCManageDatabase.shared.createMetadata(fileName: fileName, fileNameView: fileName, ocId: UUID, serverUrl: self.serverUrl, url: url, contentType: results.mimeType, session: self.session, sceneIdentifier: self.appDelegate.sceneIdentifier) - if let viewController = self.appDelegate.activeViewController { -// NCViewer().view(viewController: viewController, metadata: metadata) - NCViewer().view(viewController: viewController, metadata: metadata, metadatas: [metadata]) + + let results = await NextcloudKit.shared.textCreateFileAsync(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account, options: options) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: self.session.account, + path: fileNamePath, + name: "textCreateFile") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) } - }) + } + guard results.error == .success, let url = results.url else { + return NCContentPresenter().showError(error: results.error) + } + let metadata = await NCManageDatabase.shared.createMetadataAsync(fileName: fileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + AnalyticsHelper.shared.trackCreateFile(metadata: metadata) + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: controller) { + controller.navigationController?.pushViewController(vc, animated: true) + } } } if self.editorId == NCGlobal.shared.editorCollabora { - - NextcloudKit.shared.createRichdocuments(path: fileNamePath, templateId: templateIdentifier, account: session.account) { account, url, _, error in - guard error == .success, account == self.session.account, let url = url else { - self.navigationItem.rightBarButtonItem?.isEnabled = true - NCContentPresenter().showError(error: error) - return - } - - self.dismiss(animated: true, completion: { - let createFileName = (fileName as NSString).deletingPathExtension + "." + self.fileNameExtension - let metadata = NCManageDatabase.shared.createMetadata(fileName: createFileName, fileNameView: createFileName, ocId: UUID, serverUrl: self.serverUrl, url: url, contentType: "", session: self.session, sceneIdentifier: self.appDelegate.sceneIdentifier) - AnalyticsHelper.shared.trackCreateFile(metadata: metadata) - if let viewController = self.appDelegate.activeViewController { -// NCViewer().view(viewController: viewController, metadata: metadata) - NCViewer().view(viewController: viewController, metadata: metadata, metadatas: [metadata]) + Task { + + let results = await NextcloudKit.shared.createRichdocumentsAsync(path: fileNamePath, templateId: templateIdentifier, account: session.account) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: self.session.account, + path: fileNamePath, + name: "CreateRichdocuments") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) } - }) + } + guard results.error == .success, let url = results.url else { + return NCContentPresenter().showError(error: results.error) + } + + let metadata = await NCManageDatabase.shared.createMetadataAsync(fileName: fileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: controller) { + controller.navigationController?.pushViewController(vc, animated: true) + } } } } @@ -432,7 +453,7 @@ import XLForm for template in templates { - let temp = NKEditorTemplates() + var temp = NKEditorTemplate() temp.identifier = template.identifier temp.ext = template.ext @@ -452,7 +473,7 @@ import XLForm if self.listOfTemplate.isEmpty { - let temp = NKEditorTemplates() + var temp = NKEditorTemplate() temp.identifier = "" if self.editorId == NCGlobal.shared.editorText { @@ -489,14 +510,14 @@ import XLForm for template in templates! { - let temp = NKEditorTemplates() + var temp = NKEditorTemplate() temp.identifier = "\(template.templateId)" - temp.delete = template.delete +// temp.delete = template.delete temp.ext = template.ext temp.name = template.name temp.preview = template.preview - temp.type = template.type +// temp.type = template.type self.listOfTemplate.append(temp) @@ -511,7 +532,7 @@ import XLForm if self.listOfTemplate.isEmpty { - let temp = NKEditorTemplates() + var temp = NKEditorTemplate() temp.identifier = "" if self.typeTemplate == NCGlobal.shared.templateDocument { diff --git a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift index fcec7ded45..f61f3cf801 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift @@ -72,7 +72,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud self.title = NSLocalizedString("_voice_memo_title_", comment: "") // Button Play Stop - buttonPlayStop.setImage(UIImage(named: "audioPlay")!.image(color: NCBrandColor.shared.iconColor, size: 100), for: .normal) + buttonPlayStop.setImage(UIImage(named: "audioPlay")!.image(color: NCBrandColor.shared.iconImageColor, size: 100), for: .normal) // Progress view progressView.progress = 0 @@ -147,6 +147,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud row.cellConfig["backgroundColor"] = UIColor.secondarySystemGroupedBackground row.action.formSelector = #selector(changeDestinationFolder(_:)) row.cellConfig["folderImage.image"] = UIImage(named: "folder_nmcloud")?.image(color: NCBrandColor.shared.brandElement, size: 25) + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.right.rawValue row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) row.cellConfig["photoLabel.textColor"] = UIColor.label //photos @@ -186,7 +187,8 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud self.form.delegate = nil if let fileNameNew = formRow.value as? String { - self.fileName = FileAutoRenamer.rename(fileNameNew, account: session.account) + self.fileName = utility.removeForbiddenCharacters(fileNameNew) + self.fileName = FileAutoRenamer.rename(filename: fileNameNew, isFolderPath: true) } else { self.fileName = "" } @@ -251,6 +253,7 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud metadataForUpload.size = utilityFileSystem.getFileSize(filePath: fileNamePath) if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { + guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") diff --git a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift index 3baa5dbf54..caa5aefaf4 100644 --- a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift +++ b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift @@ -71,6 +71,10 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC self.init() + if serverUrl == utilityFileSystem.getHomeServer(urlBase: appDelegate?.urlBase ?? "", userId: appDelegate?.userId ?? "") { + titleServerUrl = "/" + } else { + titleServerUrl = (serverUrl as NSString).lastPathComponent if serverUrl == utilityFileSystem.getHomeServer(session: session) { titleServerUrl = "/" } else { @@ -141,6 +145,37 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC var section: XLFormSectionDescriptor var row: XLFormRowDescriptor + + // Section: Destination Folder + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_save_path_", comment: "")) + form.addFormSection(section) + + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScamFileNameCustomInputField"] = FileNameInputTextField.self + row = XLFormRowDescriptor(tag: "fileName", rowType: "NMCScamFileNameCustomInputField", title: NSLocalizedString("_filename_", comment: "")) + row.cellClass = FileNameInputTextField.self + row.cellConfig["fileNameInputTextField.placeholder"] = self.fileName + + row.cellConfig["fileNameInputTextField.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["fileNameInputTextField.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["fileNameInputTextField.textColor"] = NCBrandColor.shared.label + + + section.addFormRow(row) + //FileName custom view END + + section = XLFormSectionDescriptor.formSection(withTitle: NSLocalizedString("_location_", comment: "")) + form.addFormSection(section) + + //Scan documnet folder path + XLFormViewController.cellClassesForRowDescriptorTypes()["NMCScanFolderPathCustomCell"] = ScanDocumentPathView.self + row = XLFormRowDescriptor(tag: "ButtonDestinationFolder", rowType: "NMCScanFolderPathCustomCell", title: self.titleServerUrl) + row.action.formSelector = #selector(changeDestinationFolder(_:)) + row.cellConfig["backgroundColor"] = cellBackgoundColor + row.cellConfig["folderImage.image"] = UIImage(named: "folder")?.imageColor(NCBrandColor.shared.customer) + row.cellConfig["photoLabel.textAlignment"] = NSTextAlignment.left.rawValue + row.cellConfig["photoLabel.font"] = UIFont.systemFont(ofSize: 15.0) + row.cellConfig["photoLabel.textColor"] = NCBrandColor.shared.label // Section: Destination Folder @@ -162,6 +197,10 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC row.cellConfig["photoLabel.text"] = self.titleServerUrl } row.cellConfig["textLabel.text"] = "" + + section.addFormRow(row) + // END of Scan documnet folder path + section.addFormRow(row) // Section: File Name @@ -306,7 +345,8 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC let fileNameNew = newValue as? String if let fileNameNew = newValue as? String { - self.fileName = FileAutoRenamer.rename(fileNameNew, account: session.account) + self.fileName = utility.removeForbiddenCharacters(fileNameNew) + self.fileName = FileAutoRenamer.rename(filename: fileNameNew, isFolderPath: true) } else { self.fileName = "" } @@ -453,6 +493,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC var newFileName: String = "" if fileName == nil || fileName == "" { + name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") } else { name = fileName! @@ -471,12 +512,18 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC // MARK: - Action + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], indexPath: [IndexPath], overwrite: Bool, copy: Bool, move: Bool) { + + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { + + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { if serverUrl != nil { self.serverUrl = serverUrl! + if serverUrl == utilityFileSystem.getHomeServer(urlBase: appDelegate?.urlBase ?? "", userId: appDelegate?.userId ?? "") { if serverUrl == utilityFileSystem.getHomeServer(session: session) { self.titleServerUrl = "/" } else { @@ -709,11 +756,18 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC } } + + let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload + + if NCManageDatabase.shared.getMetadataConflict(account: appDelegate?.account ?? "", serverUrl: serverUrl, fileNameView: fileNameSave) != nil { + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { @@ -769,6 +823,10 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC } } + + let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground @@ -841,11 +899,17 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC let image = changeCompressionImage(arrayImages[count]) + let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") + +// let metadataForUpload = NCManageDatabase.shared.createMetadata(account: appDelegate?.account ?? "", user: appDelegate?.user ?? "", userId: appDelegate?.userId ?? "", fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, urlBase: appDelegate?.urlBase ?? "", url: "", contentType: "") let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate?.sceneIdentifier) metadataForUpload.session = NCNetworking.shared.sessionUploadBackground metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload + + if NCManageDatabase.shared.getMetadataConflict(account: appDelegate?.account ?? "", serverUrl: serverUrl, fileNameView: fileNameSave) != nil { + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { @@ -1267,3 +1331,4 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC return nil } } + diff --git a/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift index 5d825dc6d8..ba1ddd8537 100644 --- a/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift +++ b/iOSClient/Scan document/NMC Views/JPGImageSaveSwitchView.swift @@ -7,6 +7,7 @@ // import Foundation + import XLForm class JPGImageSaveSwitchView: XLFormBaseCell{ diff --git a/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift index 93211a28f8..3c90b4d943 100644 --- a/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift +++ b/iOSClient/Scan document/NMC Views/PNGImageSaveSwitchView.swift @@ -7,6 +7,7 @@ // import Foundation + import XLForm class PNGImageSaveSwitchView: XLFormBaseCell{ diff --git a/iOSClient/Settings/CCAdvanced.m b/iOSClient/Settings/CCAdvanced.m index 4ab8e5a55f..3c7477e5a3 100755 --- a/iOSClient/Settings/CCAdvanced.m +++ b/iOSClient/Settings/CCAdvanced.m @@ -127,12 +127,17 @@ - (void)initializeForm [section addFormRow:row]; } +#ifdef DEBUG //#ifdef DEBUG // Section DIAGNOSTICS ------------------------------------------------- section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_diagnostics_", nil)]; [form addFormSection:section]; +// if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { + if ([[NSFileManager defaultManager] fileExistsAtPath:@""] && NCBrandOptions.shared.disable_log == false) { + if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { + if ([[NSFileManager defaultManager] fileExistsAtPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] && NCBrandOptions.shared.disable_log == false) { // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version // if ([[NSFileManager defaultManager] fileExistsAtPath:NKLogFileManager.shared.logDirectory.path] && NCBrandOptions.shared.disable_log == false) { @@ -147,6 +152,9 @@ - (void)initializeForm row.action.formBlock = ^(XLFormRowDescriptor * sender) { [self deselectFormRow:sender]; +// NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:@""] fileNameSource:@"" isEditingEnabled:false metadata:nil]; + NCViewerQuickLook *viewerQuickLook = [[NCViewerQuickLook alloc] initWith:[NSURL fileURLWithPath:NextcloudKit.shared.nkCommonInstance.filenamePathLog] isEditingEnabled:false metadata:nil]; // NSURL *logFilePath = [self getLogFilePath]; // if (logFilePath) { @@ -206,6 +214,8 @@ - (void)initializeForm [self deselectFormRow:sender]; +// [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; + [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; [[[NextcloudKit shared] nkCommonInstance] clearFileLog]; // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version // [[NKLogFileManager shared] clearLogFiles]; @@ -214,11 +224,32 @@ - (void)initializeForm NSInteger logLevel = [[NCKeychain alloc] init].logLevel; BOOL isSimulatorOrTestFlight = [[[NCUtility alloc] init] isSimulatorOrTestFlight]; NSString *versionNextcloudiOS = [NSString stringWithFormat:[NCBrandOptions shared].textCopyrightNextcloudiOS, [[[NCUtility alloc] init] getVersionAppWithBuild:true]]; +// if (isSimulatorOrTestFlight) { +// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; +// } else { +// [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; +// } if (isSimulatorOrTestFlight) { [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; } else { [[[NextcloudKit shared] nkCommonInstance] writeLog:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@", (unsigned long)logLevel, versionNextcloudiOS]]; } + }; + [section addFormRow:row]; + + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"logLevel" rowType:XLFormRowDescriptorTypeSlider title:NSLocalizedString(@"_level_log_", nil)]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + [row.cellConfig setObject:@(NSTextAlignmentCenter) forKey:@"textLabel.textAlignment"]; + [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; + [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; + NSInteger logLevel = [[NCKeychain alloc] init].logLevel; + row.value = @(logLevel); + [row.cellConfigAtConfigure setObject:@(2) forKey:@"slider.maximumValue"]; + [row.cellConfigAtConfigure setObject:@(0) forKey:@"slider.minimumValue"]; + [row.cellConfigAtConfigure setObject:@(2) forKey:@"steps"]; + [section addFormRow:row]; + } + // with Nextcloudkit latest version will uncomment below line once updated to latest Nextcloudkit version // if (isSimulatorOrTestFlight) { // [[NKLogFileManager shared] writeLogWithInfo:[NSString stringWithFormat:@"[INFO] Clear log with level %lu %@ (Simulator / TestFlight)", (unsigned long)logLevel, versionNextcloudiOS]]; @@ -303,7 +334,7 @@ - (void)initializeForm [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; - [row.cellConfig setObject:[[UIImage imageNamed:@"trash"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"trashIcon"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; row.action.formSelector = @selector(clearCacheRequest:); [sectionSize addFormRow:row]; @@ -399,6 +430,7 @@ - (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor ol NSInteger levelLog = [[rowDescriptor.value valueData] intValue]; [[NCKeychain alloc] init].logLevel = levelLog; +// [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog]; [[[NextcloudKit shared] nkCommonInstance] setLevelLog:levelLog]; } @@ -488,6 +520,7 @@ - (void)clearCache:(NSString *)account [[NSURLCache sharedURLCache] setMemoryCapacity:0]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; + [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false]; [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false removeAutoUpload:false]; // [[NCManageDatabase shared] clearDatabaseWithAccount:account removeAccount:false]; @@ -500,6 +533,7 @@ - (void)clearCache:(NSString *)account [ufs createDirectoryStandard]; [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; // [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; [[NCImageCache shared] createMediaCacheWithAccount:appDelegate.account withCacheSize:true]; diff --git a/iOSClient/Settings/CCManageAutoUpload.m b/iOSClient/Settings/CCManageAutoUpload.m index 41882f136c..8f78acc6f1 100644 --- a/iOSClient/Settings/CCManageAutoUpload.m +++ b/iOSClient/Settings/CCManageAutoUpload.m @@ -44,6 +44,8 @@ - (void)initializeForm XLFormRowDescriptor *row; tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveAccount]; + // Auto Upload @@ -68,7 +70,7 @@ - (void)initializeForm row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadDirectory" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_autoupload_select_folder_", nil)]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; - [row.cellConfig setObject:[[UIImage imageNamed:@"foldersOnTop"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"foldersOnTop"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; [row.cellConfig setObject:[[UIImage imageNamed:@"foldersOnTop"] imageWithColor:UIColor.systemGrayColor size:25] forKey:@"imageView.image"]; [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; @@ -146,6 +148,11 @@ - (void)initializeForm [form addFormSection:section]; NSString *title = NSLocalizedString(@"_autoupload_fullphotos_", nil); + row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadFull" rowType:XLFormRowDescriptorTypeBooleanSwitch title:title]; + row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; + row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; + row.value = 0; + if (activeAccount.autoUploadFull) row.value = @1; row = [XLFormRowDescriptor formRowDescriptorWithTag:@"autoUploadStart" rowType:XLFormRowDescriptorTypeBooleanSwitch title:title]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; row.hidden = [NSString stringWithFormat:@"$%@==0", @"autoUpload"]; @@ -234,6 +241,8 @@ - (void)viewWillAppear:(BOOL)animated [super viewWillAppear:animated]; appDelegate.activeViewController = self; + [[[NCAskAuthorization alloc] init] askAuthorizationPhotoLibraryWithController:self completion:^(BOOL status) { }]; + [[[NCAskAuthorization alloc] init] askAuthorizationPhotoLibraryWithViewController:self completion:^(BOOL status) { }]; appDelegate.account = [[[NCKeychain alloc] init] getAccountName] ; [[[NCAskAuthorization alloc] init] askAuthorizationPhotoLibraryWithController:self completion:^(BOOL status) { }]; } @@ -255,6 +264,8 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue]; tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveAccount]; + if ([rowDescriptor.tag isEqualToString:@"autoUpload"]) { @@ -274,11 +285,13 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; // [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; } else { [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUpload" state:NO]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:NO]; // remove @@ -293,17 +306,21 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old [[NCKeychain alloc] init].removePhotoCameraRoll = [[rowDescriptor.value valueData] boolValue]; } + if ([rowDescriptor.tag isEqualToString:@"autoUploadFull"]) { if ([rowDescriptor.tag isEqualToString:@"autoUploadStart"]) { if ([[rowDescriptor.value valueData] boolValue] == YES) { [[NCAutoUpload shared] autoUploadFullPhotosWithController:self log:@"Auto upload full" account:appDelegate.account]; + [[NCAutoUpload shared] autoUploadFullPhotosWithViewController:self log:@"Auto upload full"]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:YES]; // [[NCAutoUpload shared] autoUploadFullPhotosWithViewController:self log:@"Auto upload full"]; [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:YES]; } else { [[NCManageDatabase shared] clearMetadatasUploadWithAccount:appDelegate.account]; + [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadFull" state:NO]; [[NCManageDatabase shared] setAccountAutoUploadProperty:@"autoUploadStart" state:NO]; } } @@ -314,6 +331,7 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old if ([[rowDescriptor.value valueData] boolValue] == YES) { [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; // [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; } } @@ -329,6 +347,7 @@ -(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor old if ([[rowDescriptor.value valueData] boolValue] == YES){ [[NCAutoUpload shared] alignPhotoLibraryWithController:self account:appDelegate.account]; + [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; // [[NCAutoUpload shared] alignPhotoLibraryWithViewController:self]; } } @@ -367,6 +386,7 @@ - (void)reloadForm XLFormRowDescriptor *rowAutoUploadWWAnVideo = [self.form formRowWithTag:@"autoUploadWWAnVideo"]; XLFormRowDescriptor *rowRemovePhotoCameraRoll = [self.form formRowWithTag:@"removePhotoCameraRoll"]; + XLFormRowDescriptor *rowAutoUploadFull = [self.form formRowWithTag:@"autoUploadFull"]; XLFormRowDescriptor *rowAutoUploadFull = [self.form formRowWithTag:@"autoUploadStart"]; XLFormRowDescriptor *rowAutoUploadCreateSubfolder = [self.form formRowWithTag:@"autoUploadCreateSubfolder"]; @@ -377,6 +397,7 @@ - (void)reloadForm // - STATUS --------------------- tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveAccount]; if (activeAccount.autoUpload) [rowAutoUpload setValue:@1]; else [rowAutoUpload setValue:@0]; @@ -396,6 +417,7 @@ - (void)reloadForm if (activeAccount.autoUploadWWAnVideo) [rowAutoUploadWWAnVideo setValue:@1]; else [rowAutoUploadWWAnVideo setValue:@0]; + if (activeAccount.autoUploadFull) if (activeAccount.autoUploadStart) [rowAutoUploadFull setValue:@1]; else [rowAutoUploadFull setValue:@0]; @@ -435,6 +457,7 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { tableAccount *activeAccount = [[NCManageDatabase shared] getActiveTableAccount]; + tableAccount *activeAccount = [[NCManageDatabase shared] getActiveAccount]; NSString *sectionName; NSString *autoUploadPath = [NSString stringWithFormat:@"%@/%@", [[NCManageDatabase shared] getAccountAutoUploadDirectoryWithUrlBase:appDelegate.urlBase userId:appDelegate.userId account:appDelegate.account], [[NCManageDatabase shared] getAccountAutoUploadFileName]]; @@ -461,6 +484,15 @@ - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInte break; case 7: if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_fullphotos_footer_", nil); + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_fullphotos_footer_", nil); + else sectionName = @""; + break; + case 5: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_create_subfolder_footer_", nil); + else sectionName = @""; + break; + case 6: + if (activeAccount.autoUpload) sectionName = NSLocalizedString(@"_autoupload_filenamemask_footer_", nil); else sectionName = @""; break; } @@ -468,6 +500,7 @@ - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInte } - (void)dismissSelectWithServerUrl:(NSString * _Nullable)serverUrl metadata:(tableMetadata * _Nullable)metadata type:(NSString * _Nonnull)type items:(NSArray * _Nonnull)items overwrite:(BOOL)overwrite copy:(BOOL)copy move:(BOOL)move +- (void)dismissSelectWithServerUrl:(NSString * _Nullable)serverUrl metadata:(tableMetadata * _Nullable)metadata type:(NSString * _Nonnull)type items:(NSArray * _Nonnull)items overwrite:(BOOL)overwrite copy:(BOOL)copy move:(BOOL)move { if (serverUrl != nil) { @@ -475,6 +508,8 @@ - (void)dismissSelectWithServerUrl:(NSString * _Nullable)serverUrl metadata:(tab if ([serverUrl isEqualToString:home]) { // NKError *error = [[NKError alloc] initWithErrorCode:NCGlobal.shared.errorInternalError errorDescription:@"_autoupload_error_select_folder_"];// responseData:nil]; // [[[NCContentPresenter alloc] init] messageNotification:@"_error_" error:error delay:[[NCGlobal shared] dismissAfterSecond] type:messageTypeError afterDelay:0]; + NKError *error = [[NKError alloc] initWithErrorCode:NCGlobal.shared.errorInternalError errorDescription:@"_autoupload_error_select_folder_" responseData:nil]; + [[[NCContentPresenter alloc] init] messageNotification:@"_error_" error:error delay:[[NCGlobal shared] dismissAfterSecond] type:messageTypeError afterDelay:0]; return; } diff --git a/iOSClient/Settings/InitialPrivacySettingsViewController.swift b/iOSClient/Settings/InitialPrivacySettingsViewController.swift index 2cd30a4242..8ae7b2e186 100644 --- a/iOSClient/Settings/InitialPrivacySettingsViewController.swift +++ b/iOSClient/Settings/InitialPrivacySettingsViewController.swift @@ -10,6 +10,7 @@ import Foundation import AppTrackingTransparency import AdSupport import UIKit +import XLForm class InitialPrivacySettingsViewController: UIViewController { diff --git a/iOSClient/Settings/MagentaCloudVersionView.swift b/iOSClient/Settings/MagentaCloudVersionView.swift index 98c4f41784..925d4a8f50 100644 --- a/iOSClient/Settings/MagentaCloudVersionView.swift +++ b/iOSClient/Settings/MagentaCloudVersionView.swift @@ -7,6 +7,7 @@ // import Foundation + import XLForm class MagentaCloudVersionView: XLFormBaseCell{ diff --git a/iOSClient/Settings/NCManageAutoUploadFileName.swift b/iOSClient/Settings/NCManageAutoUploadFileName.swift index b85d6e94be..41356f7ea7 100644 --- a/iOSClient/Settings/NCManageAutoUploadFileName.swift +++ b/iOSClient/Settings/NCManageAutoUploadFileName.swift @@ -170,6 +170,7 @@ class NCManageAutoUploadFileName: XLFormViewController { self.form.delegate = nil if let fileName = fileName { + formRow.value = NCUtility().removeForbiddenCharacters(fileName) formRow.value = FileAutoRenamer.rename(fileName, account: appDelegate.account) } @@ -184,6 +185,10 @@ class NCManageAutoUploadFileName: XLFormViewController { if newValue as? String != formRow.value as? String { self.reloadFormRow(formRow) + + let errorDescription = String(format: NSLocalizedString("_forbidden_characters_", comment: ""), NCGlobal.shared.forbiddenCharacters.joined(separator: " ")) + let error = NKError(errorCode: NCGlobal.shared.errorConflict, errorDescription: errorDescription) + NCContentPresenter().showInfo(error: error) } } diff --git a/iOSClient/Settings/NCSettings.m b/iOSClient/Settings/NCSettings.m index 19ba0e6e63..62abc39c87 100644 --- a/iOSClient/Settings/NCSettings.m +++ b/iOSClient/Settings/NCSettings.m @@ -27,6 +27,7 @@ #import "CCManageAutoUpload.h" #import "NCBridgeSwift.h" #import +#import //#import #define alertViewEsci 1 @@ -63,7 +64,7 @@ - (void)initializeForm row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; - [row.cellConfig setObject:[[UIImage imageNamed:@"autoUpload"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"autoUpload"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; row.action.viewControllerClass = [CCManageAutoUpload class]; [section addFormRow:row]; @@ -75,7 +76,7 @@ - (void)initializeForm // Lock active YES/NO row = [XLFormRowDescriptor formRowDescriptorWithTag:@"bloccopasscode" rowType:XLFormRowDescriptorTypeButton title:NSLocalizedString(@"_lock_not_active_", nil)]; row.cellConfigAtConfigure[@"backgroundColor"] = UIColor.secondarySystemGroupedBackgroundColor; - [row.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; @@ -109,7 +110,7 @@ - (void)initializeForm [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; - [row.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; row.action.formSelector = @selector(manageE2EE:); [section addFormRow:row]; } @@ -125,7 +126,7 @@ - (void)initializeForm [row.cellConfig setObject:[UIFont systemFontOfSize:15.0] forKey:@"textLabel.font"]; [row.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"]; [row.cellConfig setObject:UIColor.labelColor forKey:@"textLabel.textColor"]; - [row.cellConfig setObject:[[UIImage imageNamed:@"gear"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [row.cellConfig setObject:[[UIImage imageNamed:@"gear"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; row.action.viewControllerClass = [CCAdvanced class]; [section addFormRow:row]; @@ -281,12 +282,12 @@ - (void)reloadForm if ([[NCKeychain alloc] init].passcode) { rowBloccoPasscode.title = NSLocalizedString(@"_lock_active_", nil); - [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; rowEnableTouchDaceID.disabled = @NO; rowNotPasscodeAtStart.disabled = @NO; } else { rowBloccoPasscode.title = NSLocalizedString(@"_lock_not_active_", nil); - [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconColor size:25] forKey:@"imageView.image"]; + [rowBloccoPasscode.cellConfig setObject:[[UIImage imageNamed:@"lock_open"] imageWithColor:NCBrandColor.shared.iconImageColor size:25] forKey:@"imageView.image"]; rowEnableTouchDaceID.disabled = @YES; rowNotPasscodeAtStart.disabled = @YES; } diff --git a/iOSClient/Settings/NCSettingsBundleHelper.swift b/iOSClient/Settings/NCSettingsBundleHelper.swift index af6fa89e39..8b0169890f 100644 --- a/iOSClient/Settings/NCSettingsBundleHelper.swift +++ b/iOSClient/Settings/NCSettingsBundleHelper.swift @@ -32,7 +32,7 @@ class NCSettingsBundleHelper: NSObject { } class func setVersionAndBuildNumber() { - let version = NCUtility().getVersionApp() as String + let version = NCUtility().getVersionBuild() as String UserDefaults.standard.set(version, forKey: SettingsBundleKeys.BuildVersionKey) } diff --git a/iOSClient/Settings/PrivacySettingsViewController.swift b/iOSClient/Settings/PrivacySettingsViewController.swift index b7883ad800..757d5532d5 100644 --- a/iOSClient/Settings/PrivacySettingsViewController.swift +++ b/iOSClient/Settings/PrivacySettingsViewController.swift @@ -9,6 +9,7 @@ import Foundation import AppTrackingTransparency import AdSupport +import XLForm class PrivacySettingsViewController: XLFormViewController{ diff --git a/iOSClient/Settings/RequiredDataCollectionSwitch.swift b/iOSClient/Settings/RequiredDataCollectionSwitch.swift index f80aa97e89..0d5a34732f 100644 --- a/iOSClient/Settings/RequiredDataCollectionSwitch.swift +++ b/iOSClient/Settings/RequiredDataCollectionSwitch.swift @@ -7,7 +7,7 @@ // import UIKit - +import XLForm class RequiredDataCollectionSwitch: XLFormBaseCell { diff --git a/iOSClient/Settings/SaveSettingsCustomButtonCell.swift b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift index b314f62bab..1332b1f92a 100644 --- a/iOSClient/Settings/SaveSettingsCustomButtonCell.swift +++ b/iOSClient/Settings/SaveSettingsCustomButtonCell.swift @@ -9,6 +9,7 @@ import UIKit import XLForm + class SaveSettingsCustomButtonCell: XLFormButtonCell { @IBOutlet weak var saveSettingsButton: UIButton! diff --git a/iOSClient/Share/NCShareEmailFieldCell.swift b/iOSClient/Share/NCShareEmailFieldCell.swift index 7b8643fe08..48cdcb1774 100644 --- a/iOSClient/Share/NCShareEmailFieldCell.swift +++ b/iOSClient/Share/NCShareEmailFieldCell.swift @@ -37,19 +37,30 @@ class NCShareEmailFieldCell: UITableViewCell { super.setSelected(selected, animated: animated) } + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + if previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle { + setupCellAppearance() + } + } + func setupCell(with metadata: tableMetadata) { - contentView.backgroundColor = NCBrandColor.shared.secondarySystemGroupedBackground +// contentView.backgroundColor = NCBrandColor.shared.secondarySystemGroupedBackground ocId = metadata.ocId - configureSearchField() - configureContactButton() - configureLabels() + setupCellAppearance() updateCanReshareUI() setNeedsLayout() layoutIfNeeded() } + func setupCellAppearance() { + configureSearchField() + configureContactButton() + configureLabels() + } + private func configureSearchField() { searchField.layer.cornerRadius = 5 searchField.layer.masksToBounds = true @@ -70,9 +81,11 @@ class NCShareEmailFieldCell: UITableViewCell { btnContact.layer.masksToBounds = true btnContact.layer.borderWidth = 1 btnContact.layer.borderColor = NCBrandColor.shared.label.cgColor + if let image = UIImage(named: "Contacts")?.withRenderingMode(.alwaysTemplate) { + btnContact.setImage(image, for: .normal) + } btnContact.tintColor = NCBrandColor.shared.label - let contactImage = NCUtility().loadImage(named: "contact").image(color: NCBrandColor.shared.label, size: 24) - btnContact.setImage(contactImage, for: .normal) + } private func configureLabels() { @@ -89,7 +102,7 @@ class NCShareEmailFieldCell: UITableViewCell { func updateCanReshareUI() { guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { return } - let isCurrentUser = NCShareCommon().isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) + let isCurrentUser = NCShareCommon.isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) let canReshare = (metadata.sharePermissionsCollaborationServices & NCPermissions().permissionShareShare) != 0 labelSharedWithBy.isHidden = isCurrentUser @@ -130,7 +143,7 @@ class NCShareEmailFieldCell: UITableViewCell { func updateShareUI(ocId: String, count: Int) { guard let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId) else { return } - let isCurrentUser = NCShareCommon().isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) + let isCurrentUser = NCShareCommon.isCurrentUserIsFileOwner(fileOwnerId: metadata.ownerId) let canReshare = (metadata.sharePermissionsCollaborationServices & NCPermissions().permissionShareShare) != 0 if !isCurrentUser { diff --git a/iOSClient/Share/NCShareEmailFieldCell.xib b/iOSClient/Share/NCShareEmailFieldCell.xib index cfeb42cc45..8384397621 100644 --- a/iOSClient/Share/NCShareEmailFieldCell.xib +++ b/iOSClient/Share/NCShareEmailFieldCell.xib @@ -1,9 +1,8 @@ - + - - + @@ -23,6 +22,7 @@ + @@ -153,6 +161,7 @@ + @@ -169,9 +178,9 @@ - - - + + + diff --git a/iOSClient/Share/ShareDownloadLimitNetwork.swift b/iOSClient/Share/ShareDownloadLimitNetwork.swift index f2a2f26b82..06858464bf 100644 --- a/iOSClient/Share/ShareDownloadLimitNetwork.swift +++ b/iOSClient/Share/ShareDownloadLimitNetwork.swift @@ -27,6 +27,9 @@ class NMCCommunication: NSObject, XMLParserDelegate { NCSession.shared.getSession(controller: controller) } + func getDownloadLimit(token: String, completion: @escaping (_ downloadLimit: DownloadLimit?, _ errorDescription: String) -> Void) { + let baseUrl = session.urlBase // NCBrandOptions.shared.loginBaseUrl + func getDownloadLimit(token: String, completion: @escaping (_ downloadLimit: DownloadLimit?, _ errorDescription: String) -> Void) { let baseUrl = session.urlBase // NCBrandOptions.shared.loginBaseUrl let endPoint = "/ocs/v2.php/apps/files_downloadlimit/\(token)/limit" @@ -67,6 +70,7 @@ class NMCCommunication: NSObject, XMLParserDelegate { func setDownloadLimit(deleteLimit: Bool, limit: String, token: String, completion: @escaping (_ success: Bool, _ errorDescription: String) -> Void) { let baseUrl = session.urlBase //NCBrandOptions.shared.loginBaseUrl + let baseUrl = appDelegate?.urlBase ?? "" //NCBrandOptions.shared.loginBaseUrl let endPoint = "/ocs/v2.php/apps/files_downloadlimit/\(token)/limit" let path = baseUrl+endPoint do { @@ -113,7 +117,9 @@ class NMCCommunication: NSObject, XMLParserDelegate { public func authorizationToken() -> String { let accountDetails = NCManageDatabase.shared.getAllTableAccount().first + let accountDetails = NCManageDatabase.shared.getAllAccount().first let password = NCKeychain().getPassword(account: accountDetails?.account ?? "") + let password = NCKeychain().getPassword(account: accountDetails?.account ?? "") let username = accountDetails?.user ?? "" let credential = Data("\(username):\(password)".utf8).base64EncodedString() return ("Basic \(credential)") From faa515f54775707178ff4d79df44a4419048942b Mon Sep 17 00:00:00 2001 From: harshada-15-tsys Date: Wed, 17 Jun 2026 15:18:15 +0530 Subject: [PATCH 29/29] NMC 2015 - Updated configuration changes --- Brand/File_Provider_Extension.entitlements | 12 +- Brand/File_Provider_Extension.plist | 2 +- Brand/File_Provider_Extension_UI.entitlements | 5 +- Brand/File_Provider_Extension_UI.plist | 24 +- ...otification_Service_Extension.entitlements | 16 +- Brand/Notification_Service_Extension.plist | 2 +- Brand/Share.entitlements | 16 +- Brand/Share.plist | 2 +- Brand/Widget.entitlements | 5 +- Brand/Widget.plist | 10 +- .../WidgetDashboardIntentHandler.entitlements | 5 +- Brand/iOSClient.entitlements | 27 +- Brand/iOSClient.plist | 17 +- Nextcloud.xcodeproj/project.pbxproj | 1272 +++-------------- Tests/NextcloudUITests/AssistantUITests.swift | 306 ++-- .../NextcloudUITests/AutoUploadUITests.swift | 254 ++-- .../DownloadLimitUITests.swift | 968 ++++++------- iOSClient/Account/NCAccount.swift | 8 +- iOSClient/Analytics/AnalyticsHelper.swift | 6 +- iOSClient/Analytics/AnalyticsService.swift | 2 +- .../MoEngage/MoEngageAnalytics.swift | 267 +++- iOSClient/Login/NCLoginWeb.swift | 15 +- ...ionViewCommon+CollectionViewDelegate.swift | 22 +- iOSClient/Main/Create/NCCreateDocument.swift | 200 +++ .../Create/NCCreateFormUploadDocuments.swift | 45 +- .../Create/NCCreateFormUploadVoiceNote.swift | 55 +- .../NCCreateFormUploadScanDocument.swift | 2 +- .../Settings/NCManageAutoUploadFileName.swift | 4 + iOSClient/Settings/NCSettings.m | 2 +- .../Settings/NCSettingsBundleHelper.swift | 25 +- .../PrivacyPolicyViewController.swift | 4 + 31 files changed, 1577 insertions(+), 2023 deletions(-) create mode 100644 iOSClient/Main/Create/NCCreateDocument.swift diff --git a/Brand/File_Provider_Extension.entitlements b/Brand/File_Provider_Extension.entitlements index 0123881826..e3818a0874 100755 --- a/Brand/File_Provider_Extension.entitlements +++ b/Brand/File_Provider_Extension.entitlements @@ -4,19 +4,11 @@ com.apple.security.application-groups - group.de.magentacloud.next.dev2.client + group.com.t-systems.pu-ds.magentacloud.qa keychain-access-groups - $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + $(AppIdentifierPrefix)MagentaCLOUD - com.apple.security.application-groups - - group.com.t-systems.pu-ds.magentacloud.qa - - keychain-access-groups - - $(AppIdentifierPrefix)MagentaCLOUD - diff --git a/Brand/File_Provider_Extension.plist b/Brand/File_Provider_Extension.plist index f824f92cb6..acf5472307 100755 --- a/Brand/File_Provider_Extension.plist +++ b/Brand/File_Provider_Extension.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - $(CURRENT_PROJECT_VERSION) + $(CURRENT_PROJECT_VERSION) NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/Brand/File_Provider_Extension_UI.entitlements b/Brand/File_Provider_Extension_UI.entitlements index 4ecc3f0d13..3128ba985e 100644 --- a/Brand/File_Provider_Extension_UI.entitlements +++ b/Brand/File_Provider_Extension_UI.entitlements @@ -4,11 +4,12 @@ com.apple.security.application-groups - group.it.twsweb.Crypto-Cloud + group.com.t-systems.pu-ds.magentacloud.qa + group.de.magentacloud.next.dev2.client keychain-access-groups - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client diff --git a/Brand/File_Provider_Extension_UI.plist b/Brand/File_Provider_Extension_UI.plist index 5e27de9fde..421f512fd5 100644 --- a/Brand/File_Provider_Extension_UI.plist +++ b/Brand/File_Provider_Extension_UI.plist @@ -2,8 +2,24 @@ + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Nextcloud + MagentaCLOUD + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) NSExtension NSExtensionFileProviderActions @@ -29,16 +45,12 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - $(CURRENT_PROJECT_VERSION) + 36215 CFBundleInfoDictionaryVersion 6.0 CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) NSHumanReadableCopyright - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) diff --git a/Brand/Notification_Service_Extension.entitlements b/Brand/Notification_Service_Extension.entitlements index f0d4f751b3..4a9ebe9cb6 100644 --- a/Brand/Notification_Service_Extension.entitlements +++ b/Brand/Notification_Service_Extension.entitlements @@ -6,25 +6,13 @@ com.apple.security.application-groups - group.de.magentacloud.next.dev2.client + group.com.t-systems.pu-ds.magentacloud.qa com.apple.security.network.client keychain-access-groups - $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + $(AppIdentifierPrefix)MagentaCLOUD - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.com.t-systems.pu-ds.magentacloud.qa - - com.apple.security.network.client - - keychain-access-groups - - $(AppIdentifierPrefix)MagentaCLOUD - diff --git a/Brand/Notification_Service_Extension.plist b/Brand/Notification_Service_Extension.plist index 7cba1da5f6..ebc8f313de 100644 --- a/Brand/Notification_Service_Extension.plist +++ b/Brand/Notification_Service_Extension.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - $(CURRENT_PROJECT_VERSION) + $(CURRENT_PROJECT_VERSION) NSExtension NSExtensionPointIdentifier diff --git a/Brand/Share.entitlements b/Brand/Share.entitlements index f0d4f751b3..4a9ebe9cb6 100755 --- a/Brand/Share.entitlements +++ b/Brand/Share.entitlements @@ -6,25 +6,13 @@ com.apple.security.application-groups - group.de.magentacloud.next.dev2.client + group.com.t-systems.pu-ds.magentacloud.qa com.apple.security.network.client keychain-access-groups - $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + $(AppIdentifierPrefix)MagentaCLOUD - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.com.t-systems.pu-ds.magentacloud.qa - - com.apple.security.network.client - - keychain-access-groups - - $(AppIdentifierPrefix)MagentaCLOUD - diff --git a/Brand/Share.plist b/Brand/Share.plist index 98af08a5bd..967731ef66 100755 --- a/Brand/Share.plist +++ b/Brand/Share.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - $(CURRENT_PROJECT_VERSION) + $(CURRENT_PROJECT_VERSION) NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/Brand/Widget.entitlements b/Brand/Widget.entitlements index 9cf2061f89..b45faa35aa 100644 --- a/Brand/Widget.entitlements +++ b/Brand/Widget.entitlements @@ -6,13 +6,14 @@ com.apple.security.application-groups - group.it.twsweb.Crypto-Cloud + group.com.t-systems.pu-ds.magentacloud.qa + group.de.magentacloud.next.dev2.client com.apple.security.network.client keychain-access-groups - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client diff --git a/Brand/Widget.plist b/Brand/Widget.plist index 32ce55cfb4..d4e598ee31 100644 --- a/Brand/Widget.plist +++ b/Brand/Widget.plist @@ -2,15 +2,15 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExtension NSExtensionPointIdentifier com.apple.widgetkit-extension - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - diff --git a/Brand/WidgetDashboardIntentHandler.entitlements b/Brand/WidgetDashboardIntentHandler.entitlements index 9cf2061f89..b45faa35aa 100644 --- a/Brand/WidgetDashboardIntentHandler.entitlements +++ b/Brand/WidgetDashboardIntentHandler.entitlements @@ -6,13 +6,14 @@ com.apple.security.application-groups - group.it.twsweb.Crypto-Cloud + group.com.t-systems.pu-ds.magentacloud.qa + group.de.magentacloud.next.dev2.client com.apple.security.network.client keychain-access-groups - $(AppIdentifierPrefix)it.twsweb.Crypto-Cloud + $(AppIdentifierPrefix)de.magentacloud.next.dev2.client diff --git a/Brand/iOSClient.entitlements b/Brand/iOSClient.entitlements index 63987b375f..418cd0cb52 100755 --- a/Brand/iOSClient.entitlements +++ b/Brand/iOSClient.entitlements @@ -8,8 +8,7 @@ com.apple.security.application-groups - group.de.magentacloud.next.dev2.client.apps - group.de.magentacloud.next.dev2.client + group.com.t-systems.pu-ds.magentacloud.qa com.apple.security.device.audio-input @@ -23,29 +22,7 @@ keychain-access-groups - $(AppIdentifierPrefix)de.magentacloud.next.dev2.client + $(AppIdentifierPrefix)MagentaCLOUD - aps-environment - development - com.apple.security.app-sandbox - - com.apple.security.application-groups - - group.com.t-systems.pu-ds.magentacloud.qa - - com.apple.security.device.audio-input - - com.apple.security.device.camera - - com.apple.security.network.client - - com.apple.security.personal-information.location - - com.apple.security.personal-information.photos-library - - keychain-access-groups - - $(AppIdentifierPrefix)MagentaCLOUD - diff --git a/Brand/iOSClient.plist b/Brand/iOSClient.plist index 66e0980c9d..fbb6262ef5 100755 --- a/Brand/iOSClient.plist +++ b/Brand/iOSClient.plist @@ -44,10 +44,13 @@ $(CURRENT_PROJECT_VERSION) ITSAppUsesNonExemptEncryption + ITSEncryptionExportComplianceCode + 8e9f9874-938e-460b-a9be-f82cb3393971 LSApplicationQueriesSchemes nextcloudtalk nextcloudnotes + itms-apps LSMinimumSystemVersion 12.3 @@ -58,24 +61,24 @@ NSAppTransportSecurity NSAllowsArbitraryLoads - + NSCameraUsageDescription - Camera access is required to scan documents and make photo and video. + Camera access is required to scan documents and take photos in this app. NSFaceIDUsageDescription Face ID is required to authenticate using face recognition. NSLocationAlwaysAndWhenInUseUsageDescription - The app will show your location on a map. + This app needs access to your location even in the background to automatically start uploading files when significant movement is detected. GPS is not used. NSLocationAlwaysUsageDescription - The app will show your location on a map. + The app uses your location to automatically trigger file uploads when you move between areas. NSLocationWhenInUseUsageDescription - The app will show your location on a map. + This app uses your location to detect movement and automatically upload files. It does not use GPS and does not store your location. NSMicrophoneUsageDescription Microphone access is required to create voice notes. NSPhotoLibraryAddUsageDescription - Photo library access is required to upload your photos and videos to your cloud. + This lets you upload and save photos using this app. Photos can then be browsed and viewed via the Media tab. NSPhotoLibraryUsageDescription - Photo library access is required to upload your photos and videos to your cloud. + This lets you upload and save photos using this app. Photos can then be browsed and viewed via the Media tab. NSUserActivityTypes AccountIntent diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 4eaa126c9a..5d9af17cf3 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -11,11 +11,9 @@ 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76B3CCD1EAE01BD00921AC9 /* NCBrand.swift */; }; 2C33C48223E2C475005F963B /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C33C48123E2C475005F963B /* NotificationService.swift */; }; 2C33C48623E2C475005F963B /* Notification Service Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3704EB2923D5A58400455C5B /* NCMenu.storyboard */; }; - 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; - 371B5A2E23D0B04500FAFAE9 /* NCMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */; }; - 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */; }; - 8491B1CD273BBA82001C8C5B /* UIViewController+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */; }; + 2F96A1BAFB10ACFEAC68EF1C /* NCContextMenuPlayerTracks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */; }; + 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellMain.swift */; }; + A5A87F9E4B0E4441A6A4BC20 /* NCContextMenuProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */; }; AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */; }; AA3C85EB2D36BBFB00F74F12 /* OCSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */; }; AA3C85EE2D36BCCE00F74F12 /* SharesResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */; }; @@ -90,199 +88,33 @@ AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; }; AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; }; AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; }; - B560B95A2EF5597A00E55904 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9582EF5597A00E55904 /* NCAccount.swift */; }; - B560B95B2EF5597A00E55904 /* NCShareAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9532EF5597A00E55904 /* NCShareAccounts.swift */; }; - B560B95C2EF5597A00E55904 /* NCAccountSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */; }; - B560B95D2EF5597A00E55904 /* NCAccountSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */; }; - B560B95E2EF5597A00E55904 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9512EF5597A00E55904 /* NCAccountRequest.swift */; }; - B560B95F2EF5597A00E55904 /* NCShareAccounts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */; }; - B560B9602EF5597A00E55904 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */; }; - B560B9612EF559C100E55904 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560B9512EF5597A00E55904 /* NCAccountRequest.swift */; }; - B560B9622EF559C100E55904 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */; }; - B5BEBD2F2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD302E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD312E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD322E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD332E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD342E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD352E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD362E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD372E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD382E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD392E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD3A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD3B2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD3C2E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD3D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD3E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD3F2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD402E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD412E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD422E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD432E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD442E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD452E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD462E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD472E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD482E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD492E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD4A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD4B2E93AD540002C9E5 /* iOSClient.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */; }; - B5BEBD4C2E93AD540002C9E5 /* Share.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2E2E93AD540002C9E5 /* Share.plist */; }; - B5BEBD4D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */; }; - B5BEBD4E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */; }; - B5BEBD522E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; - B5BEBD532E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; - B5BEBD542E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; - B5BEBD552E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; - B5BEBD562E93AE1C0002C9E5 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */; }; - B5BEBD572E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */; }; - B5BEBD5B2E93AE2F0002C9E5 /* LoginIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */; }; - B5BEBD5C2E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */; }; - B5BEBD5D2E93AE2F0002C9E5 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */; }; - B5BEBD6B2E93AE4B0002C9E5 /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD6A2E93AE4B0002C9E5 /* SharingTest.swift */; }; - B5BEBD6C2E93AE4B0002C9E5 /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5E2E93AE4B0002C9E5 /* AssetUploadTest.swift */; }; - B5BEBD6D2E93AE4B0002C9E5 /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD642E93AE4B0002C9E5 /* NCNotificationText.swift */; }; - B5BEBD6E2E93AE4B0002C9E5 /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD692E93AE4B0002C9E5 /* SettingsTestCases.swift */; }; - B5BEBD6F2E93AE4B0002C9E5 /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD602E93AE4B0002C9E5 /* CollaboraTestCase.swift */; }; - B5BEBD702E93AE4B0002C9E5 /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD632E93AE4B0002C9E5 /* MoveAndCopyTests.swift */; }; - B5BEBD712E93AE4B0002C9E5 /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD622E93AE4B0002C9E5 /* MoreTests.swift */; }; - B5BEBD722E93AE4B0002C9E5 /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD672E93AE4B0002C9E5 /* RenameFileTests.swift */; }; - B5BEBD732E93AE4B0002C9E5 /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD5F2E93AE4B0002C9E5 /* AudioUploadTests.swift */; }; - B5BEBD742E93AE4B0002C9E5 /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD652E93AE4B0002C9E5 /* OnboardingTestCase.swift */; }; - B5BEBD752E93AE4B0002C9E5 /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD612E93AE4B0002C9E5 /* E2EETests.swift */; }; - B5BEBD762E93AE4B0002C9E5 /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD682E93AE4B0002C9E5 /* ScanTests.swift */; }; - B5BEBD772E93AE4B0002C9E5 /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD662E93AE4B0002C9E5 /* PrivacyPolicyTest.swift */; }; - B5BEBD7D2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD7E2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD7F2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD802E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD812E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD822E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD832E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD842E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD852E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD862E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD872E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD882E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD892E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD8A2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD8B2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD8C2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD8D2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD8E2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD8F2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */; }; - B5BEBD902E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */; }; - B5BEBD912E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */; }; - B5BEBD942E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD952E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD962E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD972E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD982E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD992E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBD9A2E93AED80002C9E5 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */; }; - B5BEBDA32E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDA42E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDA52E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDA62E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDA72E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDA82E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDA92E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDAA2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDAB2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDAC2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDAD2E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDAE2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDAF2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDB02E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDB12E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDB22E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDB32E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDB42E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDB52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDB62E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDB72E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDB82E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDB92E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDBA2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDBB2E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDBC2E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDBD2E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDBE2E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDBF2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDC02E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDC12E93AF010002C9E5 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */; }; - B5BEBDC22E93AF010002C9E5 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */; }; - B5BEBDC32E93AF010002C9E5 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */; }; - B5BEBDC42E93AF010002C9E5 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */; }; - B5BEBDC52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */; }; - B5BEBDC72E93AF7E0002C9E5 /* NCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */; }; - B5BEBDC92E93AFF10002C9E5 /* NCSelectableNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */; }; - B5BEBDCC2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */; }; - B5BEBDCD2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */; }; - B5BEBDCE2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */; }; - B5BEBDCF2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */; }; - B5BEBDD62E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */; }; - B5BEBDD72E93B2450002C9E5 /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */; }; - B5BEBDD82E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */; }; - B5BEBDD92E93B2450002C9E5 /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */; }; - B5BEBDDA2E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */; }; - B5BEBDDB2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */; }; - B5BEBDDC2E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */; }; - B5BEBDDD2E93B2450002C9E5 /* TextTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */; }; - B5BEBDDE2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */; }; - B5BEBDDF2E93B2450002C9E5 /* TextTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */; }; - B5BEBDE02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */; }; - B5BEBDE12E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */; }; - B5BEBDE32E93BD6F0002C9E5 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */; }; - B5BEBDE92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBDEA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBDEB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDEC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDED2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBDEE2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBDEF2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDF02E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDF12E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBDF22E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBDF32E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDF42E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDF52E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBDF62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBDF72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDF82E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDF92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBDFA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBDFB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDFC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDFD2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBDFE2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBDFF2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBE002E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBE012E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */; }; - B5BEBE022E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */; }; - B5BEBE032E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */; }; - B5BEBE042E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */; }; - B5BEBE062E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */; }; - B5BEBE1A2E93BE200002C9E5 /* PNGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */; }; - B5BEBE1B2E93BE200002C9E5 /* FileNameInputTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */; }; - B5BEBE1C2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */; }; - B5BEBE1D2E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */; }; - B5BEBE1E2E93BE200002C9E5 /* ScanDocumentPathView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */; }; - B5BEBE1F2E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */; }; - B5BEBE202E93BE200002C9E5 /* JPGImageSaveSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */; }; - B5BEBE212E93BE200002C9E5 /* PasswordInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */; }; - B5BEBE222E93BE200002C9E5 /* PdfWithOcrSwitchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */; }; - B5BEBE232E93BE200002C9E5 /* PasswordInputField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */; }; - B5BEBE242E93BE200002C9E5 /* ScanDocumentPathView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */; }; - B5BEBE252E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */; }; - B5BEBE262E93BE200002C9E5 /* PdfWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */; }; - B5BEBE272E93BE200002C9E5 /* PNGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */; }; - B5BEBE282E93BE200002C9E5 /* FileNameInputTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */; }; - B5BEBE292E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */; }; - B5BEBE2A2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */; }; - B5BEBE2B2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */; }; - D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; }; + B55AFB5E2FE29BAC00A1A1A4 /* AppUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB5D2FE29BAC00A1A1A4 /* AppUtility.swift */; }; + B55AFB6D2FE2A04C00A1A1A4 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B55AFB672FE2A04C00A1A1A4 /* NCEmptyView.xib */; }; + B55AFB6E2FE2A04C00A1A1A4 /* MoEngageAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB5F2FE2A04C00A1A1A4 /* MoEngageAnalytics.swift */; }; + B55AFB6F2FE2A04C00A1A1A4 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB642FE2A04C00A1A1A4 /* AppUpdater.swift */; }; + B55AFB702FE2A04C00A1A1A4 /* TealiumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB6B2FE2A04C00A1A1A4 /* TealiumHelper.swift */; }; + B55AFB712FE2A04C00A1A1A4 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB622FE2A04C00A1A1A4 /* AnalyticsService.swift */; }; + B55AFB722FE2A04C00A1A1A4 /* AnalyticsHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB612FE2A04C00A1A1A4 /* AnalyticsHelper.swift */; }; + B55AFB732FE2A04C00A1A1A4 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB662FE2A04C00A1A1A4 /* NCEmptyDataSet.swift */; }; + B55AFB742FE2A04C00A1A1A4 /* AdjustHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB6A2FE2A04C00A1A1A4 /* AdjustHelper.m */; }; + B55AFB762FE2A0BD00A1A1A4 /* NCLoginWeb.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB752FE2A0BD00A1A1A4 /* NCLoginWeb.swift */; }; + B55AFB7A2FE2A47500A1A1A4 /* LoginIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB792FE2A47500A1A1A4 /* LoginIntegrationTests.swift */; }; + B55AFB7B2FE2A47500A1A1A4 /* BaseIntegrationXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB772FE2A47500A1A1A4 /* BaseIntegrationXCTestCase.swift */; }; + B55AFB7C2FE2A47500A1A1A4 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB782FE2A47500A1A1A4 /* FilesIntegrationTests.swift */; }; + B55AFB8A2FE2A49200A1A1A4 /* OnboardingTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB842FE2A49200A1A1A4 /* OnboardingTestCase.swift */; }; + B55AFB8B2FE2A49200A1A1A4 /* RenameFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB862FE2A49200A1A1A4 /* RenameFileTests.swift */; }; + B55AFB8C2FE2A49200A1A1A4 /* ScanTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB872FE2A49200A1A1A4 /* ScanTests.swift */; }; + B55AFB8D2FE2A49200A1A1A4 /* SettingsTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB882FE2A49200A1A1A4 /* SettingsTestCases.swift */; }; + B55AFB8E2FE2A49200A1A1A4 /* MoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB812FE2A49200A1A1A4 /* MoreTests.swift */; }; + B55AFB8F2FE2A49200A1A1A4 /* SharingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB892FE2A49200A1A1A4 /* SharingTest.swift */; }; + B55AFB902FE2A49200A1A1A4 /* CollaboraTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB7F2FE2A49200A1A1A4 /* CollaboraTestCase.swift */; }; + B55AFB912FE2A49200A1A1A4 /* NCNotificationText.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB832FE2A49200A1A1A4 /* NCNotificationText.swift */; }; + B55AFB922FE2A49200A1A1A4 /* E2EETests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB802FE2A49200A1A1A4 /* E2EETests.swift */; }; + B55AFB932FE2A49200A1A1A4 /* MoveAndCopyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB822FE2A49200A1A1A4 /* MoveAndCopyTests.swift */; }; + B55AFB942FE2A49200A1A1A4 /* AudioUploadTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB7E2FE2A49200A1A1A4 /* AudioUploadTests.swift */; }; + B55AFB952FE2A49200A1A1A4 /* PrivacyPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB852FE2A49200A1A1A4 /* PrivacyPolicyTest.swift */; }; + B55AFB962FE2A49200A1A1A4 /* AssetUploadTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55AFB7D2FE2A49200A1A1A4 /* AssetUploadTest.swift */; }; + CB3666201AF7550816B5CD6A /* NCContextMenuComment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */; }; D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; }; F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */; }; F31165022F9674A1009A1E37 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = F31165012F9674A1009A1E37 /* AppIcon.icon */; }; @@ -321,18 +153,10 @@ F359D8672A7D03420023F405 /* NCUtility+Exif.swift in Sources */ = {isa = PBXBuildFile; fileRef = F359D8662A7D03420023F405 /* NCUtility+Exif.swift */; }; F36C514F2E89393C0097E5F7 /* UIView+BlurVibrancy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */; }; F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */; }; - F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */; }; F36E64FA2B96236C0085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F37208812BAB5979006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; - F36E64FB2B9733F10085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; - F36E64FC2B9733F20085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; - F36E64FD2B9735900085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; - F36E64FE2B9735920085ABB5 /* NCCellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */; }; - F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; - F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; - F37208812BAB5979006B5430 /* TestConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37208742BAB4AB0006B5430 /* TestConstants.swift */; }; F37208A42BAB63EE006B5430 /* QRCodeReader in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A32BAB63EE006B5430 /* QRCodeReader */; }; F37208A62BAB63EE006B5430 /* SwiftRichString in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A52BAB63EE006B5430 /* SwiftRichString */; }; F37208AA2BAB63EE006B5430 /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = F37208A92BAB63EE006B5430 /* MarkdownKit */; }; @@ -350,6 +174,7 @@ F37208C62BAB63F0006B5430 /* LRUCache in Frameworks */ = {isa = PBXBuildFile; productRef = F37208C52BAB63F0006B5430 /* LRUCache */; }; F37208C82BAB63F1006B5430 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = F37208C72BAB63F1006B5430 /* KeychainAccess */; }; F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3754A7C2CF87D600009312E /* SetupPasscodeView.swift */; }; + F376A3742E5CC6030067EE25 /* ContextMenuActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */; }; F389C9F52CEE383300049762 /* SelectAlbumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F389C9F42CEE383300049762 /* SelectAlbumView.swift */; }; F38F71252B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */; }; F39170AD2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39170A82CB8201B006127BC /* FileAutoRenamer+Extensions.swift */; }; @@ -428,7 +253,6 @@ F71070AB2F7E49F200AEE58A /* NCEndToEndSetup.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71070AA2F7E49E100AEE58A /* NCEndToEndSetup.swift */; }; F710D1F52405770F00A6033D /* NCViewerPDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D1F42405770F00A6033D /* NCViewerPDF.swift */; }; F710D2022405826100A6033D /* NCContextMenuViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D2012405826100A6033D /* NCContextMenuViewer.swift */; }; - F710D2022405826100A6033D /* NCViewer+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D2012405826100A6033D /* NCViewer+Menu.swift */; }; F710FC80277B7D2700AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC7F277B7D2700AA9FBF /* RealmSwift */; }; F710FC84277B7D3500AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC83277B7D3500AA9FBF /* RealmSwift */; }; F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC87277B7D3F00AA9FBF /* RealmSwift */; }; @@ -492,15 +316,6 @@ F724377D2C10B92300C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; F72437802C10B92400C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; F72437812C10B92500C7C68D /* NCSharePermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */; }; - F72429372AFE39980040AEF3 /* NCLivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */; }; - F72429382AFE39A80040AEF3 /* NCLivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */; }; - F724377B2C10B83E00C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F724377C2C10B92200C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F724377D2C10B92300C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F724377E2C10B92300C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F724377F2C10B92400C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F72437802C10B92400C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; - F72437812C10B92500C7C68D /* NCPermissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F724377A2C10B83E00C7C68D /* NCPermissions.swift */; }; F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; F7245925289BB59100474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; F7245926289BB59300474787 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */; }; @@ -537,11 +352,6 @@ F72FD3BA297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72FD3B4297ED49A00075D28 /* NCManageDatabase+E2EE.swift */; }; F7327E202B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; F7327E232B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; - F7327E242B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */; }; - F7327E282B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; - F7327E292B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; - F7327E2B2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; - F7327E2C2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */; }; F7327E302B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */; }; F7327E352B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7327E342B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift */; }; F7327E3B2B73B8D600A462C7 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7AC1CAF28AB94490032D99F /* Array+Extension.swift */; }; @@ -558,12 +368,6 @@ F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7381EDE218218C9000B1560 /* NCOffline.storyboard */; }; F7386E482DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */; }; F73BC74F2F23811E003170C2 /* WarningBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DF7B3E2F1A2EE400514020 /* WarningBannerView.swift */; }; - F73ADD1C265546890069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD1B265546890069EA0D /* SwiftEntryKit */; }; - F73ADD2126554F8E0069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD2026554F8E0069EA0D /* SwiftEntryKit */; }; - F73ADD2226554FD10069EA0D /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; }; - F73ADD2426554FE20069EA0D /* SwiftEntryKit in Frameworks */ = {isa = PBXBuildFile; productRef = F73ADD2326554FE20069EA0D /* SwiftEntryKit */; }; - F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F73B42292476764F00A30FD3 /* NCNotification.storyboard */; }; - F73B422C2476764F00A30FD3 /* NCNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73B422A2476764F00A30FD3 /* NCNotification.swift */; }; F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F73CB3B122E072A000AD728E /* NCShareHeaderView.xib */; }; F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F73D11F9253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard */; }; F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73EF7A62B0223900087E6E9 /* NCManageDatabase+Comments.swift */; }; @@ -597,6 +401,7 @@ F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F741C2232B6B9FD600E849BB /* NCMediaSelectTabBar.swift */; }; F74230F32C79B57200CA1ACA /* NCNetworking+Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */; }; F7434B3820E2400600417916 /* NCBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76B3CCD1EAE01BD00921AC9 /* NCBrand.swift */; }; + F743C89E2E5B25A1000173A9 /* UIScene+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */; }; F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F745B252222D88AE00346520 /* NCLoginQRCode.swift */; }; F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */; }; F746EC52273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */; }; @@ -642,8 +447,6 @@ F751247C2C42919C00E63DB8 /* NCPhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F751247A2C42919C00E63DB8 /* NCPhotoCell.swift */; }; F751247E2C42919C00E63DB8 /* NCPhotoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */; }; F752BA052E58C05200616A26 /* Maintenance.swift in Sources */ = {isa = PBXBuildFile; fileRef = F752BA042E58C05200616A26 /* Maintenance.swift */; }; - F75379202AE2AD9400C0250E /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F753791F2AE2AD9400C0250E /* JGProgressHUD */; }; - F75379222AE2ADA100C0250E /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F75379212AE2ADA100C0250E /* JGProgressHUD */; }; F753BA93281FD8020015BFB6 /* EasyTipView in Frameworks */ = {isa = PBXBuildFile; productRef = F753BA92281FD8020015BFB6 /* EasyTipView */; }; F755BD9B20594AC7008C5FBB /* NCService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F755BD9A20594AC7008C5FBB /* NCService.swift */; }; F755CB402B8CB13C00CE27E9 /* NCMediaLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F755CB3F2B8CB13C00CE27E9 /* NCMediaLayout.swift */; }; @@ -732,7 +535,7 @@ F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768820E2C0DD1E7001CF441 /* NCManageE2EEView.swift */; }; F76882292C0DD1E7001CF441 /* NCManageE2EEModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882102C0DD1E7001CF441 /* NCManageE2EEModel.swift */; }; F768822A2C0DD1E7001CF441 /* NCSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882112C0DD1E7001CF441 /* NCSettingsModel.swift */; }; - F768822C2C0DD1E7001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */ = {isa = PBXBuildFile; fileRef = F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */; }; F768822E2C0DD1E7001CF441 /* NCSettingsBundleHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */; }; F76882302C0DD1E7001CF441 /* NCFileNameModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882192C0DD1E7001CF441 /* NCFileNameModel.swift */; }; @@ -742,12 +545,12 @@ F76882342C0DD1E7001CF441 /* NCDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768821E2C0DD1E7001CF441 /* NCDisplayView.swift */; }; F76882352C0DD1E7001CF441 /* NCWebBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882202C0DD1E7001CF441 /* NCWebBrowserView.swift */; }; F76882362C0DD1E7001CF441 /* NCAcknowledgementsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882212C0DD1E7001CF441 /* NCAcknowledgementsView.swift */; }; - F76882372C0DD22F001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; - F76882382C0DD22F001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; - F76882392C0DD230001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; - F768823A2C0DD230001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; - F768823B2C0DD231001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; - F768823C2C0DD231001CF441 /* NCKeychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCKeychain.swift */; }; + F76882372C0DD22F001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F76882382C0DD22F001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F76882392C0DD230001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F768823A2C0DD230001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F768823B2C0DD231001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; + F768823C2C0DD231001CF441 /* NCPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76882132C0DD1E7001CF441 /* NCPreferences.swift */; }; F768823E2C0DD305001CF441 /* LazyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768823D2C0DD304001CF441 /* LazyView.swift */; }; F76882402C0DD30B001CF441 /* ViewOnAppear.swift in Sources */ = {isa = PBXBuildFile; fileRef = F768823F2C0DD30B001CF441 /* ViewOnAppear.swift */; }; F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F769453B22E9CFFF000A798A /* NCShareUserCell.xib */; }; @@ -823,9 +626,6 @@ F7817CF829801A3500FFBC65 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7817CF729801A3500FFBC65 /* Data+Extension.swift */; }; F7817CFB29801A3500FFBC65 /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7817CF729801A3500FFBC65 /* Data+Extension.swift */; }; F7817CFF29802D1A00FFBC65 /* NCPushNotificationEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F72D1005210B6882009C96B7 /* NCPushNotificationEncryption.m */; }; - F7817D0029802D3D00FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; - F7817D0129802D5F00FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; - F7817D0229802D7700FFBC65 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; }; F78295311F962EFA00A572F5 /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; }; F782FDC424E6933900666099 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; }; F78302F728B4C3C900B84583 /* NCManageDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB51ED5A87C00B7EAD4 /* NCManageDatabase.swift */; }; @@ -1008,38 +808,31 @@ F7C9B9202B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9B91C2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift */; }; F7C9B9232B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9B91C2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift */; }; F7CADEFD2EA159210057849E /* NCMetadataTranfersSuccess.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CADEFA2EA1591D0057849E /* NCMetadataTranfersSuccess.swift */; }; - F7CA212D25F1333300826ABB /* - ces */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; - F7CA212D25F1333300826ABB /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CA212B25F1333200826ABB /* NCAccountRequest.swift */; }; - F7CA212E25F1333300826ABB /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */; }; - F7CB689A2541676B0050EC94 /* NCMore.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7CB68992541676B0050EC94 /* NCMore.storyboard */; }; + F7CAFE182F164B9500DB35A5 /* NCCollectionViewCommon+CellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE172F164B9200DB35A5 /* NCCollectionViewCommon+CellDelegate.swift */; }; + F7CAFE192F168F6000DB35A5 /* NCDebouncer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A3DB8F2DDE238C008F7EC8 /* NCDebouncer.swift */; }; + F7CAFE1B2F16AA8D00DB35A5 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1A2F16AA8600DB35A5 /* main.swift */; }; + F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE1E2F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE1F2F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE202F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE212F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE222F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CAFE232F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */; }; + F7CB77642F5843E500DE649A /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CB77632F5843D700DE649A /* UIFont+Extension.swift */; }; + F7CB77652F58463E00DE649A /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CB77632F5843D700DE649A /* UIFont+Extension.swift */; }; F7CBC1232BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */; }; F7CBC1242BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */; }; F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */; }; F7CBC1262BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */; }; F7CCAB512ECF316700F8E68B /* NCCollectionViewCommon+SyncMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CCAB502ECF315F00F8E68B /* NCCollectionViewCommon+SyncMetadata.swift */; }; - F7CBC31C24F78E79004D3812 /* NCSortMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CBC31B24F78E79004D3812 /* NCSortMenu.swift */; }; F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7CEE5FE2BA9A5C9003EFD89 /* NCTrashGridCell.xib */; }; F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */; }; - F7CF067B2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; - F7CF067C2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; - F7CF067D2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; - F7CF067E2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; - F7CF067F2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; F7CF06802E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; F7CF06832E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06852E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06862E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06872E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; F7CF06882E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */; }; - F7CF06812E0FF3990063AD04 /* NCAppStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */; }; - F7CF06832E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06842E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06852E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06862E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06872E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06882E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; - F7CF06892E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */; }; F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */; }; F7D1C4AC2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D1C4AB2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift */; }; F7D368DF2DAFE19E0037E7C6 /* NCActivityNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7D368DE2DAFE19E0037E7C6 /* NCActivityNavigationController.swift */; }; @@ -1147,15 +940,13 @@ F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7EDE513262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib */; }; F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7EDE51A262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib */; }; F7EE66AD2A20B226009AE765 /* UILabel+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EE66AC2A20B226009AE765 /* UILabel+Extension.swift */; }; + F7EF2AEB2E43157B0081B2C9 /* NCNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */; }; + F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */; }; F7EFA47825ADBA500083159A /* NCViewerProviderContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EFA47725ADBA500083159A /* NCViewerProviderContextMenu.swift */; }; F7F1FB9D2E27CE7200C79E20 /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; }; F7F1FB9E2E27CE7200C79E20 /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; }; F7F1FBA82E27D13700C79E20 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7F1FBA72E27D13700C79E20 /* Queuer */; }; F7F1FBB02E27D3A800C79E20 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7F1FBAF2E27D3A800C79E20 /* Queuer */; }; - F7EFC0CD256BF8DD00461AAD /* NCUserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EFC0CC256BF8DD00461AAD /* NCUserStatus.swift */; }; - F7F3E58B2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; - F7F3E58C2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; - F7F3E58D2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */; }; F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F0FD27ECDBDB008676F9 /* Inconsolata-SemiBold.ttf */; }; F7F4F10627ECDBDB008676F9 /* Inconsolata-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F0FE27ECDBDB008676F9 /* Inconsolata-Medium.ttf */; }; @@ -1166,7 +957,6 @@ F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F10327ECDBDB008676F9 /* Inconsolata-Light.ttf */; }; F7F4F10C27ECDBDB008676F9 /* Inconsolata-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7F4F10427ECDBDB008676F9 /* Inconsolata-Regular.ttf */; }; F7F563042E15762B00631A11 /* MigrationMultiDomains.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */; }; - F7F4F11227ECDC52008676F9 /* UIFont+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F4F11127ECDC52008676F9 /* UIFont+Extension.swift */; }; F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = F7F623B42A5EF4D30022D3D4 /* Gzip */; }; F7F623B72A5EFA0C0022D3D4 /* Gzip in Frameworks */ = {isa = PBXBuildFile; productRef = F7F623B62A5EFA0C0022D3D4 /* Gzip */; }; F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; }; @@ -1185,7 +975,6 @@ F7FDFF6F2E437E55000D7688 /* NCAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FDFF592E437E55000D7688 /* NCAccount.swift */; }; F7FDFF702E437E55000D7688 /* NCAccountRequest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7FDFF512E437E55000D7688 /* NCAccountRequest.storyboard */; }; F7FDFF722E437E55000D7688 /* NCAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FDFF522E437E55000D7688 /* NCAccountRequest.swift */; }; - F7FAFD3A28BFA948000777FE /* NCNotification+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */; }; F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */; }; F7FFFCA02FB300440015441E /* NCAssistantSharedTextStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */; }; F7FFFCA22FB300600015441E /* NCAssistantSharedTextStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */; }; @@ -1390,11 +1179,8 @@ 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Notification Service Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 2C33C48123E2C475005F963B /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; 2C33C48A23E2CC26005F963B /* Notification_Service_Extension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Notification_Service_Extension-Bridging-Header.h"; sourceTree = ""; }; - 3704EB2923D5A58400455C5B /* NCMenu.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCMenu.storyboard; sourceTree = ""; }; - 370D26AE248A3D7A00121797 /* NCCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellProtocol.swift; sourceTree = ""; }; - 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenu.swift; sourceTree = ""; }; - 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = ""; }; - 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = ""; }; + 370D26AE248A3D7A00121797 /* NCCellMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCellMain.swift; sourceTree = ""; }; + 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuComment.swift; sourceTree = ""; }; AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestBackend.swift; sourceTree = ""; }; AA3C85EA2D36BBF400F74F12 /* OCSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCSResponse.swift; sourceTree = ""; }; AA3C85ED2D36BCCB00F74F12 /* SharesResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharesResponse.swift; sourceTree = ""; }; @@ -1516,83 +1302,35 @@ AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = ""; }; AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = ""; }; AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = ""; }; - B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCAccountRequest.storyboard; sourceTree = ""; }; - B560B9512EF5597A00E55904 /* NCAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountRequest.swift; sourceTree = ""; }; - B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCShareAccounts.storyboard; sourceTree = ""; }; - B560B9532EF5597A00E55904 /* NCShareAccounts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareAccounts.swift; sourceTree = ""; }; - B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; - B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; - B560B9582EF5597A00E55904 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; - B5BEBD272E93AD540002C9E5 /* File_Provider_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = File_Provider_Extension.entitlements; sourceTree = ""; }; - B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = File_Provider_Extension.plist; sourceTree = ""; }; - B5BEBD292E93AD540002C9E5 /* iOSClient.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSClient.entitlements; sourceTree = ""; }; - B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = iOSClient.plist; sourceTree = ""; }; - B5BEBD2B2E93AD540002C9E5 /* Notification_Service_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Notification_Service_Extension.entitlements; sourceTree = ""; }; - B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Notification_Service_Extension.plist; sourceTree = ""; }; - B5BEBD2D2E93AD540002C9E5 /* Share.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Share.entitlements; sourceTree = ""; }; - B5BEBD2E2E93AD540002C9E5 /* Share.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Share.plist; sourceTree = ""; }; - B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseXCTestCase.swift; sourceTree = ""; }; - B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; - B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationXCTestCase.swift; sourceTree = ""; }; - B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesIntegrationTests.swift; sourceTree = ""; }; - B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginIntegrationTests.swift; sourceTree = ""; }; - B5BEBD5E2E93AE4B0002C9E5 /* AssetUploadTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; - B5BEBD5F2E93AE4B0002C9E5 /* AudioUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; - B5BEBD602E93AE4B0002C9E5 /* CollaboraTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; - B5BEBD612E93AE4B0002C9E5 /* E2EETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; - B5BEBD622E93AE4B0002C9E5 /* MoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; - B5BEBD632E93AE4B0002C9E5 /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; - B5BEBD642E93AE4B0002C9E5 /* NCNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; - B5BEBD652E93AE4B0002C9E5 /* OnboardingTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; - B5BEBD662E93AE4B0002C9E5 /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; - B5BEBD672E93AE4B0002C9E5 /* RenameFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; - B5BEBD682E93AE4B0002C9E5 /* ScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; - B5BEBD692E93AE4B0002C9E5 /* SettingsTestCases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; - B5BEBD6A2E93AE4B0002C9E5 /* SharingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; - B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; - B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; - B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; - B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; - B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; - B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEmptyDataSet.swift; sourceTree = ""; }; - B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCEmptyView.xib; sourceTree = ""; }; - B5BEBD9F2E93AF010002C9E5 /* AdjustHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; - B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; - B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; - B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginWeb.swift; sourceTree = ""; }; - B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSelectableNavigationView.swift; sourceTree = ""; }; - B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSectionHeaderMenu.swift; sourceTree = ""; }; - B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCSectionHeaderMenu.xib; sourceTree = ""; }; - B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadDocuments.storyboard; sourceTree = ""; }; - B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadDocuments.swift; sourceTree = ""; }; - B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCCreateFormUploadVoiceNote.storyboard; sourceTree = ""; }; - B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadVoiceNote.swift; sourceTree = ""; }; - B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextTableViewCell.swift; sourceTree = ""; }; - B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TextTableViewCell.xib; sourceTree = ""; }; - B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCMediaCommandView.xib; sourceTree = ""; }; - B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FolderPathCustomCell.swift; sourceTree = ""; }; - B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FolderPathCustomCell.xib; sourceTree = ""; }; - B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateDocumentCustomTextField.swift; sourceTree = ""; }; - B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCCreateDocumentCustomTextField.xib; sourceTree = ""; }; - B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadScanDocument.swift; sourceTree = ""; }; - B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileNameInputTextField.swift; sourceTree = ""; }; - B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FileNameInputTextField.xib; sourceTree = ""; }; - B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JPGImageSaveSwitchView.swift; sourceTree = ""; }; - B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = JPGImageSaveSwitchView.xib; sourceTree = ""; }; - B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordInputField.swift; sourceTree = ""; }; - B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PasswordInputField.xib; sourceTree = ""; }; - B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PdfWithOcrSwitchView.swift; sourceTree = ""; }; - B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PdfWithOcrSwitchView.xib; sourceTree = ""; }; - B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PdfWithoutOcrSwitchView.swift; sourceTree = ""; }; - B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PdfWithoutOcrSwitchView.xib; sourceTree = ""; }; - B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PNGImageSaveSwitchView.swift; sourceTree = ""; }; - B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PNGImageSaveSwitchView.xib; sourceTree = ""; }; - B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanDocumentPathView.swift; sourceTree = ""; }; - B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ScanDocumentPathView.xib; sourceTree = ""; }; - B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetPDFPasswordSwitchView.swift; sourceTree = ""; }; - B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SetPDFPasswordSwitchView.xib; sourceTree = ""; }; - B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFileWithOcrSwitchView.swift; sourceTree = ""; }; - B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TextFileWithOcrSwitchView.xib; sourceTree = ""; }; + B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuPlayerTracks.swift; sourceTree = ""; }; + B55AFB5D2FE29BAC00A1A1A4 /* AppUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUtility.swift; sourceTree = ""; }; + B55AFB5F2FE2A04C00A1A1A4 /* MoEngageAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoEngageAnalytics.swift; sourceTree = ""; }; + B55AFB612FE2A04C00A1A1A4 /* AnalyticsHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsHelper.swift; sourceTree = ""; }; + B55AFB622FE2A04C00A1A1A4 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; + B55AFB642FE2A04C00A1A1A4 /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; + B55AFB662FE2A04C00A1A1A4 /* NCEmptyDataSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEmptyDataSet.swift; sourceTree = ""; }; + B55AFB672FE2A04C00A1A1A4 /* NCEmptyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCEmptyView.xib; sourceTree = ""; }; + B55AFB692FE2A04C00A1A1A4 /* AdjustHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdjustHelper.h; sourceTree = ""; }; + B55AFB6A2FE2A04C00A1A1A4 /* AdjustHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdjustHelper.m; sourceTree = ""; }; + B55AFB6B2FE2A04C00A1A1A4 /* TealiumHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TealiumHelper.swift; sourceTree = ""; }; + B55AFB752FE2A0BD00A1A1A4 /* NCLoginWeb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginWeb.swift; sourceTree = ""; }; + B55AFB772FE2A47500A1A1A4 /* BaseIntegrationXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseIntegrationXCTestCase.swift; sourceTree = ""; }; + B55AFB782FE2A47500A1A1A4 /* FilesIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesIntegrationTests.swift; sourceTree = ""; }; + B55AFB792FE2A47500A1A1A4 /* LoginIntegrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginIntegrationTests.swift; sourceTree = ""; }; + B55AFB7D2FE2A49200A1A1A4 /* AssetUploadTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetUploadTest.swift; sourceTree = ""; }; + B55AFB7E2FE2A49200A1A1A4 /* AudioUploadTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioUploadTests.swift; sourceTree = ""; }; + B55AFB7F2FE2A49200A1A1A4 /* CollaboraTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollaboraTestCase.swift; sourceTree = ""; }; + B55AFB802FE2A49200A1A1A4 /* E2EETests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = E2EETests.swift; sourceTree = ""; }; + B55AFB812FE2A49200A1A1A4 /* MoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoreTests.swift; sourceTree = ""; }; + B55AFB822FE2A49200A1A1A4 /* MoveAndCopyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveAndCopyTests.swift; sourceTree = ""; }; + B55AFB832FE2A49200A1A1A4 /* NCNotificationText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotificationText.swift; sourceTree = ""; }; + B55AFB842FE2A49200A1A1A4 /* OnboardingTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTestCase.swift; sourceTree = ""; }; + B55AFB852FE2A49200A1A1A4 /* PrivacyPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyPolicyTest.swift; sourceTree = ""; }; + B55AFB862FE2A49200A1A1A4 /* RenameFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameFileTests.swift; sourceTree = ""; }; + B55AFB872FE2A49200A1A1A4 /* ScanTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanTests.swift; sourceTree = ""; }; + B55AFB882FE2A49200A1A1A4 /* SettingsTestCases.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTestCases.swift; sourceTree = ""; }; + B55AFB892FE2A49200A1A1A4 /* SharingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingTest.swift; sourceTree = ""; }; + BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCContextMenuProfile.swift; sourceTree = ""; }; C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityTableViewCell.swift; sourceTree = ""; }; @@ -1617,9 +1355,11 @@ F34E1ADA2ECC842200FA10C3 /* NCStatusMessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCStatusMessageModel.swift; sourceTree = ""; }; F351D1A52D0AF24A00930F94 /* PHAssetCollection+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHAssetCollection+Extension.swift"; sourceTree = ""; }; F359D8662A7D03420023F405 /* NCUtility+Exif.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCUtility+Exif.swift"; sourceTree = ""; }; - F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+SelectTabBar.swift"; sourceTree = ""; }; + F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+BlurVibrancy.swift"; sourceTree = ""; }; + F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+SelectTabBarDelegate.swift"; sourceTree = ""; }; F37208742BAB4AB0006B5430 /* TestConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; F3754A7C2CF87D600009312E /* SetupPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupPasscodeView.swift; sourceTree = ""; }; + F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMenuActions.swift; sourceTree = ""; }; F389C9F42CEE383300049762 /* SelectAlbumView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectAlbumView.swift; sourceTree = ""; }; F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCollectionViewCommonSelectTabBar.swift; sourceTree = ""; }; F39170A82CB8201B006127BC /* FileAutoRenamer+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileAutoRenamer+Extensions.swift"; sourceTree = ""; }; @@ -1640,6 +1380,7 @@ F3DDFE222F1FB4C300A784C8 /* NCAssistantChatModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAssistantChatModel.swift; sourceTree = ""; }; F3E173AF2C9AF637006D177A /* ScreenAwakeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenAwakeManager.swift; sourceTree = ""; }; F3E173BF2C9B1067006D177A /* AwakeMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AwakeMode.swift; sourceTree = ""; }; + F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMetadataPermissions.swift; sourceTree = ""; }; F700222B1EC479840080073F /* Custom.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Custom.xcassets; sourceTree = ""; }; F700510022DF63AC003A3356 /* NCShare.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCShare.storyboard; sourceTree = ""; }; F700510422DF6A89003A3356 /* NCShare.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShare.swift; sourceTree = ""; }; @@ -1678,7 +1419,6 @@ F710D2012405826100A6033D /* NCContextMenuViewer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCContextMenuViewer.swift; sourceTree = ""; }; F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+AppRefresh.swift"; sourceTree = ""; }; F7110AE32F9774130095AA5C /* AppDelegate+AppProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+AppProcessing.swift"; sourceTree = ""; }; - F710D2012405826100A6033D /* NCViewer+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCViewer+Menu.swift"; sourceTree = ""; }; F711A4DB2AF92CAD00095DD8 /* NCUtility+Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCUtility+Date.swift"; sourceTree = ""; }; F7132C6B2D085AD200B42D6A /* NCTermOfServiceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceModel.swift; sourceTree = ""; }; F7132C6C2D085AD200B42D6A /* NCTermOfServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceView.swift; sourceTree = ""; }; @@ -1698,6 +1438,7 @@ F717402C24F699A5000C87D5 /* NCFavorite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFavorite.swift; sourceTree = ""; }; F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerMediaDetailView.swift; sourceTree = ""; }; F718E2572DF2D5C3004038AF /* NCBackgroundLocationUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCBackgroundLocationUploadManager.swift; sourceTree = ""; }; + F71916102E2901E800E13E96 /* NCNetworking+Upload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Upload.swift"; sourceTree = ""; }; F719D9DF288D37A300762E33 /* NCColorPicker.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCColorPicker.storyboard; sourceTree = ""; }; F719D9E1288D396100762E33 /* NCColorPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCColorPicker.swift; sourceTree = ""; }; F71CFA662F2A07C6007A3AE9 /* NCMedia+Netwoking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+Netwoking.swift"; sourceTree = ""; }; @@ -1710,7 +1451,7 @@ F723985B253C95CE00257F49 /* NCViewerRichdocument.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichdocument.storyboard; sourceTree = ""; }; F723B3DC22FC6D1C00301EFE /* NCShareCommentsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareCommentsCell.xib; sourceTree = ""; }; F72408322B8A27C900F128E2 /* NCMedia+Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+Command.swift"; sourceTree = ""; }; - F724377A2C10B83E00C7C68D /* NCPermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCPermissions.swift; sourceTree = ""; }; + F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSharePermissions.swift; sourceTree = ""; }; F7245923289BB50B00474787 /* ThreadSafeDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThreadSafeDictionary.swift; sourceTree = ""; }; F72685E827C78E490019EF5E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; F72944F12A84246400246839 /* NCEndToEndMetadataV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEndToEndMetadataV2.swift; sourceTree = ""; }; @@ -1733,7 +1474,6 @@ F7320934201B812F008A0888 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; F732093B201B81E4008A0888 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; F7327E1F2B73A42F00A462C7 /* NCNetworking+Download.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Download.swift"; sourceTree = ""; }; - F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Upload.swift"; sourceTree = ""; }; F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+WebDAV.swift"; sourceTree = ""; }; F7327E342B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+LivePhoto.swift"; sourceTree = ""; }; F732D23227CF8AED000B0F1B /* NCPlayerToolBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCPlayerToolBar.xib; sourceTree = ""; }; @@ -1747,8 +1487,6 @@ F7381EDA218218C9000B1560 /* NCOffline.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCOffline.swift; sourceTree = ""; }; F7381EDE218218C9000B1560 /* NCOffline.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCOffline.storyboard; sourceTree = ""; }; F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAppVersionManager.swift; sourceTree = ""; }; - F73B42292476764F00A30FD3 /* NCNotification.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = NCNotification.storyboard; path = Notification/NCNotification.storyboard; sourceTree = ""; }; - F73B422A2476764F00A30FD3 /* NCNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NCNotification.swift; path = Notification/NCNotification.swift; sourceTree = ""; }; F73CB3B122E072A000AD728E /* NCShareHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCShareHeaderView.xib; sourceTree = ""; }; F73CB5771ED46807005F2A5A /* NCBridgeSwift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCBridgeSwift.h; sourceTree = ""; }; F73D11F9253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerDirectEditing.storyboard; sourceTree = ""; }; @@ -1761,6 +1499,7 @@ F7411C532D7B26C600F57358 /* NCNetworking+ServerError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+ServerError.swift"; sourceTree = ""; }; F741C2232B6B9FD600E849BB /* NCMediaSelectTabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCMediaSelectTabBar.swift; sourceTree = ""; }; F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Task.swift"; sourceTree = ""; }; + F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScene+Extension.swift"; sourceTree = ""; }; F745B252222D88AE00346520 /* NCLoginQRCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCLoginQRCode.swift; sourceTree = ""; }; F747EB0C2C4AC1FF00F959A8 /* NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+CollectionViewDelegateFlowLayout.swift"; sourceTree = ""; }; F749B649297B0CBB00087535 /* NCManageDatabase+Share.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Share.swift"; sourceTree = ""; }; @@ -1776,6 +1515,7 @@ F7501C312212E57400FB1415 /* NCMedia.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCMedia.swift; sourceTree = ""; }; F751247A2C42919C00E63DB8 /* NCPhotoCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCPhotoCell.swift; sourceTree = ""; }; F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCPhotoCell.xib; sourceTree = ""; }; + F752BA042E58C05200616A26 /* Maintenance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Maintenance.swift; sourceTree = ""; }; F753701822723D620041C76C /* gl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gl; path = gl.lproj/Localizable.strings; sourceTree = ""; }; F753701922723E0D0041C76C /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = ""; }; F753701A22723EC80041C76C /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; @@ -1822,7 +1562,7 @@ F768820E2C0DD1E7001CF441 /* NCManageE2EEView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCManageE2EEView.swift; sourceTree = ""; }; F76882102C0DD1E7001CF441 /* NCManageE2EEModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCManageE2EEModel.swift; sourceTree = ""; }; F76882112C0DD1E7001CF441 /* NCSettingsModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSettingsModel.swift; sourceTree = ""; }; - F76882132C0DD1E7001CF441 /* NCKeychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCKeychain.swift; sourceTree = ""; }; + F76882132C0DD1E7001CF441 /* NCPreferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCPreferences.swift; sourceTree = ""; }; F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Acknowledgements.rtf; sourceTree = ""; }; F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSettingsBundleHelper.swift; sourceTree = ""; }; F76882192C0DD1E7001CF441 /* NCFileNameModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCFileNameModel.swift; sourceTree = ""; }; @@ -1890,6 +1630,7 @@ F77C3F5A2D9BF8B500F3C471 /* UITabBar+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITabBar+Extension.swift"; sourceTree = ""; }; F77C97382953131000FDDD09 /* NCCameraRoll.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCCameraRoll.swift; sourceTree = ""; }; F77DD6A72C5CC093009448FB /* NCSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSession.swift; sourceTree = ""; }; + F77E8C1E2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+LivePhoto.swift"; sourceTree = ""; }; F77ED59028C9CE9D00E24ED0 /* ToolbarData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarData.swift; sourceTree = ""; }; F77ED59228C9CEA000E24ED0 /* ToolbarWidgetProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarWidgetProvider.swift; sourceTree = ""; }; F77ED59428C9CEA300E24ED0 /* ToolbarWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolbarWidgetView.swift; sourceTree = ""; }; @@ -2081,9 +1822,6 @@ F7CAFE1A2F16AA8600DB35A5 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; F7CAFE1C2F17A34F00DB35A5 /* NCNetworking+Actor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Actor.swift"; sourceTree = ""; }; F7CB77632F5843D700DE649A /* UIFont+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; - F7CA212B25F1333200826ABB /* NCAccountRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCAccountRequest.swift; sourceTree = ""; }; - F7CA212C25F1333200826ABB /* NCAccountRequest.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCAccountRequest.storyboard; sourceTree = ""; }; - F7CB68992541676B0050EC94 /* NCMore.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCMore.storyboard; sourceTree = ""; }; F7CBC1212BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionFirstHeaderEmptyData.xib; sourceTree = ""; }; F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCSectionFirstHeaderEmptyData.swift; sourceTree = ""; }; F7CC04E61F5AD50D00378CEF /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; @@ -2094,7 +1832,6 @@ F7CEE5FF2BA9A5C9003EFD89 /* NCTrashGridCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCTrashGridCell.swift; sourceTree = ""; }; F7CF067A2E0FF38F0063AD04 /* NCAppStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAppStateManager.swift; sourceTree = ""; }; F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+CreateMetadata.swift"; sourceTree = ""; }; - F7CF06822E11273F0063AD04 /* NCManageDatabase+Metadata+Create.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Metadata+Create.swift"; sourceTree = ""; }; F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichWorkspace.storyboard; sourceTree = ""; }; F7D1C4AB2C9484FD00EC6D44 /* NCMedia+CollectionViewDataSourcePrefetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCMedia+CollectionViewDataSourcePrefetching.swift"; sourceTree = ""; }; F7D368DE2DAFE19E0037E7C6 /* NCActivityNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityNavigationController.swift; sourceTree = ""; }; @@ -2163,6 +1900,8 @@ F7EDE513262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "NCSelectCommandViewSelect+CreateFolder.xib"; sourceTree = ""; }; F7EDE51A262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSelectCommandViewCopyMove.xib; sourceTree = ""; }; F7EE66AC2A20B226009AE765 /* UILabel+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Extension.swift"; sourceTree = ""; }; + F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCNotification.storyboard; sourceTree = ""; }; + F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCNotification.swift; sourceTree = ""; }; F7EFA47725ADBA500083159A /* NCViewerProviderContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerProviderContextMenu.swift; sourceTree = ""; }; F7F3E58A2D3BB65000A32B14 /* NCNetworking+Recommendations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+Recommendations.swift"; sourceTree = ""; }; F7F4F0FD27ECDBDB008676F9 /* Inconsolata-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-SemiBold.ttf"; sourceTree = ""; }; @@ -2174,7 +1913,6 @@ F7F4F10327ECDBDB008676F9 /* Inconsolata-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-Light.ttf"; sourceTree = ""; }; F7F4F10427ECDBDB008676F9 /* Inconsolata-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Inconsolata-Regular.ttf"; sourceTree = ""; }; F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationMultiDomains.swift; sourceTree = ""; }; - F7F4F11127ECDC52008676F9 /* UIFont+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIFont+Extension.swift"; sourceTree = ""; }; F7F67BB81A24D27800EE80DA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCEndToEndMetadata.swift; sourceTree = ""; }; F7F9D1BA25397CE000D9BFF5 /* NCViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewer.swift; sourceTree = ""; }; @@ -2189,7 +1927,6 @@ F7FDFF562E437E55000D7688 /* NCAccountSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsModel.swift; sourceTree = ""; }; F7FDFF572E437E55000D7688 /* NCAccountSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccountSettingsView.swift; sourceTree = ""; }; F7FDFF592E437E55000D7688 /* NCAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAccount.swift; sourceTree = ""; }; - F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCNotification+Menu.swift"; sourceTree = ""; }; F7FF2CB02842159500EBB7A1 /* NCSectionHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCSectionHeader.xib; sourceTree = ""; }; F7FFFC9D2FB300440015441E /* NCAssistantSharedTextStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCAssistantSharedTextStore.swift; sourceTree = ""; }; F7FFFCA32FB3088D0015441E /* NCShareExtension+Assistant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+Assistant.swift"; sourceTree = ""; }; @@ -2205,6 +1942,7 @@ buildActionMask = 2147483647; files = ( F33EE6ED2BF4C03800CA1A51 /* NIOSSL in Frameworks */, + F7F1FBB02E27D3A800C79E20 /* Queuer in Frameworks */, F72AD71128C24BBB006CB92D /* NextcloudKit in Frameworks */, F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */, F760DE0F2AE66EE60027D78A /* KeychainAccess in Frameworks */, @@ -2258,8 +1996,6 @@ buildActionMask = 2147483647; files = ( F7490E8B29882CE4009DCE94 /* NextcloudKit in Frameworks */, - F7490E8929882CC8009DCE94 /* SwiftEntryKit in Frameworks */, - F33EE6EB2BF4C03200CA1A51 /* NIOSSL in Frameworks */, F7490E7229882BB4009DCE94 /* RealmSwift in Frameworks */, F71221802F51AF9F00ACEB08 /* LucidBanner in Frameworks */, F760DE0D2AE66EDF0027D78A /* KeychainAccess in Frameworks */, @@ -2337,7 +2073,6 @@ F7A1050E29E587AF00FFD92B /* TagListView in Frameworks */, F76DA969277B77EA0082465B /* DropDown in Frameworks */, F7F623B52A5EF4D30022D3D4 /* Gzip in Frameworks */, - F75EAED826D2552E00F4320E /* MarqueeLabel in Frameworks */, F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */, F76B649E2ADFFDEC00014640 /* LRUCache in Frameworks */, ); @@ -2356,6 +2091,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F7F1FBA82E27D13700C79E20 /* Queuer in Frameworks */, F7A8D72828F17728008BBE1C /* RealmSwift in Frameworks */, F7A8D72428F1771B008BBE1C /* NextcloudKit in Frameworks */, F33EE6E52BF4C02000CA1A51 /* NIOSSL in Frameworks */, @@ -2378,88 +2114,31 @@ 371B5A2F23D0B04B00FAFAE9 /* Menu */ = { isa = PBXGroup; children = ( - 3704EB2923D5A58400455C5B /* NCMenu.storyboard */, - 371B5A2D23D0B04500FAFAE9 /* NCMenu.swift */, - AF68326927BE65A90010BF0B /* NCMenuAction.swift */, - F7FAFD3928BFA947000777FE /* NCNotification+Menu.swift */, - AF935066276B84E700BD078F /* NCMenu+FloatingPanel.swift */, - 3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */, - 8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */, - F77A697C250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift */, - F75D19E225EFE09000D74598 /* NCTrash+Menu.swift */, - AF93471127E2341B002537EE /* NCShare+Menu.swift */, - F710D2012405826100A6033D /* NCViewer+Menu.swift */, - F78C6FDD296D677300C952C3 /* NCContextMenu.swift */, - F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */, + F376A3732E5CC5FF0067EE25 /* ContextMenuActions.swift */, + 8932E90EC4278026D86CCCC9 /* NCContextMenuComment.swift */, + F78C6FDD296D677300C952C3 /* NCContextMenuMain.swift */, + F72EC7252F45C90600A2135C /* NCContextMenuNavigation.swift */, + F7FAFD3928BFA947000777FE /* NCContextMenuNotification.swift */, + B4C7A5B36D1ED178FB6B76CB /* NCContextMenuPlayerTracks.swift */, + F72EC7272F45FF0600A2135C /* NCContextMenuPlus.swift */, + BB7697C94BA14450A0867940 /* NCContextMenuProfile.swift */, + AF93471127E2341B002537EE /* NCContextMenuShare.swift */, + F75D19E225EFE09000D74598 /* NCContextMenuTrash.swift */, + F710D2012405826100A6033D /* NCContextMenuViewer.swift */, ); path = Menu; sourceTree = ""; }; - 566EB7E92B3D7B5F00FB7CAD /* NMC Views */ = { - isa = PBXGroup; - children = ( - 566EB7F32B3D7B5F00FB7CAD /* FileNameInputTextField.swift */, - 566EB7F62B3D7B5F00FB7CAD /* FileNameInputTextField.xib */, - 566EB7EE2B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.swift */, - 566EB7F02B3D7B5F00FB7CAD /* JPGImageSaveSwitchView.xib */, - 566EB7EA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.swift */, - 566EB7FA2B3D7B5F00FB7CAD /* PNGImageSaveSwitchView.xib */, - 566EB7F12B3D7B5F00FB7CAD /* PasswordInputField.swift */, - 566EB7F92B3D7B5F00FB7CAD /* PasswordInputField.xib */, - 566EB7F42B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift */, - 566EB7F52B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.xib */, - 566EB7F72B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.swift */, - 566EB7FB2B3D7B5F00FB7CAD /* PdfWithoutOcrSwitchView.xib */, - 566EB7F22B3D7B5F00FB7CAD /* ScanDocumentPathView.swift */, - 566EB7EB2B3D7B5F00FB7CAD /* ScanDocumentPathView.xib */, - 566EB7EC2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.swift */, - 566EB7ED2B3D7B5F00FB7CAD /* SetPDFPasswordSwitchView.xib */, - 566EB7F82B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.swift */, - 566EB7EF2B3D7B5F00FB7CAD /* TextFileWithOcrSwitchView.xib */, - ); - path = "NMC Views"; - sourceTree = ""; - }; - 566EB8122B3D861400FB7CAD /* NMC Custom Views */ = { - isa = PBXGroup; - children = ( - 566EB8132B3D861400FB7CAD /* NCCreateDocumentCustomTextField.xib */, - 566EB8142B3D861500FB7CAD /* NCCreateDocumentCustomTextField.swift */, - 566EB8152B3D861500FB7CAD /* FolderPathCustomCell.xib */, - 566EB8162B3D861500FB7CAD /* FolderPathCustomCell.swift */, - ); - path = "NMC Custom Views"; - sourceTree = ""; - }; - 566FCF562B3ECD3400168DEA /* Helper */ = { - isa = PBXGroup; - children = ( - 566FCF572B3ECD3400168DEA /* TealiumHelper.swift */, - 566FCF582B3ECD3400168DEA /* AdjustHelper.m */, - 566FCF592B3ECD3400168DEA /* AdjustHelper.h */, - ); - path = Helper; - sourceTree = ""; - } - 56A32E6C2CE4B75C0020EFF5 /* MoEngage */ = { + AA3C85E92D36BBDE00F74F12 /* UITestBackend */ = { isa = PBXGroup; children = ( - 56A32E6B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift */, + AA3C85EC2D36BC8400F74F12 /* Responses */, + AA3C85E72D36B08C00F74F12 /* UITestBackend.swift */, ); - path = MoEngage; - sourceTree = ""; - }; - 56A32E6F2CE4B75C0020EFF5 /* Analytics */ = { - isa = PBXGroup; - children = ( - 56A32E6C2CE4B75C0020EFF5 /* MoEngage */, - 56A32E6D2CE4B75C0020EFF5 /* AnalyticsHelper.swift */, - 56A32E6E2CE4B75C0020EFF5 /* AnalyticsService.swift */, - ); - path = Analytics; + path = UITestBackend; sourceTree = ""; }; - AA3C85EC2D36BC8400F74F12 /* Responses */ = { + AA3C85EC2D36BC8400F74F12 /* Responses */ = { isa = PBXGroup; children = ( AAA7BC2D2D3E39EC008F1A22 /* CapabilitiesResponse.swift */, @@ -2474,22 +2153,21 @@ AA52EB442D42AC500089C348 /* NextcloudUnitTests */ = { isa = PBXGroup; children = ( + B55AFB7D2FE2A49200A1A1A4 /* AssetUploadTest.swift */, + B55AFB7E2FE2A49200A1A1A4 /* AudioUploadTests.swift */, + B55AFB7F2FE2A49200A1A1A4 /* CollaboraTestCase.swift */, + B55AFB802FE2A49200A1A1A4 /* E2EETests.swift */, + B55AFB812FE2A49200A1A1A4 /* MoreTests.swift */, + B55AFB822FE2A49200A1A1A4 /* MoveAndCopyTests.swift */, + B55AFB832FE2A49200A1A1A4 /* NCNotificationText.swift */, + B55AFB842FE2A49200A1A1A4 /* OnboardingTestCase.swift */, + B55AFB852FE2A49200A1A1A4 /* PrivacyPolicyTest.swift */, + B55AFB862FE2A49200A1A1A4 /* RenameFileTests.swift */, + B55AFB872FE2A49200A1A1A4 /* ScanTests.swift */, + B55AFB882FE2A49200A1A1A4 /* SettingsTestCases.swift */, + B55AFB892FE2A49200A1A1A4 /* SharingTest.swift */, F34BDB3B2F574A58007A222C /* BidiSafeFilenameTests.swift */, AA52EB452D42AC5A0089C348 /* Placeholder.swift */, - 566EB7E52B3D7AE900FB7CAD /* ScanTests.swift */, - 566EB7C52B3D59B900FB7CAD /* MoveAndCopyTests.swift */, - 566EB7C72B3D6FAB00FB7CAD /* SharingTest.swift */, - 566EB80E2B3D833000FB7CAD /* AudioUploadTests.swift */, - 566EB8102B3D85DE00FB7CAD /* CollaboraTestCase.swift */, - 566EB81B2B3D889D00FB7CAD /* E2EETests.swift */, - 566EB81D2B3D8C5400FB7CAD /* SettingsTestCases.swift */, - 566EB8292B3D9CF600FB7CAD /* MoreTests.swift */, - 566EB82B2B3DA07700FB7CAD /* AssetUploadTest.swift */, - 566FCF2E2B3EB28D00168DEA /* NCNotificationText.swift */, - 566FCF302B3EB48A00168DEA /* PrivacyPolicyTest.swift */, - 566FCF4C2B3EB78F00168DEA /* OnboardingTestCase.swift */, - 566FCF542B3ECBDE00168DEA /* RenameFileTests.swift */, - AF8ED1FB2757821000B8DBC4 /* NextcloudUnitTests.swift */, ); path = NextcloudUnitTests; sourceTree = ""; @@ -2528,126 +2206,51 @@ path = Advanced; sourceTree = ""; }; - B560B9542EF5597A00E55904 /* Account Request */ = { + B55AFB602FE2A04C00A1A1A4 /* MoEngage */ = { isa = PBXGroup; children = ( - B560B9502EF5597A00E55904 /* NCAccountRequest.storyboard */, - B560B9512EF5597A00E55904 /* NCAccountRequest.swift */, - B560B9522EF5597A00E55904 /* NCShareAccounts.storyboard */, - B560B9532EF5597A00E55904 /* NCShareAccounts.swift */, - ); - path = "Account Request"; - sourceTree = ""; - }; - B560B9572EF5597A00E55904 /* Account Settings */ = { - isa = PBXGroup; - children = ( - B560B9552EF5597A00E55904 /* NCAccountSettingsModel.swift */, - B560B9562EF5597A00E55904 /* NCAccountSettingsView.swift */, - ); - path = "Account Settings"; - sourceTree = ""; - }; - B560B9592EF5597A00E55904 /* Account */ = { - isa = PBXGroup; - children = ( - B560B9542EF5597A00E55904 /* Account Request */, - B560B9572EF5597A00E55904 /* Account Settings */, - B560B9582EF5597A00E55904 /* NCAccount.swift */, - ); - path = Account; - sourceTree = ""; - }; - B5BEBD512E93AE1C0002C9E5 /* Common */ = { - isa = PBXGroup; - children = ( - B5BEBD4F2E93AE1C0002C9E5 /* BaseXCTestCase.swift */, - B5BEBD502E93AE1C0002C9E5 /* TestConstants.swift */, - ); - path = Common; - sourceTree = ""; - }; - B5BEBD792E93AEA30002C9E5 /* MoEngage */ = { - isa = PBXGroup; - children = ( - B5BEBD782E93AEA30002C9E5 /* MoEngageAnalytics.swift */, + B55AFB5F2FE2A04C00A1A1A4 /* MoEngageAnalytics.swift */, ); path = MoEngage; sourceTree = ""; }; - B5BEBD7C2E93AEA30002C9E5 /* Analytics */ = { + B55AFB632FE2A04C00A1A1A4 /* Analytics */ = { isa = PBXGroup; children = ( - B5BEBD792E93AEA30002C9E5 /* MoEngage */, - B5BEBD7A2E93AEA30002C9E5 /* AnalyticsHelper.swift */, - B5BEBD7B2E93AEA30002C9E5 /* AnalyticsService.swift */, + B55AFB602FE2A04C00A1A1A4 /* MoEngage */, + B55AFB612FE2A04C00A1A1A4 /* AnalyticsHelper.swift */, + B55AFB622FE2A04C00A1A1A4 /* AnalyticsService.swift */, ); path = Analytics; sourceTree = ""; }; - B5BEBD932E93AED80002C9E5 /* AppUpdate */ = { + B55AFB652FE2A04C00A1A1A4 /* AppUpdate */ = { isa = PBXGroup; children = ( - B5BEBD922E93AED80002C9E5 /* AppUpdater.swift */, + B55AFB642FE2A04C00A1A1A4 /* AppUpdater.swift */, ); path = AppUpdate; sourceTree = ""; }; - B5BEBD9E2E93AF010002C9E5 /* EmptyView */ = { + B55AFB682FE2A04C00A1A1A4 /* EmptyView */ = { isa = PBXGroup; children = ( - B5BEBD9C2E93AF010002C9E5 /* NCEmptyDataSet.swift */, - B5BEBD9D2E93AF010002C9E5 /* NCEmptyView.xib */, + B55AFB662FE2A04C00A1A1A4 /* NCEmptyDataSet.swift */, + B55AFB672FE2A04C00A1A1A4 /* NCEmptyView.xib */, ); path = EmptyView; sourceTree = ""; }; - B5BEBDA22E93AF010002C9E5 /* Helper */ = { + B55AFB6C2FE2A04C00A1A1A4 /* Helper */ = { isa = PBXGroup; children = ( - B5BEBD9F2E93AF010002C9E5 /* AdjustHelper.h */, - B5BEBDA02E93AF010002C9E5 /* AdjustHelper.m */, - B5BEBDA12E93AF010002C9E5 /* TealiumHelper.swift */, + B55AFB692FE2A04C00A1A1A4 /* AdjustHelper.h */, + B55AFB6A2FE2A04C00A1A1A4 /* AdjustHelper.m */, + B55AFB6B2FE2A04C00A1A1A4 /* TealiumHelper.swift */, ); path = Helper; sourceTree = ""; }; - B5BEBDE82E93BDB40002C9E5 /* NMC Custom Views */ = { - isa = PBXGroup; - children = ( - B5BEBDE42E93BDB40002C9E5 /* FolderPathCustomCell.swift */, - B5BEBDE52E93BDB40002C9E5 /* FolderPathCustomCell.xib */, - B5BEBDE62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift */, - B5BEBDE72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib */, - ); - path = "NMC Custom Views"; - sourceTree = ""; - }; - B5BEBE192E93BE200002C9E5 /* NMC Views */ = { - isa = PBXGroup; - children = ( - B5BEBE072E93BE200002C9E5 /* FileNameInputTextField.swift */, - B5BEBE082E93BE200002C9E5 /* FileNameInputTextField.xib */, - B5BEBE092E93BE200002C9E5 /* JPGImageSaveSwitchView.swift */, - B5BEBE0A2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib */, - B5BEBE0B2E93BE200002C9E5 /* PasswordInputField.swift */, - B5BEBE0C2E93BE200002C9E5 /* PasswordInputField.xib */, - B5BEBE0D2E93BE200002C9E5 /* PdfWithOcrSwitchView.swift */, - B5BEBE0E2E93BE200002C9E5 /* PdfWithOcrSwitchView.xib */, - B5BEBE0F2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift */, - B5BEBE102E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib */, - B5BEBE112E93BE200002C9E5 /* PNGImageSaveSwitchView.swift */, - B5BEBE122E93BE200002C9E5 /* PNGImageSaveSwitchView.xib */, - B5BEBE132E93BE200002C9E5 /* ScanDocumentPathView.swift */, - B5BEBE142E93BE200002C9E5 /* ScanDocumentPathView.xib */, - B5BEBE152E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift */, - B5BEBE162E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib */, - B5BEBE172E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift */, - B5BEBE182E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib */, - ); - path = "NMC Views"; - sourceTree = ""; - }; C0046CDB2A17B98400D87C9D /* NextcloudUITests */ = { isa = PBXGroup; children = ( @@ -2665,9 +2268,9 @@ C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */ = { isa = PBXGroup; children = ( - B5BEBD582E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift */, - B5BEBD592E93AE2F0002C9E5 /* FilesIntegrationTests.swift */, - B5BEBD5A2E93AE2F0002C9E5 /* LoginIntegrationTests.swift */, + B55AFB772FE2A47500A1A1A4 /* BaseIntegrationXCTestCase.swift */, + B55AFB782FE2A47500A1A1A4 /* FilesIntegrationTests.swift */, + B55AFB792FE2A47500A1A1A4 /* LoginIntegrationTests.swift */, ); path = NextcloudIntegrationTests; sourceTree = ""; @@ -2675,7 +2278,6 @@ F30A962A2A27A9C800D7BCFE /* Tests */ = { isa = PBXGroup; children = ( - B5BEBD512E93AE1C0002C9E5 /* Common */, C04E2F212A17BB4D001BAD85 /* NextcloudIntegrationTests */, AA52EB442D42AC500089C348 /* NextcloudUnitTests */, C0046CDB2A17B98400D87C9D /* NextcloudUITests */, @@ -2918,7 +2520,8 @@ isa = PBXGroup; children = ( AF93471327E235EB002537EE /* Advanced */, - F724377A2C10B83E00C7C68D /* NCPermissions.swift */, + F724377A2C10B83E00C7C68D /* NCSharePermissions.swift */, + F3F442ED2DDE292600FD701F /* NCMetadataPermissions.swift */, F700510022DF63AC003A3356 /* NCShare.storyboard */, F700510422DF6A89003A3356 /* NCShare.swift */, AF730AF727834B1400B7520E /* NCShare+NCCellDelegate.swift */, @@ -3025,7 +2628,7 @@ F7411C532D7B26C600F57358 /* NCNetworking+ServerError.swift */, F74230F22C79B57200CA1ACA /* NCNetworking+Task.swift */, F785129A2D79899E0087DDD0 /* NCNetworking+TermsOfService.swift */, - F7327E272B73A53400A462C7 /* NCNetworking+Upload.swift */, + F71916102E2901E800E13E96 /* NCNetworking+Upload.swift */, F7327E2F2B73A86700A462C7 /* NCNetworking+WebDAV.swift */, F70D8D8024A4A9BF000A5756 /* NCNetworkingProcess.swift */, F755BD9A20594AC7008C5FBB /* NCService.swift */, @@ -3045,8 +2648,6 @@ F758B41E212C516300515F55 /* Scan document */ = { isa = PBXGroup; children = ( - B5BEBE192E93BE200002C9E5 /* NMC Views */, - B5BEBE052E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift */, F758B457212C564000515F55 /* NCScan.storyboard */, F758B45D212C569C00515F55 /* NCScanCell.swift */, F758B45F212C56A400515F55 /* NCScan.swift */, @@ -3077,6 +2678,7 @@ F751247B2C42919C00E63DB8 /* NCPhotoCell.xib */, F75D901E2D2BE12E003E740B /* NCRecommendationsCell.xib */, F75D90202D2BE26C003E740B /* NCRecommendationsCell.swift */, + F36C514D2E89393C0097E5F7 /* UIView+BlurVibrancy.swift */, ); path = Cell; sourceTree = ""; @@ -3084,7 +2686,6 @@ F7603298252F0E550015A421 /* Collection Common */ = { isa = PBXGroup; children = ( - B5BEBDC82E93AFF10002C9E5 /* NCSelectableNavigationView.swift */, F75FE06B2BB01D0D00A0EFEF /* Cell */, F70D7C3525FFBF81002B9E34 /* NCCollectionViewCommon.swift */, F76995F32F9A4AC000291FA7 /* NCCollectionViewCommon+UIEditMenuInteractionDelegate.swift */, @@ -3099,7 +2700,6 @@ F7865FF02F39D32500D09AE4 /* NCCollectionViewCommon+Search.swift */, F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */, F7CCAB502ECF315F00F8E68B /* NCCollectionViewCommon+SyncMetadata.swift */, - F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift */, F7D4BF002CA1831600A5E746 /* NCCollectionViewCommonPinchGesture.swift */, F38F71242B6BBDC300473CDC /* NCCollectionViewCommonSelectTabBar.swift */, F7C1EEA425053A9C00866ACC /* NCCollectionViewDataSource.swift */, @@ -3148,7 +2748,7 @@ F76882052C0DD1E7001CF441 /* Advanced */, F768821F2C0DD1E7001CF441 /* Helpers */, F76882142C0DD1E7001CF441 /* Acknowledgements.rtf */, - F76882132C0DD1E7001CF441 /* NCKeychain.swift */, + F76882132C0DD1E7001CF441 /* NCPreferences.swift */, F76882152C0DD1E7001CF441 /* NCSettingsBundleHelper.swift */, F768820D2C0DD1E7001CF441 /* E2EE */, ); @@ -3321,8 +2921,6 @@ F78ACD50219046AC0088454D /* Section Header Footer */ = { isa = PBXGroup; children = ( - B5BEBDCA2E93B0210002C9E5 /* NCSectionHeaderMenu.swift */, - B5BEBDCB2E93B0210002C9E5 /* NCSectionHeaderMenu.xib */, F78ACD51219046DC0088454D /* NCSectionFirstHeader.swift */, F7B398412A6A91D5007538D6 /* NCSectionFirstHeader.xib */, F7CBC1222BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift */, @@ -3352,11 +2950,11 @@ F79018B1240962C7007C9B6D /* NCViewerMedia */ = { isa = PBXGroup; children = ( - F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */, - F70753F62542A9C000972D44 /* NCViewerMediaPage.storyboard */, F70753EA2542A99800972D44 /* NCViewerMediaPage.swift */, + F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */, F70753F02542A9A200972D44 /* NCViewerMedia.swift */, F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */, + F70753F62542A9C000972D44 /* NCViewerMediaPage.storyboard */, F79EDA9E26B004980007D134 /* NCPlayer */, ); path = NCViewerMedia; @@ -3426,7 +3024,6 @@ F77BB7492899857B0090FC19 /* UINavigationController+Extension.swift */, F34BDB392F5744E5007A222C /* UINavigationItem+Extension.swift */, F743C89D2E5B2595000173A9 /* UIScene+Extension.swift */, - F77BB747289985270090FC19 /* UITabBarController+Extension.swift */, F77C3F5A2D9BF8B500F3C471 /* UITabBar+Extension.swift */, F77BB747289985270090FC19 /* UITabBarController+Extension.swift */, AFCE353227E4ED1900FEA6C2 /* UIToolbar+Extension.swift */, @@ -3498,6 +3095,7 @@ F73EF7BE2B02250B0087E6E9 /* NCManageDatabase+GPS.swift */, F757CC8129E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift */, F7BF9D812934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift */, + F77E8C1E2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift */, F7864ACB2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift */, AF4BF61827562A4B0081CEEF /* NCManageDatabase+Metadata.swift */, F7CF06822E11273F0063AD04 /* NCManageDatabase+CreateMetadata.swift */, @@ -3517,7 +3115,7 @@ F7BFFA621A24D7300044ED85 /* Login */ = { isa = PBXGroup; children = ( - B5BEBDC62E93AF7E0002C9E5 /* NCLoginWeb.swift */, + B55AFB752FE2A0BD00A1A1A4 /* NCLoginWeb.swift */, F702F2F025EE5CDA008F8E80 /* NCLogin.storyboard */, F702F2F625EE5CEC008F8E80 /* NCLogin.swift */, F745B252222D88AE00346520 /* NCLoginQRCode.swift */, @@ -3537,16 +3135,11 @@ F7F562FF2E15761500631A11 /* MigrationMultiDomains.swift */, F76D364528A4F8BF00214537 /* NCActivityIndicator.swift */, F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */, - F3E173BE2C9B1057006D177A /* ScreenAwakeManager */, - F702F2FC25EE5D2C008F8E80 /* NYMnemonic */, - F7D4BF2B2CA2E8D800A5E746 /* TOPasscodeViewController */, - F76D364528A4F8BF00214537 /* NCActivityIndicator.swift */, F733598025C1C188002ABA72 /* NCAskAuthorization.swift */, F77C97382953131000FDDD09 /* NCCameraRoll.swift */, F7A3DB8F2DDE238C008F7EC8 /* NCDebouncer.swift */, F70968A324212C4E00ED60E5 /* NCLivePhoto.swift */, F7A560412AE1593700BE8FD6 /* NCOperationSaveLivePhoto.swift */, - F7386E452DA90E02009A00F6 /* NCAppVersionManager.swift */, F702F30725EE5D47008F8E80 /* NCPopupViewController.swift */, F707C26421A2DC5200F6181E /* NCStoreReview.swift */, F7814E952F3B5F170074DA3A /* NCSVGRenderer.swift */, @@ -3584,14 +3177,6 @@ F7C1CDD91E6DFC6F005D92BE /* Brand */ = { isa = PBXGroup; children = ( - B5BEBD272E93AD540002C9E5 /* File_Provider_Extension.entitlements */, - B5BEBD282E93AD540002C9E5 /* File_Provider_Extension.plist */, - B5BEBD292E93AD540002C9E5 /* iOSClient.entitlements */, - B5BEBD2A2E93AD540002C9E5 /* iOSClient.plist */, - B5BEBD2B2E93AD540002C9E5 /* Notification_Service_Extension.entitlements */, - B5BEBD2C2E93AD540002C9E5 /* Notification_Service_Extension.plist */, - B5BEBD2D2E93AD540002C9E5 /* Share.entitlements */, - B5BEBD2E2E93AD540002C9E5 /* Share.plist */, F761856529E98543006EB3B0 /* Intro */, F700222B1EC479840080073F /* Custom.xcassets */, F7362A1E220C853A005101B5 /* LaunchScreen.storyboard */, @@ -3619,13 +3204,14 @@ path = E2EE; sourceTree = ""; }; - F7C5259A1E3B441D00FFE02C /* Notification */ = { + F7C55CC82FB5CE74004A974F /* Action Assistant */ = { isa = PBXGroup; children = ( - F73B42292476764F00A30FD3 /* NCNotification.storyboard */, - F73B422A2476764F00A30FD3 /* NCNotification.swift */, + F7C55CC32FB5CE74004A974F /* ActionViewController.swift */, + F7C55CC42FB5CE74004A974F /* Images.xcassets */, + F7C55CC72FB5CE74004A974F /* MainInterface.storyboard */, ); - name = Notification; + path = "Action Assistant"; sourceTree = ""; }; F7C9739328F17131002C43E2 /* WidgetDashboardIntentHandler */ = { @@ -3750,15 +3336,8 @@ F7DFB7E9219C5A0500680748 /* Create */ = { isa = PBXGroup; children = ( - B5BEBDD02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard */, - B5BEBDD12E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift */, - B5BEBDD22E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard */, - B5BEBDD32E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift */, - B5BEBDD42E93B2450002C9E5 /* TextTableViewCell.swift */, - B5BEBDD52E93B2450002C9E5 /* TextTableViewCell.xib */, F7FA7FFD2C0F4F3B0072FC60 /* Upload Assets */, F7A509242C26BD5D00326106 /* NCCreate.swift */, - F7A509242C26BD5D00326106 /* NCCreateDocument.swift */, F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */, F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */, F704B5E82430C0B800632F5F /* NCCreateFormUploadConflictCell.swift */, @@ -3779,7 +3358,6 @@ F7EC9CB921185F2000F1C5CE /* Media */ = { isa = PBXGroup; children = ( - B5BEBDE22E93BD6F0002C9E5 /* NCMediaCommandView.xib */, F720B5B72507B9A5008C94E5 /* Cell */, F7501C302212E57400FB1415 /* NCMedia.storyboard */, F7501C312212E57400FB1415 /* NCMedia.swift */, @@ -3792,7 +3370,6 @@ F71CFA662F2A07C6007A3AE9 /* NCMedia+Netwoking.swift */, F7E2B64E2DDCC5C30075B4D0 /* NCMedia+TransferDelegate.swift */, F78B87E62B62527100C65ADC /* NCMediaDataSource.swift */, - F7D60CAE2C941ACB008FBFDD /* NCMediaPinchGesture.swift */, F78B87E82B62550800C65ADC /* NCMediaDownloadThumbnail.swift */, F755CB3F2B8CB13C00CE27E9 /* NCMediaLayout.swift */, F79699E62E689F68000EC82A /* NCMediaNavigationController.swift */, @@ -3802,6 +3379,15 @@ path = Media; sourceTree = ""; }; + F7EF2AEA2E43157B0081B2C9 /* Notification */ = { + isa = PBXGroup; + children = ( + F7EF2AE82E43157B0081B2C9 /* NCNotification.storyboard */, + F7EF2AE92E43157B0081B2C9 /* NCNotification.swift */, + ); + path = Notification; + sourceTree = ""; + }; F7EFC0CB256BF89300461AAD /* UserStatus */ = { isa = PBXGroup; children = ( @@ -3867,19 +3453,20 @@ F70716E32987F81500E72C1D /* File Provider Extension UI.appex */, C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */, C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */, + F7F1FBA62E27D13700C79E20 /* Frameworks */, + F31165012F9674A1009A1E37 /* AppIcon.icon */, + F7C55C7A2FB5AEF7004A974F /* Action Assistant.appex */, ); sourceTree = ""; }; F7F67BAA1A24D27800EE80DA /* iOSClient */ = { isa = PBXGroup; children = ( - B560B9592EF5597A00E55904 /* Account */, - B5BEBDE82E93BDB40002C9E5 /* NMC Custom Views */, - B5BEBD9B2E93AF010002C9E5 /* AppUtility.swift */, - B5BEBD9E2E93AF010002C9E5 /* EmptyView */, - B5BEBDA22E93AF010002C9E5 /* Helper */, - B5BEBD932E93AED80002C9E5 /* AppUpdate */, - B5BEBD7C2E93AEA30002C9E5 /* Analytics */, + B55AFB632FE2A04C00A1A1A4 /* Analytics */, + B55AFB652FE2A04C00A1A1A4 /* AppUpdate */, + B55AFB682FE2A04C00A1A1A4 /* EmptyView */, + B55AFB6C2FE2A04C00A1A1A4 /* Helper */, + B55AFB5D2FE29BAC00A1A1A4 /* AppUtility.swift */, AA517BB42D66149900F8D37C /* .tx */, F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */, F7110ADF2F9773210095AA5C /* AppDelegate+AppRefresh.swift */, @@ -3898,6 +3485,7 @@ F769CA1B2966EF4F00039397 /* GUI */, F317C82C2E844C3C00761AEA /* Client Integration */, F70211F31BAC56E9003FC03E /* Main */, + F7FDFF5A2E437E55000D7688 /* Account */, F7A321621E9E37960069AD1B /* Activity */, F76687042B7D067400779E3F /* AudioRecorder */, F3A0478E2BD2668800658E7B /* Assistant */, @@ -3914,7 +3502,7 @@ 371B5A2F23D0B04B00FAFAE9 /* Menu */, F7CB68942541670D0050EC94 /* More */, F74D3DB81BAC1941000BAE4B /* Networking */, - F7C5259A1E3B441D00FFE02C /* Notification */, + F7EF2AEA2E43157B0081B2C9 /* Notification */, F7381ED9218218A4000B1560 /* Offline */, F713418B2597513800768D21 /* PushNotification */, F765F72E25237E3F00391DBE /* Recent */, @@ -4126,7 +3714,6 @@ F7490E8A29882CE4009DCE94 /* NextcloudKit */, F760DE0C2AE66EDF0027D78A /* KeychainAccess */, F712217F2F51AF9F00ACEB08 /* LucidBanner */, - F33EE6EA2BF4C03200CA1A51 /* NIOSSL */, ); productName = "File Provider Extension UI"; productReference = F70716E32987F81500E72C1D /* File Provider Extension UI.appex */; @@ -4265,17 +3852,6 @@ F3374AF52D78B01B002A38F9 /* HashTreeCollections */, F3374AF72D78B01B002A38F9 /* HeapModule */, F70557B62ED44E2700135623 /* LucidBanner */, - 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */, - F327FA422B8CC0B900E5B743 /* SwipeCellKit */, - 56A32E692CE4B69B0020EFF5 /* MoEngage-iOS-SDK */, - 56AB28932B833E2D0089D373 /* Adjust */, - 56AB28962B8351720089D373 /* TealiumAutotracking */, - 56AB28982B8351720089D373 /* TealiumCore */, - 56AB289A2B8351720089D373 /* TealiumLifecycle */, - 56AB289C2B8351730089D373 /* TealiumLocation */, - 56AB289E2B8351730089D373 /* TealiumRemoteCommands */, - 56AB28A02B8351730089D373 /* TealiumTagManagement */, - 56AB28A22B8351740089D373 /* TealiumVisitorService */, ); productName = "Crypto Cloud"; productReference = F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */; @@ -4477,11 +4053,6 @@ F7D4BF4E2CA2ECCB00A5E746 /* XCRemoteSwiftPackageReference "vlckit-spm" */, F3374AEE2D78B01B002A38F9 /* XCRemoteSwiftPackageReference "swift-collections" */, F70557B52ED44E2700135623 /* XCRemoteSwiftPackageReference "LucidBanner" */, - 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */, - F327FA412B8CC0B900E5B743 /* XCRemoteSwiftPackageReference "SwipeCellKit" */, - 56A32E682CE4B66A0020EFF5 /* XCRemoteSwiftPackageReference "MoEngage-iOS-SDK" */, - 566FCF5C2B3ED58900168DEA /* XCRemoteSwiftPackageReference "tealium-swift" */, - 566FCF5D2B3ED64900168DEA /* XCRemoteSwiftPackageReference "ios_sdk" */, ); productRefGroup = F7F67B9F1A24D27800EE80DA; projectDirPath = ""; @@ -4507,13 +4078,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5BEBDBB2E93AF010002C9E5 /* NCEmptyView.xib in Resources */, - B5BEBDF72E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDF82E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, - B5BEBD3F2E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD402E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD412E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD422E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F7E4022F2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F746EC53273906C50052598D /* NCViewCertificateDetails.storyboard in Resources */, ); @@ -4523,10 +4087,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5BEBD472E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD482E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD492E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD4A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4549,15 +4109,8 @@ buildActionMask = 2147483647; files = ( F7490E8D29882F5B009DCE94 /* Custom.xcassets in Resources */, - B5BEBDEF2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDF02E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, - B5BEBDB12E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7490E8E2988334A009DCE94 /* Localizable.strings in Resources */, F7E4022E2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, - B5BEBD432E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD442E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD452E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD462E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, AA517B812D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F722F0112CFF569500065FB5 /* MainInterface.storyboard in Resources */, ); @@ -4575,23 +4128,12 @@ F7B398432A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, AF22B207277B4E4C00DAB0CC /* NCCreateFormUploadConflict.storyboard in Resources */, AA517B822D660EFE00F8D37C /* Localizable.stringsdict in Resources */, - B5BEBD2F2E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBDD92E93B2450002C9E5 /* TextTableViewCell.xib in Resources */, - B5BEBDDA2E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */, - B5BEBDDB2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, - B5BEBD302E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBDB62E93AF010002C9E5 /* NCEmptyView.xib in Resources */, - B5BEBD312E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD322E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, - B5BEBDCD2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, F7145A231D12E3B700CAFEEC /* Localizable.strings in Resources */, F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, - B560B9622EF559C100E55904 /* NCAccountRequest.storyboard in Resources */, F76C26A62850D3A500E42BDF /* Images.xcassets in Resources */, F714805E262ED52900693E51 /* NCSectionFooter.xib in Resources */, - B5BEBDFB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDFC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, F700222D1EC479840080073F /* Custom.xcassets in Resources */, + F7FDFF702E437E55000D7688 /* NCAccountRequest.storyboard in Resources */, F79ED0F22D2FCA6A00A389D9 /* NCRecommendationsCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4601,15 +4143,8 @@ buildActionMask = 2147483647; files = ( F7C7B25128B8B0C400E7115D /* Images.xcassets in Resources */, - B5BEBDFD2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDFE2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, - B5BEBDA82E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7C7B25028B8AD4500E7115D /* Localizable.strings in Resources */, F7E4022A2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, - B5BEBD372E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD382E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD392E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD3A2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, AA517B832D660EFE00F8D37C /* Localizable.stringsdict in Resources */, F7346E2328B0FEBA006CE2D2 /* Assets.xcassets in Resources */, ); @@ -4619,13 +4154,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5BEBDC12E93AF010002C9E5 /* NCEmptyView.xib in Resources */, - B5BEBE012E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBE022E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, - B5BEBD4B2E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD4C2E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD4D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD4E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F7E4022D2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F746EC52273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */, ); @@ -4638,8 +4166,7 @@ F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */, F77444F622281649000D5EB0 /* NCMediaCell.xib in Resources */, F78ACD4421903CF20088454D /* NCListCell.xib in Resources */, - F3BB464D2A39ADCC00461F6E /* NCMoreAppSuggestionsCell.xib in Resources */, - B5BEBDE32E93BD6F0002C9E5 /* NCMediaCommandView.xib in Resources */, + B55AFB6D2FE2A04C00A1A1A4 /* NCEmptyView.xib in Resources */, F7F4F10727ECDBDB008676F9 /* Inconsolata-Black.ttf in Resources */, F761856D29E98543006EB3B0 /* NCIntroCollectionViewCell.xib in Resources */, F78ACD4621903D010088454D /* NCGridCell.xib in Resources */, @@ -4650,8 +4177,6 @@ F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */, F700222C1EC479840080073F /* Custom.xcassets in Resources */, F702F2F125EE5CDB008F8E80 /* NCLogin.storyboard in Resources */, - B5BEBDF32E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDF42E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */, F758B45A212C564000515F55 /* NCScan.storyboard in Resources */, F765F73225237E3F00391DBE /* NCRecent.storyboard in Resources */, @@ -4665,12 +4190,8 @@ F7F4F10B27ECDBDB008676F9 /* Inconsolata-Light.ttf in Resources */, F7EF2AEC2E43157B0081B2C9 /* NCNotification.storyboard in Resources */, F7CEE6002BA9A5C9003EFD89 /* NCTrashGridCell.xib in Resources */, - 3704EB2A23D5A58400455C5B /* NCMenu.storyboard in Resources */, AF93471C27E2361E002537EE /* NCShareHeader.xib in Resources */, F75D901F2D2BE12E003E740B /* NCRecommendationsCell.xib in Resources */, - F76032A0252F0F8E0015A421 /* NCTransferCell.xib in Resources */, - B560B95F2EF5597A00E55904 /* NCShareAccounts.storyboard in Resources */, - B560B9602EF5597A00E55904 /* NCAccountRequest.storyboard in Resources */, F7F4F10527ECDBDB008676F9 /* Inconsolata-SemiBold.ttf in Resources */, F7A48415297028FC00BD1B49 /* Nextcloud Hub.png in Resources */, F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */, @@ -4679,7 +4200,6 @@ F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */, F768822D2C0DD1E7001CF441 /* Acknowledgements.rtf in Resources */, F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */, - B5BEBDCF2E93B0210002C9E5 /* NCSectionHeaderMenu.xib in Resources */, F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */, F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */, F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */, @@ -4694,21 +4214,8 @@ F761856A29E98543006EB3B0 /* NCIntro.storyboard in Resources */, F719D9E0288D37A300762E33 /* NCColorPicker.storyboard in Resources */, AA517B802D660EFE00F8D37C /* Localizable.stringsdict in Resources */, - B5BEBE232E93BE200002C9E5 /* PasswordInputField.xib in Resources */, - B5BEBE242E93BE200002C9E5 /* ScanDocumentPathView.xib in Resources */, - B5BEBE252E93BE200002C9E5 /* SetPDFPasswordSwitchView.xib in Resources */, - B5BEBE262E93BE200002C9E5 /* PdfWithOcrSwitchView.xib in Resources */, - B5BEBE272E93BE200002C9E5 /* PNGImageSaveSwitchView.xib in Resources */, - B5BEBE282E93BE200002C9E5 /* FileNameInputTextField.xib in Resources */, - B5BEBE292E93BE200002C9E5 /* TextFileWithOcrSwitchView.xib in Resources */, - B5BEBE2A2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.xib in Resources */, - B5BEBE2B2E93BE200002C9E5 /* JPGImageSaveSwitchView.xib in Resources */, F7F4F10A27ECDBDB008676F9 /* Inconsolata-ExtraBold.ttf in Resources */, F704B5E72430C06700632F5F /* NCCreateFormUploadConflictCell.xib in Resources */, - B5BEBDDF2E93B2450002C9E5 /* TextTableViewCell.xib in Resources */, - B5BEBDE02E93B2450002C9E5 /* NCCreateFormUploadDocuments.storyboard in Resources */, - B5BEBDE12E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.storyboard in Resources */, - B5BEBDA72E93AF010002C9E5 /* NCEmptyView.xib in Resources */, F7E402292BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, F7C9555321F0C4CA0024296E /* NCActivity.storyboard in Resources */, F7BC287E26663F6C004D46C5 /* NCViewCertificateDetails.storyboard in Resources */, @@ -4719,14 +4226,11 @@ F732D23327CF8AED000B0F1B /* NCPlayerToolBar.xib in Resources */, F73D11FA253C5F4800DF9BEC /* NCViewerDirectEditing.storyboard in Resources */, F7EDE51B262DD0C400414FE6 /* NCSelectCommandViewCopyMove.xib in Resources */, - F73B422B2476764F00A30FD3 /* NCNotification.storyboard in Resources */, F7FF2CB12842159500EBB7A1 /* NCSectionHeader.xib in Resources */, F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */, - B5BEBD332E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD342E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD352E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD362E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, F77B0F631D118A16002130FE /* Localizable.strings in Resources */, + F7FDFF692E437E55000D7688 /* NCAccountRequest.storyboard in Resources */, + F7FDFF6A2E437E55000D7688 /* NCShareAccounts.storyboard in Resources */, F774264A22EB4D0000B23912 /* NCSearchUserDropDownCell.xib in Resources */, F77B0F7D1D118A16002130FE /* Images.xcassets in Resources */, F73CB3B222E072A000AD728E /* NCShareHeaderView.xib in Resources */, @@ -4734,7 +4238,6 @@ F7EDE514262DC2CD00414FE6 /* NCSelectCommandViewSelect+CreateFolder.xib in Resources */, F7B398422A6A91D5007538D6 /* NCSectionFirstHeader.xib in Resources */, F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */, - F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */, F76687082B7D067400779E3F /* NCAudioRecorderViewController.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4753,13 +4256,6 @@ buildActionMask = 2147483647; files = ( F7E4022B2BA85D1D007E5609 /* PrivacyInfo.xcprivacy in Resources */, - B5BEBDEB2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.xib in Resources */, - B5BEBDEC2E93BDB40002C9E5 /* FolderPathCustomCell.xib in Resources */, - B5BEBDC02E93AF010002C9E5 /* NCEmptyView.xib in Resources */, - B5BEBD3B2E93AD540002C9E5 /* iOSClient.plist in Resources */, - B5BEBD3C2E93AD540002C9E5 /* Share.plist in Resources */, - B5BEBD3D2E93AD540002C9E5 /* Notification_Service_Extension.plist in Resources */, - B5BEBD3E2E93AD540002C9E5 /* File_Provider_Extension.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4820,14 +4316,6 @@ 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */, F770768A263A8A2500A1BA94 /* NCUtilityFileSystem.swift in Sources */, F77E8C1F2E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, - F7CF067B2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, - F71433E72C778FFB00E20B5A /* NotificationCenter+MainThread.swift in Sources */, - F39170AA2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, - F73EF7C52B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, - 2C1D5D7923E2DE9100334ABB /* NCBrand.swift in Sources */, - F770768A263A8A2500A1BA94 /* NCUtilityFileSystem.swift in Sources */, - F76D364928A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, - F7817CFD29801A3500FFBC65 /* Data+Extension.swift in Sources */, F7D7A7712DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, AF4BF62127562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, F702F2D225EE5B5C008F8E80 /* NCGlobal.swift in Sources */, @@ -4840,14 +4328,9 @@ F7D61EC02EBF1878007F865B /* NCManageDatabase+Tag.swift in Sources */, F7864AD22A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, F724377D2C10B92300C7C68D /* NCSharePermissions.swift in Sources */, - F314F1142A30E2DE00BC7FAB /* View+Extension.swift in Sources */, - F724377D2C10B92300C7C68D /* NCPermissions.swift in Sources */, F7D68FD028CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, F7245927289BB59300474787 /* ThreadSafeDictionary.swift in Sources */, 2C33C48223E2C475005F963B /* NotificationService.swift in Sources */, - F73EF7A52B021FAE0087E6E9 /* NCLivePhoto.swift in Sources */, - F33EE6F82BF4C9B200CA1A51 /* PKCS12.swift in Sources */, - B5BEBD952E93AED80002C9E5 /* AppUpdater.swift in Sources */, AF4BF617275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, F7BF9D872934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, AA8D31592D41052900FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, @@ -4858,18 +4341,8 @@ F7CF06832E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F7D61EA62EBF1694007F865B /* NCManageDatabase+TableCapabilities.swift in Sources */, F757CC8829E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, - F7386E462DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, - B5BEBDF52E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBDF62E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, - F33918CA2C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, - D575039F27146F93008DC9DC /* String+Extension.swift in Sources */, - F7CF06832E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, - F757CC8829E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, - B5BEBD8C2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD8D2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD8E2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, - F79B646326CA661600838ACA /* UIControl+Extension.swift in Sources */, F7C687EF2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, + F3F442F42DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, F77DD6AE2C5CC093009448FB /* NCSession.swift in Sources */, F78A10C429322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7B769AE2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, @@ -4880,18 +4353,10 @@ F76882372C0DD22F001CF441 /* NCPreferences.swift in Sources */, F73EF7E52B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F7CAFE232F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, - F343A4B92A1E084400DDA874 /* PHAsset+Extension.swift in Sources */, - F76882372C0DD22F001CF441 /* NCKeychain.swift in Sources */, - F73EF7E52B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, - F73EF7D52B0225BA0087E6E9 /* NCManageDatabase+Tag.swift in Sources */, F71F6D0D2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F763D2A32A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F749B656297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F782FDC424E6933900666099 /* NCUtility.swift in Sources */, - B5BEBDB72E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDB82E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDB92E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDBA2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F74B6D9B2A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4902,47 +4367,21 @@ files = ( AA52EB472D42AC9E0089C348 /* Placeholder.swift in Sources */, F34BDB3C2F574A58007A222C /* BidiSafeFilenameTests.swift in Sources */, - 566EB7C82B3D6FAB00FB7CAD /* SharingTest.swift in Sources */, - 566EB82A2B3D9CF600FB7CAD /* MoreTests.swift in Sources */, - 566FCF2F2B3EB28D00168DEA /* NCNotificationText.swift in Sources */, - 566FCF312B3EB48A00168DEA /* PrivacyPolicyTest.swift in Sources */, - AF8ED1FC2757821000B8DBC4 /* NextcloudUnitTests.swift in Sources */, - F37208792BAB4C09006B5430 /* BaseXCTestCase.swift in Sources */, F372087D2BAB4C0F006B5430 /* TestConstants.swift in Sources */, - 566EB82C2B3DA07700FB7CAD /* AssetUploadTest.swift in Sources */, - 566EB8112B3D85DE00FB7CAD /* CollaboraTestCase.swift in Sources */, - B5877EAB2DAFDDC60096BD3A /* AudioUploadTests.swift in Sources */, - B5877EAC2DAFDDC60096BD3A /* CollaboraTestCase.swift in Sources */, - B5877EAD2DAFDDC60096BD3A /* RenameFileTests.swift in Sources */, - B5877EAE2DAFDDC60096BD3A /* SettingsTestCases.swift in Sources */, - B5877EBC2DAFDE110096BD3A /* BaseXCTestCase.swift in Sources */, - B5877EBD2DAFDE110096BD3A /* TestConstants.swift in Sources */, - B5877EAF2DAFDDC60096BD3A /* MoveAndCopyTests.swift in Sources */, - B5877EB02DAFDDC60096BD3A /* AssetUploadTest.swift in Sources */, - B5877EB12DAFDDC60096BD3A /* OnboardingTestCase.swift in Sources */, - B5877EB22DAFDDC60096BD3A /* SharingTest.swift in Sources */, - B5877EB32DAFDDC60096BD3A /* MoreTests.swift in Sources */, - B5877EB42DAFDDC60096BD3A /* E2EETests.swift in Sources */, - B5877EB52DAFDDC60096BD3A /* PrivacyPolicyTest.swift in Sources */, - B5877EB62DAFDDC60096BD3A /* ScanTests.swift in Sources */, - B5877EB72DAFDDC60096BD3A /* Placeholder.swift in Sources */, - B5877EB82DAFDDC60096BD3A /* NCNotificationText.swift in Sources */, - 566EB7C62B3D59B900FB7CAD /* MoveAndCopyTests.swift in Sources */, + B55AFB8A2FE2A49200A1A1A4 /* OnboardingTestCase.swift in Sources */, + B55AFB8B2FE2A49200A1A1A4 /* RenameFileTests.swift in Sources */, + B55AFB8C2FE2A49200A1A1A4 /* ScanTests.swift in Sources */, + B55AFB8D2FE2A49200A1A1A4 /* SettingsTestCases.swift in Sources */, + B55AFB8E2FE2A49200A1A1A4 /* MoreTests.swift in Sources */, + B55AFB8F2FE2A49200A1A1A4 /* SharingTest.swift in Sources */, + B55AFB902FE2A49200A1A1A4 /* CollaboraTestCase.swift in Sources */, + B55AFB912FE2A49200A1A1A4 /* NCNotificationText.swift in Sources */, + B55AFB922FE2A49200A1A1A4 /* E2EETests.swift in Sources */, + B55AFB932FE2A49200A1A1A4 /* MoveAndCopyTests.swift in Sources */, + B55AFB942FE2A49200A1A1A4 /* AudioUploadTests.swift in Sources */, + B55AFB952FE2A49200A1A1A4 /* PrivacyPolicyTest.swift in Sources */, + B55AFB962FE2A49200A1A1A4 /* AssetUploadTest.swift in Sources */, F78E2D6C29AF02DB0024D4F3 /* Database.swift in Sources */, - B5BEBD6B2E93AE4B0002C9E5 /* SharingTest.swift in Sources */, - B5BEBD6C2E93AE4B0002C9E5 /* AssetUploadTest.swift in Sources */, - B5BEBD6D2E93AE4B0002C9E5 /* NCNotificationText.swift in Sources */, - B5BEBD6E2E93AE4B0002C9E5 /* SettingsTestCases.swift in Sources */, - B5BEBD6F2E93AE4B0002C9E5 /* CollaboraTestCase.swift in Sources */, - B5BEBD702E93AE4B0002C9E5 /* MoveAndCopyTests.swift in Sources */, - B5BEBD712E93AE4B0002C9E5 /* MoreTests.swift in Sources */, - B5BEBD722E93AE4B0002C9E5 /* RenameFileTests.swift in Sources */, - B5BEBD732E93AE4B0002C9E5 /* AudioUploadTests.swift in Sources */, - B5BEBD742E93AE4B0002C9E5 /* OnboardingTestCase.swift in Sources */, - B5BEBD752E93AE4B0002C9E5 /* E2EETests.swift in Sources */, - B5BEBD762E93AE4B0002C9E5 /* ScanTests.swift in Sources */, - B5BEBD772E93AE4B0002C9E5 /* PrivacyPolicyTest.swift in Sources */, - F7817CFE29801A3500FFBC65 /* Data+Extension.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4956,11 +4395,9 @@ AA74AA972D3172D100BE3458 /* UITestError.swift in Sources */, AA3C85E82D36B08C00F74F12 /* UITestBackend.swift in Sources */, AA8E03DC2D2FBAC200E7E89C /* DownloadLimitUITests.swift in Sources */, - B5BEBD562E93AE1C0002C9E5 /* TestConstants.swift in Sources */, - B5BEBD572E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */, - B5BEBD5B2E93AE2F0002C9E5 /* LoginIntegrationTests.swift in Sources */, - B5BEBD5C2E93AE2F0002C9E5 /* BaseIntegrationXCTestCase.swift in Sources */, - B5BEBD5D2E93AE2F0002C9E5 /* FilesIntegrationTests.swift in Sources */, + B55AFB7A2FE2A47500A1A1A4 /* LoginIntegrationTests.swift in Sources */, + B55AFB7B2FE2A47500A1A1A4 /* BaseIntegrationXCTestCase.swift in Sources */, + B55AFB7C2FE2A47500A1A1A4 /* FilesIntegrationTests.swift in Sources */, AABD0C8A2D5F67A400F009E6 /* XCUIElement.swift in Sources */, AA3C85EE2D36BCCE00F74F12 /* SharesResponse.swift in Sources */, AAA7BC2E2D3E39F1008F1A22 /* CapabilitiesResponse.swift in Sources */, @@ -4975,8 +4412,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B5BEBD522E93AE1C0002C9E5 /* TestConstants.swift in Sources */, - B5BEBD532E93AE1C0002C9E5 /* BaseXCTestCase.swift in Sources */, F372087E2BAB4C0F006B5430 /* TestConstants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4987,16 +4422,6 @@ files = ( F78E2D6A29AF02DB0024D4F3 /* Database.swift in Sources */, F75F4BC52FD008D7009E55ED /* Optional+Extension.swift in Sources */, - F74B6D9A2A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, - F7490E8329882C84009DCE94 /* NCManageDatabase+LayoutForView.swift in Sources */, - AA8D31582D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, - F73EF7DC2B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, - F7490E8029882C76009DCE94 /* NCManageDatabase+Avatar.swift in Sources */, - F343A4B82A1E084300DDA874 /* PHAsset+Extension.swift in Sources */, - F78E2D6A29AF02DB0024D4F3 /* Database.swift in Sources */, - F7C687EE2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, - F7490E7429882BCC009DCE94 /* NCManageDatabase.swift in Sources */, - F7CF067E2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7490E6E29882B56009DCE94 /* NCBrand.swift in Sources */, F7D61E942EBF1366007F865B /* UIColor+Extension.swift in Sources */, F71F6D0C2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, @@ -5010,30 +4435,6 @@ F70716E62987F81500E72C1D /* DocumentActionViewController.swift in Sources */, F763412A2EBE10F00056F538 /* NCUtilityFileSystem.swift in Sources */, F7F1FB9E2E27CE7200C79E20 /* NCNetworking.swift in Sources */, - F7490E8629882C99009DCE94 /* NCUtilityFileSystem.swift in Sources */, - F763D2A22A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, - B5BEBDAD2E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDAE2E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDAF2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDB02E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, - F73EF7E42B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, - F343A4C02A1E734600DDA874 /* Optional+Extension.swift in Sources */, - F7D7A76D2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, - F711A4E12AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, - F76882382C0DD22F001CF441 /* NCKeychain.swift in Sources */, - F7C9B9222B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, - F7490E8529882C8C009DCE94 /* NCManageDatabase+Video.swift in Sources */, - F7CF06892E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, - F7386E4A2DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, - F7490E7729882C10009DCE94 /* UIColor+Extension.swift in Sources */, - F70716E62987F81500E72C1D /* DocumentActionViewController.swift in Sources */, - F359D86C2A7D03420023F405 /* NCUtility+Exif.swift in Sources */, - F7490E8429882C89009DCE94 /* NCManageDatabase+Share.swift in Sources */, - F7490E6F29882B67009DCE94 /* UIImage+Extension.swift in Sources */, - F7490E7E29882C6E009DCE94 /* NCManageDatabase+Account.swift in Sources */, - F7490E7029882B9B009DCE94 /* NCManageDatabase+Metadata.swift in Sources */, - F73EF7AC2B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, - F73EF7C42B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, F77DD6AD2C5CC093009448FB /* NCSession.swift in Sources */, F76340F92EBDE9760056F538 /* NCManageDatabaseCore.swift in Sources */, F7CAFE222F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, @@ -5051,25 +4452,6 @@ F763413F2EBE5DC40056F538 /* FileProviderUtility.swift in Sources */, F763413A2EBE5DAB0056F538 /* FileProviderEnumerator.swift in Sources */, F763412F2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, - F73EF7A42B021FAD0087E6E9 /* NCLivePhoto.swift in Sources */, - F757CC8729E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, - F33EE6F72BF4C9B200CA1A51 /* PKCS12.swift in Sources */, - B5BEBDED2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBDEE2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, - F7B769AD2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, - F39170AC2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, - F73EF7BC2B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, - F724377E2C10B92300C7C68D /* NCPermissions.swift in Sources */, - F7490E8229882C80009DCE94 /* NCManageDatabase+E2EE.swift in Sources */, - F7490E7829882C28009DCE94 /* NCUtility.swift in Sources */, - F3E173C52C9B1067006D177A /* AwakeMode.swift in Sources */, - F71433E62C778FFB00E20B5A /* NotificationCenter+MainThread.swift in Sources */, - F33918C92C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, - F7490E7F29882C73009DCE94 /* NCManageDatabase+Activity.swift in Sources */, - B5BEBD962E93AED80002C9E5 /* AppUpdater.swift in Sources */, - B5BEBD832E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD842E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD852E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5086,8 +4468,6 @@ F7C30DFB291BCF790017149B /* NCNetworkingE2EECreateFolder.swift in Sources */, F73EF7DA2B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, F70557BF2ED44F1800135623 /* UploadBannerView.swift in Sources */, - B5E2E7342DAE896200AB2EDD /* NCSectionHeaderMenu.swift in Sources */, - F79ED0F32D2FCA7100A389D9 /* NCRecommendationsCell.swift in Sources */, F7817CFB29801A3500FFBC65 /* Data+Extension.swift in Sources */, F72429362AFE39860040AEF3 /* NCLivePhoto.swift in Sources */, F74B91E82F51D45A0050813D /* ErrorBannerView.swift in Sources */, @@ -5100,12 +4480,6 @@ F7CF06872E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F7FDFF722E437E55000D7688 /* NCAccountRequest.swift in Sources */, F7CAFE202F17A37C00DB35A5 /* NCNetworking+Actor.swift in Sources */, - F7327E372B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift in Sources */, - F7F3E58D2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, - F73EF7D22B0225BA0087E6E9 /* NCManageDatabase+Tag.swift in Sources */, - F74B6D982A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, - F7CF06872E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, - F7707687263A853700A1BA94 /* NCContentPresenter.swift in Sources */, F343A4B62A1E084200DDA874 /* PHAsset+Extension.swift in Sources */, F70BFC7520E0FA7D00C67599 /* NCUtility.swift in Sources */, F71DFA222F59FB9A003A93C5 /* View+Extension.swift in Sources */, @@ -5116,19 +4490,13 @@ F79ED0F12D2FCA5B00A389D9 /* NCSectionFirstHeader.swift in Sources */, F79B646126CA661600838ACA /* UIControl+Extension.swift in Sources */, F77C973A2953143A00FDDD09 /* NCCameraRoll.swift in Sources */, - B5BEBDD62E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */, - B5BEBDD72E93B2450002C9E5 /* TextTableViewCell.swift in Sources */, - B5BEBDD82E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */, F740BEF02A35C2AD00E9B6D5 /* UILabel+Extension.swift in Sources */, F7C30E01291BD2610017149B /* NCNetworkingE2EERename.swift in Sources */, F75F4BC22FD008D7009E55ED /* Optional+Extension.swift in Sources */, AF4BF61A27562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, AF4BF615275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, F798F0E225880608000DAFFD /* UIColor+Extension.swift in Sources */, - F7327E3F2B73B92800A462C7 /* NCNetworking+Synchronization.swift in Sources */, - F7CF067F2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7C9B9202B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, - B5BEBD942E93AED80002C9E5 /* AppUpdater.swift in Sources */, F78E2D6829AF02DB0024D4F3 /* Database.swift in Sources */, F7DF7B432F1A373E00514020 /* HelperBanner.swift in Sources */, AA8D31562D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, @@ -5147,6 +4515,7 @@ F7D4BF322CA2E8D800A5E746 /* TOPasscodeCircleImage.m in Sources */, F7CAFE192F168F6000DB35A5 /* NCDebouncer.swift in Sources */, F7D4BF332CA2E8D800A5E746 /* TOPasscodeView.m in Sources */, + F77E8C252E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, F7D4BF342CA2E8D800A5E746 /* TOPasscodeCircleButton.m in Sources */, F7D4BF352CA2E8D800A5E746 /* TOPasscodeInputField.m in Sources */, F7D4BF362CA2E8D800A5E746 /* TOSettingsKeypadImage.m in Sources */, @@ -5163,9 +4532,6 @@ AF22B206277B4E4C00DAB0CC /* NCCreateFormUploadConflict.swift in Sources */, F74D50362C9856D300BBBF4C /* NCCollectionViewDataSource.swift in Sources */, F7A573692E190387009C9257 /* NCShareExtensionData.swift in Sources */, - B5BEBD862E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD872E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD882E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F7BD71E62636EAFC00643C34 /* NCNetworkingE2EE.swift in Sources */, F7F878AF1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */, F7327E3B2B73B8D600A462C7 /* Array+Extension.swift in Sources */, @@ -5179,9 +4545,6 @@ F702F2D025EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F72437802C10B92400C7C68D /* NCSharePermissions.swift in Sources */, F7EDE4DB262D7BA200414FE6 /* NCCellMain.swift in Sources */, - F343A4BE2A1E734600DDA874 /* Optional+Extension.swift in Sources */, - F72437802C10B92400C7C68D /* NCPermissions.swift in Sources */, - F7EDE4DB262D7BA200414FE6 /* NCCellProtocol.swift in Sources */, F72944F62A8424F800246839 /* NCEndToEndMetadataV1.swift in Sources */, F73EF7BA2B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, F711A4EB2AF9327D00095DD8 /* UIImage+animatedGIF.m in Sources */, @@ -5194,7 +4557,6 @@ F749B64D297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F763412D2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, F72FD3B8297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, - B5BEBDCC2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */, F7A76DC8256A71CD00119AB3 /* UIImage+Extension.swift in Sources */, F7FFFCA42FB3088E0015441E /* NCShareExtension+Assistant.swift in Sources */, F3E173C32C9B1067006D177A /* AwakeMode.swift in Sources */, @@ -5203,40 +4565,28 @@ F763D2A02A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F757CC8529E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F768823A2C0DD230001CF441 /* NCPreferences.swift in Sources */, - F768823A2C0DD230001CF441 /* NCKeychain.swift in Sources */, - B5BEBDF92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBDFA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, - F7386E472DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, F737DA9E2B7B893C0063BAFC /* NCPasscode.swift in Sources */, - F7817D0129802D5F00FFBC65 /* NCViewCertificateDetails.swift in Sources */, F7C30DF7291BC0D30017149B /* NCNetworkingE2EEUpload.swift in Sources */, F7C687EC2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, F33918C72C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, F78A10C229322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F79FFB272A97C24A0055EEA4 /* NCNetworkingE2EEMarkFolder.swift in Sources */, F7D68FCE28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, + F3F442F12DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, AF22B217277D196700DAB0CC /* NCShareExtension+DataSource.swift in Sources */, F73EF7E22B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F77DD6AB2C5CC093009448FB /* NCSession.swift in Sources */, F74B91E62F51D4170050813D /* InfoBannerView.swift in Sources */, F76D364728A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, - B560B9612EF559C100E55904 /* NCAccountRequest.swift in Sources */, - F7BFFD2A2C8854200029A201 /* NCHud.swift in Sources */, F749B654297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, AF22B208277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.swift in Sources */, F7DA0F662F66AA0D0033020C /* ShowBanner.swift in Sources */, F73EF7C22B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, - F7327E2B2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F7148041262EBE4000693E51 /* NCShareExtension.swift in Sources */, F71FA7992F3508C600E86192 /* NCNetworking+WebDAV.swift in Sources */, F76B3CCF1EAE01BD00921AC9 /* NCBrand.swift in Sources */, F72944F32A84246400246839 /* NCEndToEndMetadataV2.swift in Sources */, F7BAADCC1ED5A87C00B7EAD4 /* NCManageDatabase.swift in Sources */, - B5BEBDB22E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDB32E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDB42E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDB52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, - F7327E322B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5244,11 +4594,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F793E5A128B76541005E4B02 /* NotificationCenter+MainThread.swift in Sources */, - B5BEBDFF2E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBE002E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, F76DEE9928F808AF0041B1C9 /* LockscreenWidgetView.swift in Sources */, - F7817D0029802D3D00FFBC65 /* NCViewCertificateDetails.swift in Sources */, F78302F928B4C3E600B84583 /* NCManageDatabase+Account.swift in Sources */, F7E0710128B13BB00001B882 /* DashboardData.swift in Sources */, F783030328B4C4DD00B84583 /* ThreadSafeDictionary.swift in Sources */, @@ -5264,22 +4610,15 @@ F711D63128F44801003F43C8 /* IntentHandler.swift in Sources */, F76DEE9728F808AF0041B1C9 /* LockscreenData.swift in Sources */, F72EA95A28B7BD0D00C88F0C /* FilesWidgetView.swift in Sources */, - F7CF067C2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, - F768823C2C0DD231001CF441 /* NCKeychain.swift in Sources */, + F768823C2C0DD231001CF441 /* NCPreferences.swift in Sources */, F71F6D082B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F78302FE28B4C44700B84583 /* NCBrand.swift in Sources */, F749B64B297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, AA8D31572D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, F7864ACD2A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, - F343A4B42A1E084100DDA874 /* PHAsset+Extension.swift in Sources */, - F793E59F28B764F6005E4B02 /* NCContentPresenter.swift in Sources */, F76DEE9828F808AF0041B1C9 /* LockscreenWidgetProvider.swift in Sources */, F78A10C029322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F78302FA28B4C3EA00B84583 /* NCManageDatabase+Metadata.swift in Sources */, - B5BEBDA92E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDAA2E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDAB2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDAC2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F7B769A92B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, F78E2D6629AF02DB0024D4F3 /* Database.swift in Sources */, F77DD6A92C5CC093009448FB /* NCSession.swift in Sources */, @@ -5289,21 +4628,12 @@ F7BF9D832934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F757CC8329E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F73EF7A82B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, - F7327E212B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */, - B5BEBD7D2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD7E2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD7F2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, - F7BFFD2B2C8854430029A201 /* NCHud.swift in Sources */, - F7386E492DA90E0F009A00F6 /* NCAppVersionManager.swift in Sources */, - F7327E3A2B73B8D500A462C7 /* Array+Extension.swift in Sources */, F74B6D962A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, F711A4E32AF9310400095DD8 /* NCUtility+Image.swift in Sources */, F749B652297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F763D29E2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F711A4DD2AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, F724377C2C10B92200C7C68D /* NCSharePermissions.swift in Sources */, - F724377C2C10B92200C7C68D /* NCPermissions.swift in Sources */, - F36E64FB2B9733F10085ABB5 /* UIView+Extension.swift in Sources */, F77ED59328C9CEA000E24ED0 /* ToolbarWidgetProvider.swift in Sources */, F72A17D828B221E300F3F159 /* DashboardWidgetView.swift in Sources */, F77ED59528C9CEA400E24ED0 /* ToolbarWidgetView.swift in Sources */, @@ -5315,13 +4645,12 @@ F76340F72EBDE9760056F538 /* NCManageDatabaseCore.swift in Sources */, F75F4BC02FD008D7009E55ED /* Optional+Extension.swift in Sources */, F7D496FD2EBFA6D9004F9823 /* String+Extension.swift in Sources */, - F33918C52C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, - F7327E292B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F7D7A7702DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, F72EA95828B7BC4F00C88F0C /* FilesData.swift in Sources */, F78302FF28B4C45000B84583 /* NCUtilityFileSystem.swift in Sources */, F73EF7B82B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, F73EF7C02B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, + F3F442EF2DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, F3E173C12C9B1067006D177A /* AwakeMode.swift in Sources */, F75DD766290ABB25002EB562 /* Intent.intentdefinition in Sources */, F7D68FCD28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, @@ -5331,7 +4660,6 @@ F72FD3B6297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, F783030128B4C49700B84583 /* UIImage+Extension.swift in Sources */, F72EA95428B7BABA00C88F0C /* FilesWidgetProvider.swift in Sources */, - B5BEBD992E93AED80002C9E5 /* AppUpdater.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5346,16 +4674,6 @@ F702F2D125EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F76341012EBDF6710056F538 /* NCManageDatabase+Tag.swift in Sources */, F7434B3820E2400600417916 /* NCBrand.swift in Sources */, - F711A4E02AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, - F76D364828A4F8BF00214537 /* NCActivityIndicator.swift in Sources */, - F7327E242B73A42F00A462C7 /* NCNetworking+Download.swift in Sources */, - F7C687ED2D22BDE5004757BC /* NCManageDatabase+RecommendedFiles.swift in Sources */, - F7817D0229802D7700FFBC65 /* NCViewCertificateDetails.swift in Sources */, - F7CF06842E1127460063AD04 /* NCManageDatabase+Metadata+Create.swift in Sources */, - F7434B3820E2400600417916 /* NCBrand.swift in Sources */, - F7327E332B73A86700A462C7 /* NCNetworking+WebDAV.swift in Sources */, - F7411C572D7B26D700F57358 /* NCNetworking+ServerError.swift in Sources */, - F724377F2C10B92400C7C68D /* NCPermissions.swift in Sources */, F785EE9E2461A09900B3F945 /* NCNetworking.swift in Sources */, F771E3D320E2392D00AFB62D /* FileProviderExtension.swift in Sources */, F7D61EAB2EBF16B6007F865B /* NCManageDatabase+TableCapabilities.swift in Sources */, @@ -5371,43 +4689,6 @@ F7E742F52EC0A3DD00E2362A /* NCManageDatabase+Directory.swift in Sources */, F7E742F92EC0A5BC00E2362A /* NCManageDatabase+Metadata.swift in Sources */, F763412E2EBE255B0056F538 /* NCNetworking+NextcloudKitDelegate.swift in Sources */, - F7D7A76F2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, - AF4BF616275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */, - F343A4B72A1E084300DDA874 /* PHAsset+Extension.swift in Sources */, - B5BEBD972E93AED80002C9E5 /* AppUpdater.swift in Sources */, - F7434B3620E23FE000417916 /* NCManageDatabase.swift in Sources */, - F798F0E725880609000DAFFD /* UIColor+Extension.swift in Sources */, - F74B6D992A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, - F7327E2C2B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, - B5BEBE032E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBE042E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, - F7D68FCF28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */, - F33EE6F62BF4C9B200CA1A51 /* PKCS12.swift in Sources */, - F7A3DB922DDE23B5008F7EC8 /* NCDebouncer.swift in Sources */, - F7F3E58B2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, - F73EF7C32B02250B0087E6E9 /* NCManageDatabase+GPS.swift in Sources */, - F7C9B9212B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, - F359D86B2A7D03420023F405 /* NCUtility+Exif.swift in Sources */, - F7864AD02A78FE73004870E0 /* NCManageDatabase+LocalFile.swift in Sources */, - F7327E402B73B92800A462C7 /* NCNetworking+Synchronization.swift in Sources */, - AF4BF61B27562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, - F70460542499095400BB98A7 /* NotificationCenter+MainThread.swift in Sources */, - F78A10C329322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, - F36E64FE2B9735920085ABB5 /* NCCellProtocol.swift in Sources */, - F7BF9D862934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, - F7E98C1827E0D0FC001F9F19 /* NCManageDatabase+Video.swift in Sources */, - F785EEA42461A4A600B3F945 /* NCUtility.swift in Sources */, - F79B646226CA661600838ACA /* UIControl+Extension.swift in Sources */, - F7C1DAEF2C3D1DF4000BDC69 /* FileProviderDomain.swift in Sources */, - B5BEBDC22E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDC32E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDC42E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDC52E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, - B5BEBD8F2E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD902E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD912E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, - F73EF7AB2B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, - F7327E392B73B8D400A462C7 /* Array+Extension.swift in Sources */, F78E2D6929AF02DB0024D4F3 /* Database.swift in Sources */, F771E3F320E239A600AFB62D /* FileProviderData.swift in Sources */, F7E742F32EC0A10C00E2362A /* NCManageDatabase+Account.swift in Sources */, @@ -5416,12 +4697,6 @@ F71F6D0B2B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F771E3F820E239B500AFB62D /* FileProviderExtension+Thumbnail.swift in Sources */, F76882392C0DD230001CF441 /* NCPreferences.swift in Sources */, - F76882392C0DD230001CF441 /* NCKeychain.swift in Sources */, - F39170AB2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, - F7CF067D2E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, - F343A4BF2A1E734600DDA874 /* Optional+Extension.swift in Sources */, - AF4BF62027562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */, - F73ADD2226554FD10069EA0D /* NCContentPresenter.swift in Sources */, F77DD6AC2C5CC093009448FB /* NCSession.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -5431,9 +4706,11 @@ buildActionMask = 2147483647; files = ( F77444F522281649000D5EB0 /* NCMediaCell.swift in Sources */, - F78C6FDE296D677300C952C3 /* NCContextMenu.swift in Sources */, + F78C6FDE296D677300C952C3 /* NCContextMenuMain.swift in Sources */, + A5A87F9E4B0E4441A6A4BC20 /* NCContextMenuProfile.swift in Sources */, + CB3666201AF7550816B5CD6A /* NCContextMenuComment.swift in Sources */, + 2F96A1BAFB10ACFEAC68EF1C /* NCContextMenuPlayerTracks.swift in Sources */, F7E402332BA89551007E5609 /* NCTrash+Networking.swift in Sources */, - F7E7AEA72BA32D0000512E52 /* NCCollectionViewUnifiedSearch.swift in Sources */, F73EF7A72B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, F33918C42C7CD8F2002D9AA1 /* FileNameValidator+Extensions.swift in Sources */, F39170AD2CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, @@ -5443,25 +4720,12 @@ F702F30825EE5D47008F8E80 /* NCPopupViewController.swift in Sources */, F3C6F6F62F34CC0900C531B6 /* NCAssistantChatConversationsModel.swift in Sources */, F76340FC2EBDF64D0056F538 /* NCManageDatabase+Tag.swift in Sources */, - F3CA33842D10726E00672333 /* NCLoginPollModel.swift in Sources */, - B5E2E7282DAE880700AB2EDD /* NCCreateFormUploadVoiceNote.swift in Sources */, - B5E2E7292DAE880700AB2EDD /* NCCreateFormUploadDocuments.swift in Sources */, - 566EB8032B3D7B5F00FB7CAD /* PasswordInputField.swift in Sources */, F733598125C1C188002ABA72 /* NCAskAuthorization.swift in Sources */, 370D26AF248A3D7A00121797 /* NCCellMain.swift in Sources */, - 56A32E792CE4B75C0020EFF5 /* AnalyticsHelper.swift in Sources */, - 56A32E7A2CE4B75C0020EFF5 /* AnalyticsService.swift in Sources */, - 56A32E7B2CE4B75C0020EFF5 /* MoEngageAnalytics.swift in Sources */, - 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */, F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, F7DF7B3F2F1A2EF900514020 /* WarningBannerView.swift in Sources */, F768822C2C0DD1E7001CF441 /* NCPreferences.swift in Sources */, F7CAFE1D2F17A35F00DB35A5 /* NCNetworking+Actor.swift in Sources */, - 370D26AF248A3D7A00121797 /* NCCellProtocol.swift in Sources */, - F32FADA92D1176E3007035E2 /* UIButton+Extension.swift in Sources */, - F768822C2C0DD1E7001CF441 /* NCKeychain.swift in Sources */, - F7BFFD282C8846020029A201 /* NCHud.swift in Sources */, - F71CD6CA2930D7B1006C95C1 /* NCApplicationHandle.swift in Sources */, F3754A7D2CF87D600009312E /* SetupPasscodeView.swift in Sources */, F73EF7D72B0226080087E6E9 /* NCManageDatabase+Tip.swift in Sources */, F3374A842D64AC31002A38F9 /* AssistantLabelStyle.swift in Sources */, @@ -5485,16 +4749,6 @@ F7BD0A002C468925003A4A6D /* NCMedia+CollectionViewDataSource.swift in Sources */, F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */, F7245924289BB50C00474787 /* ThreadSafeDictionary.swift in Sources */, - F73F537F1E929C8500F8678D /* NCMore.swift in Sources */, - B5BEBE1A2E93BE200002C9E5 /* PNGImageSaveSwitchView.swift in Sources */, - B5BEBE1B2E93BE200002C9E5 /* FileNameInputTextField.swift in Sources */, - B5BEBE1C2E93BE200002C9E5 /* PdfWithoutOcrSwitchView.swift in Sources */, - B5BEBE1D2E93BE200002C9E5 /* TextFileWithOcrSwitchView.swift in Sources */, - B5BEBE1E2E93BE200002C9E5 /* ScanDocumentPathView.swift in Sources */, - B5BEBE1F2E93BE200002C9E5 /* SetPDFPasswordSwitchView.swift in Sources */, - B5BEBE202E93BE200002C9E5 /* JPGImageSaveSwitchView.swift in Sources */, - B5BEBE212E93BE200002C9E5 /* PasswordInputField.swift in Sources */, - B5BEBE222E93BE200002C9E5 /* PdfWithOcrSwitchView.swift in Sources */, F702F2CF25EE5B5C008F8E80 /* NCGlobal.swift in Sources */, F794E13F2BBC0F70003693D7 /* SceneDelegate.swift in Sources */, F714A1472ED84AF90050A43B /* HudBannerView.swift in Sources */, @@ -5502,7 +4756,6 @@ F72CD63A25C19EBF00F46F9A /* NCAutoUpload.swift in Sources */, AF93471D27E2361E002537EE /* NCShareAdvancePermissionFooter.swift in Sources */, AF1A9B6427D0CA1E00F17A9E /* UIAlertController+Extension.swift in Sources */, - F73B422C2476764F00A30FD3 /* NCNotification.swift in Sources */, F7FA80012C0F4F3B0072FC60 /* NCUploadAssetsView.swift in Sources */, F74230F32C79B57200CA1ACA /* NCNetworking+Task.swift in Sources */, F757CC8229E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, @@ -5512,9 +4765,7 @@ F77444F8222816D5000D5EB0 /* NCPickerViewController.swift in Sources */, F77BB74A2899857B0090FC19 /* UINavigationController+Extension.swift in Sources */, F70898672EDDB39B00EF85BD /* NCNetworking+TransferDelegate.swift in Sources */, - F7327E282B73A53400A462C7 /* NCNetworking+Upload.swift in Sources */, F769454622E9F1B0000A798A /* NCShareCommon.swift in Sources */, - B5BEBDC92E93AFF10002C9E5 /* NCSelectableNavigationView.swift in Sources */, F70753F12542A9A200972D44 /* NCViewerMedia.swift in Sources */, F799DF822C4B7DCC003410B5 /* NCSectionFooter.swift in Sources */, F76B649C2ADFFAED00014640 /* NCImageCache.swift in Sources */, @@ -5525,7 +4776,6 @@ F768822E2C0DD1E7001CF441 /* NCSettingsBundleHelper.swift in Sources */, F72408332B8A27C900F128E2 /* NCMedia+Command.swift in Sources */, F755CB402B8CB13C00CE27E9 /* NCMediaLayout.swift in Sources */, - B5BEBDCE2E93B0210002C9E5 /* NCSectionHeaderMenu.swift in Sources */, F73EF7B72B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, AF4BF61927562A4B0081CEEF /* NCManageDatabase+Metadata.swift in Sources */, F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */, @@ -5537,29 +4787,35 @@ F758B460212C56A400515F55 /* NCScan.swift in Sources */, F76882262C0DD1E7001CF441 /* NCSettingsView.swift in Sources */, F78ACD52219046DC0088454D /* NCSectionFirstHeader.swift in Sources */, + F743C89E2E5B25A1000173A9 /* UIScene+Extension.swift in Sources */, F72944F52A8424F800246839 /* NCEndToEndMetadataV1.swift in Sources */, F710D2022405826100A6033D /* NCContextMenuViewer.swift in Sources */, - F710D2022405826100A6033D /* NCViewer+Menu.swift in Sources */, F765E9CD295C585800A09ED8 /* NCUploadScanDocument.swift in Sources */, F741C2242B6B9FD600E849BB /* NCMediaSelectTabBar.swift in Sources */, - F77A697D250A0FBC00FF1708 /* NCCollectionViewCommon+Menu.swift in Sources */, F7BF9D822934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F7110AE02F9773230095AA5C /* AppDelegate+AppRefresh.swift in Sources */, AA8D31662D411FA100FE2775 /* NCShareDateCell.swift in Sources */, + F3F442EE2DDE292D00FD701F /* NCMetadataPermissions.swift in Sources */, F3374A812D64AB9F002A38F9 /* StatusInfo.swift in Sources */, AF7E504E27A2D8FF00B5E4AF /* UIBarButton+Extension.swift in Sources */, AA8D31682D41224800FE2775 /* NCShareToggleCell.swift in Sources */, F7A846DE2BB01ACB0024816F /* NCTrashCellProtocol.swift in Sources */, F7236DDF2F7C00E600F9D722 /* HudIndeterminateBannerView.swift in Sources */, + B55AFB6E2FE2A04C00A1A1A4 /* MoEngageAnalytics.swift in Sources */, + B55AFB6F2FE2A04C00A1A1A4 /* AppUpdater.swift in Sources */, + B55AFB702FE2A04C00A1A1A4 /* TealiumHelper.swift in Sources */, + B55AFB712FE2A04C00A1A1A4 /* AnalyticsService.swift in Sources */, + B55AFB722FE2A04C00A1A1A4 /* AnalyticsHelper.swift in Sources */, + B55AFB732FE2A04C00A1A1A4 /* NCEmptyDataSet.swift in Sources */, + B55AFB742FE2A04C00A1A1A4 /* AdjustHelper.m in Sources */, F799DF852C4B7E56003410B5 /* NCSectionHeader.swift in Sources */, F78A10BF29322E8A008499B8 /* NCManageDatabase+Directory.swift in Sources */, F7743A122C33F0A20034F670 /* NCCollectionViewCommon+CollectionViewDelegate.swift in Sources */, F7D60CAF2C941ACB008FBFDD /* NCMediaPinchGesture.swift in Sources */, + F71916142E2901FB00E13E96 /* NCNetworking+Upload.swift in Sources */, F704B5E92430C0B800632F5F /* NCCreateFormUploadConflictCell.swift in Sources */, F72D404923D2082500A97FD0 /* NCViewerDirectEditing.swift in Sources */, AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, - F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */, - AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */, F77BB746289984CA0090FC19 /* UIViewController+Extension.swift in Sources */, F700510522DF6A89003A3356 /* NCShare.swift in Sources */, F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */, @@ -5568,7 +4824,6 @@ F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */, F724377B2C10B83E00C7C68D /* NCSharePermissions.swift in Sources */, F317C82E2E844C5300761AEA /* ClientIntegrationUIViewer.swift in Sources */, - F724377B2C10B83E00C7C68D /* NCPermissions.swift in Sources */, F794E13D2BBBFF2E003693D7 /* NCMainTabBarController.swift in Sources */, F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F7D4BF3D2CA2E8D800A5E746 /* TOPasscodeKeypadView.m in Sources */, @@ -5605,29 +4860,16 @@ F3A047972BD2668800658E7B /* NCAssistantEmptyView.swift in Sources */, F757CC8D29E82D0500F31428 /* NCGroupfolders.swift in Sources */, F34BDB3A2F5744EC007A222C /* UINavigationItem+Extension.swift in Sources */, - F3BB46542A3A1E9D00461F6E /* CCCellMore.swift in Sources */, - AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */, F7F3E58E2D3BB65600A32B14 /* NCNetworking+Recommendations.swift in Sources */, F7A0D1352591FBC5008F8A13 /* String+Extension.swift in Sources */, F7CEE6012BA9A5C9003EFD89 /* NCTrashGridCell.swift in Sources */, F70557BD2ED44F1800135623 /* UploadBannerView.swift in Sources */, - F70557BE2ED44F1800135623 /* ErrorBannerView.swift in Sources */, - 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, - F77B0E5F1D118A16002130FE /* NCSettings.m in Sources */, - 566EB8062B3D7B5F00FB7CAD /* PdfWithOcrSwitchView.swift in Sources */, F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */, F7E7AEA52BA32C6500512E52 /* NCCollectionViewDownloadThumbnail.swift in Sources */, AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */, - B560B95A2EF5597A00E55904 /* NCAccount.swift in Sources */, - B560B95B2EF5597A00E55904 /* NCShareAccounts.swift in Sources */, - B560B95C2EF5597A00E55904 /* NCAccountSettingsModel.swift in Sources */, - B560B95D2EF5597A00E55904 /* NCAccountSettingsView.swift in Sources */, - B560B95E2EF5597A00E55904 /* NCAccountRequest.swift in Sources */, - B5BEBE062E93BE0C0002C9E5 /* NCCreateFormUploadScanDocument.swift in Sources */, - F70460522499061800BB98A7 /* NotificationCenter+MainThread.swift in Sources */, F3C587AE2D47E4FE004532DB /* PHAssetCollectionThumbnailLoader.swift in Sources */, F78F74362163781100C2ADAD /* NCTrash.swift in Sources */, - F39298972A3B12CB00509762 /* BaseNCMoreCell.swift in Sources */, + F71638922FA0C20C00A913B7 /* NCMoreView.swift in Sources */, AF2D7C7C2742556F00ADF566 /* NCShareLinkCell.swift in Sources */, F7C55C512FB4A658004A974F /* NCAssistantInputModel.swift in Sources */, F7E41316294A19B300839300 /* UIView+Extension.swift in Sources */, @@ -5651,7 +4893,6 @@ F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */, F7A7FDDD2C2DBD6200E9A93A /* NCDeepLinkHandler.swift in Sources */, F778231E2C42C07C001BB94F /* NCCollectionViewCommon+MediaLayout.swift in Sources */, - 3781B9B023DB2B7E006B4B1D /* AppDelegate+Menu.swift in Sources */, F710D1F52405770F00A6033D /* NCViewerPDF.swift in Sources */, F72EC7242F45C81600A2135C /* NotificationCenter+Extension.swift in Sources */, F389C9F52CEE383300049762 /* SelectAlbumView.swift in Sources */, @@ -5663,8 +4904,6 @@ F7501C332212E57500FB1415 /* NCMedia.swift in Sources */, F7411C552D7B26D700F57358 /* NCNetworking+ServerError.swift in Sources */, F72944F22A84246400246839 /* NCEndToEndMetadataV2.swift in Sources */, - 566FCF5B2B3ECD3400168DEA /* AdjustHelper.m in Sources */, - F72944F22A84246400246839 /* NCEndToEndMetadataV20.swift in Sources */, F78026122E9CFA6300B63436 /* NCTransfersModel.swift in Sources */, F7EF2AEB2E43157B0081B2C9 /* NCNotification.swift in Sources */, F70BFC7420E0FA7D00C67599 /* NCUtility.swift in Sources */, @@ -5691,7 +4930,6 @@ F765F73125237E3F00391DBE /* NCRecent.swift in Sources */, F76B3CCE1EAE01BD00921AC9 /* NCBrand.swift in Sources */, F7FA7FFC2C0F4EE40072FC60 /* NCViewerQuickLookView.swift in Sources */, - B5BEBDC72E93AF7E0002C9E5 /* NCLoginWeb.swift in Sources */, F3A0479B2BD2668800658E7B /* NCAssistant.swift in Sources */, F359D8672A7D03420023F405 /* NCUtility+Exif.swift in Sources */, F7A03E352D427312007AA677 /* NCMainNavigationController.swift in Sources */, @@ -5702,6 +4940,7 @@ F702F30125EE5D2C008F8E80 /* NYMnemonic.m in Sources */, AF93474E27E3F212002537EE /* NCShareNewUserAddComment.swift in Sources */, F7C30DFD291BD0B80017149B /* NCNetworkingE2EEDelete.swift in Sources */, + F77E8C232E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, F76882302C0DD1E7001CF441 /* NCFileNameModel.swift in Sources */, F7CF06882E1127460063AD04 /* NCManageDatabase+CreateMetadata.swift in Sources */, F72FD3B5297ED49A00075D28 /* NCManageDatabase+E2EE.swift in Sources */, @@ -5727,11 +4966,13 @@ AAFC0D092F9AA10000F0A001 /* NCFocusedAutoUploadCloudAnimation.swift in Sources */, AAFC0D0B2F9AA10000F0A001 /* NCAutoUploadCounter.swift in Sources */, F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBar.swift in Sources */, + F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */, F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */, - F75D19E325EFE09000D74598 /* NCTrash+Menu.swift in Sources */, + F75D19E325EFE09000D74598 /* NCContextMenuTrash.swift in Sources */, F34E1ADB2ECC842B00FA10C3 /* NCStatusMessageModel.swift in Sources */, F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */, AA8D316E2D4123B200FE2775 /* NCShareDownloadLimitTableViewControllerDelegate.swift in Sources */, + F36C514F2E89393C0097E5F7 /* UIView+BlurVibrancy.swift in Sources */, AA8D316F2D4123B200FE2775 /* NCShareDownloadLimitTableViewController.swift in Sources */, AA8D31702D4123B200FE2775 /* DownloadLimitViewModel.swift in Sources */, AA8D31712D4123B200FE2775 /* NCShareDownloadLimitViewController.swift in Sources */, @@ -5749,6 +4990,7 @@ F749B651297B0F2400087535 /* NCManageDatabase+Avatar.swift in Sources */, F7FAFD3A28BFA948000777FE /* NCContextMenuNotification.swift in Sources */, F74C0436253F1CDC009762AB /* NCShares.swift in Sources */, + F79699E72E689F68000EC82A /* NCMediaNavigationController.swift in Sources */, F7AC1CB028AB94490032D99F /* Array+Extension.swift in Sources */, F7AE00F5230D5F9E007ACF8A /* NCLoginProvider.swift in Sources */, F707C26521A2DC5200F6181E /* NCStoreReview.swift in Sources */, @@ -5765,25 +5007,24 @@ F7C30DFA291BCF790017149B /* NCNetworkingE2EECreateFolder.swift in Sources */, F72CA05C2F5051DB002E2F06 /* AlertActionBannerView.swift in Sources */, F76995F42F9A4AC400291FA7 /* NCCollectionViewCommon+UIEditMenuInteractionDelegate.swift in Sources */, - B5BEBDDC2E93B2450002C9E5 /* NCCreateFormUploadDocuments.swift in Sources */, - B5BEBDDD2E93B2450002C9E5 /* TextTableViewCell.swift in Sources */, - B5BEBDDE2E93B2450002C9E5 /* NCCreateFormUploadVoiceNote.swift in Sources */, F722133B2D40EF9D002F7438 /* NCFilesNavigationController.swift in Sources */, F7BC288026663F85004D46C5 /* NCViewCertificateDetails.swift in Sources */, F78B87E92B62550800C65ADC /* NCMediaDownloadThumbnail.swift in Sources */, D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */, F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */, + F7FDFF6B2E437E55000D7688 /* NCAccountRequest.swift in Sources */, + F7FDFF6C2E437E55000D7688 /* NCShareAccounts.swift in Sources */, + F7FDFF6D2E437E55000D7688 /* NCAccountSettingsModel.swift in Sources */, + F7FDFF6E2E437E55000D7688 /* NCAccountSettingsView.swift in Sources */, + F7FDFF6F2E437E55000D7688 /* NCAccount.swift in Sources */, F769454822E9F20D000A798A /* NCShareNetworking.swift in Sources */, F749B64A297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7C9555521F0C5470024296E /* NCActivity.swift in Sources */, - B5BEBDA32E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDA42E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDA52E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDA62E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F7725A60251F33BB00D125E0 /* NCFiles.swift in Sources */, F704B5E52430AA8000632F5F /* NCCreateFormUploadConflict.swift in Sources */, F7865FF12F39D32F00D09AE4 /* NCCollectionViewCommon+Search.swift in Sources */, F7327E352B73AEDE00A462C7 /* NCNetworking+LivePhoto.swift in Sources */, + B55AFB762FE2A0BD00A1A1A4 /* NCLoginWeb.swift in Sources */, F76687072B7D067400779E3F /* NCAudioRecorderViewController.swift in Sources */, AA8E03DA2D2ED83300E7E89C /* TransientShare.swift in Sources */, F7A03E2F2D425A14007AA677 /* NCFavoriteNavigationController.swift in Sources */, @@ -5802,21 +5043,17 @@ F70CEF5623E9C7E50007035B /* UIColor+Extension.swift in Sources */, F76882242C0DD1E7001CF441 /* NCSettingsAdvancedView.swift in Sources */, F785129C2D7989B30087DDD0 /* NCNetworking+TermsOfService.swift in Sources */, - B5BEBDF12E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBDF22E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, F77C3F5B2D9BF8CD00F3C471 /* UITabBar+Extension.swift in Sources */, F7D7A76E2DCDD437003D2007 /* NCManageDatabase+AutoUpload.swift in Sources */, + F7F563042E15762B00631A11 /* MigrationMultiDomains.swift in Sources */, F75CA1472962F13700B01130 /* NCHUDView.swift in Sources */, F77BB748289985270090FC19 /* UITabBarController+Extension.swift in Sources */, F7DA0F672F66AA0D0033020C /* ShowBanner.swift in Sources */, F752BA052E58C05200616A26 /* Maintenance.swift in Sources */, - B5BEBD982E93AED80002C9E5 /* AppUpdater.swift in Sources */, F763D29D2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, + B55AFB5E2FE29BAC00A1A1A4 /* AppUtility.swift in Sources */, F76882252C0DD1E7001CF441 /* NCSettingsAdvancedModel.swift in Sources */, F7C7B489245EBA4100D93E60 /* NCViewerQuickLook.swift in Sources */, - B5BEBD892E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD8A2E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD8B2E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F758B45E212C569D00515F55 /* NCScanCell.swift in Sources */, F78B87E72B62527100C65ADC /* NCMediaDataSource.swift in Sources */, F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */, @@ -5870,21 +5107,14 @@ F7F1FB9D2E27CE7200C79E20 /* NCNetworking.swift in Sources */, F7A8D73528F17E16008BBE1C /* NCManageDatabase.swift in Sources */, F3F442F02DDE2A7700FD701F /* NCMetadataPermissions.swift in Sources */, - F343A4BD2A1E734600DDA874 /* Optional+Extension.swift in Sources */, - F7A8D73528F17E16008BBE1C /* NCManageDatabase.swift in Sources */, F7A8D74428F1827B008BBE1C /* ThreadSafeDictionary.swift in Sources */, F7C9739528F17131002C43E2 /* IntentHandler.swift in Sources */, F7A8D73D28F181D3008BBE1C /* NCUtilityFileSystem.swift in Sources */, - B5BEBD802E93AEA30002C9E5 /* AnalyticsService.swift in Sources */, - B5BEBD812E93AEA30002C9E5 /* MoEngageAnalytics.swift in Sources */, - B5BEBD822E93AEA30002C9E5 /* AnalyticsHelper.swift in Sources */, F73EF7E12B02266D0087E6E9 /* NCManageDatabase+Trash.swift in Sources */, F7C9B91F2B582F550064EA91 /* NCManageDatabase+SecurityGuard.swift in Sources */, F75DD767290ABB25002EB562 /* Intent.intentdefinition in Sources */, F72437812C10B92500C7C68D /* NCSharePermissions.swift in Sources */, F7D61EBE2EBF1878007F865B /* NCManageDatabase+Tag.swift in Sources */, - F72437812C10B92500C7C68D /* NCPermissions.swift in Sources */, - F39170A92CB82024006127BC /* FileAutoRenamer+Extensions.swift in Sources */, F749B64C297B0CBB00087535 /* NCManageDatabase+Share.swift in Sources */, F7A8D73F28F181EF008BBE1C /* NCGlobal.swift in Sources */, F74B6D972A7E239A00F03C5F /* NCManageDatabase+Chunk.swift in Sources */, @@ -5893,19 +5123,11 @@ F763D29F2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F7A8D73728F17E1E008BBE1C /* NCManageDatabase+Account.swift in Sources */, F77E8C202E79717D00EAE68F /* NCManageDatabase+LivePhoto.swift in Sources */, - F7A8D74328F1826F008BBE1C /* String+Extension.swift in Sources */, - F73EF7A32B021FAC0087E6E9 /* NCLivePhoto.swift in Sources */, - B5BEBD9A2E93AED80002C9E5 /* AppUpdater.swift in Sources */, - F7A8D73728F17E1E008BBE1C /* NCManageDatabase+Account.swift in Sources */, - F7817CFA29801A3500FFBC65 /* Data+Extension.swift in Sources */, F7BF9D842934CA21009EE9A6 /* NCManageDatabase+LayoutForView.swift in Sources */, F73EF7A92B0223900087E6E9 /* NCManageDatabase+Comments.swift in Sources */, - F7CF06812E0FF3990063AD04 /* NCAppStateManager.swift in Sources */, F7A8D73C28F181BC008BBE1C /* NCBrand.swift in Sources */, F711A4DE2AF92CAE00095DD8 /* NCUtility+Date.swift in Sources */, - F768823B2C0DD231001CF441 /* NCKeychain.swift in Sources */, - B5BEBDE92E93BDB40002C9E5 /* FolderPathCustomCell.swift in Sources */, - B5BEBDEA2E93BDB40002C9E5 /* NCCreateDocumentCustomTextField.swift in Sources */, + F768823B2C0DD231001CF441 /* NCPreferences.swift in Sources */, AA8D31532D41052300FE2775 /* NCManageDatabase+DownloadLimit.swift in Sources */, F7A8D74228F18261008BBE1C /* NCUtility.swift in Sources */, F7A8D73A28F17E28008BBE1C /* NCManageDatabase+Video.swift in Sources */, @@ -5924,10 +5146,6 @@ F7B769AA2B7A0B2000C1AAEB /* NCManageDatabase+Metadata+Session.swift in Sources */, F7A8D74028F18212008BBE1C /* UIImage+Extension.swift in Sources */, F73EF7B92B0224AB0087E6E9 /* NCManageDatabase+ExternalSites.swift in Sources */, - B5BEBDBC2E93AF010002C9E5 /* AppUtility.swift in Sources */, - B5BEBDBD2E93AF010002C9E5 /* AdjustHelper.m in Sources */, - B5BEBDBE2E93AF010002C9E5 /* TealiumHelper.swift in Sources */, - B5BEBDBF2E93AF010002C9E5 /* NCEmptyDataSet.swift in Sources */, F71F6D092B6A6A5E00F1EB15 /* ThreadSafeArray.swift in Sources */, F757CC8429E7F88B00F31428 /* NCManageDatabase+Groupfolders.swift in Sources */, F78E2D6729AF02DB0024D4F3 /* Database.swift in Sources */, @@ -6935,6 +6153,7 @@ F7F67BC91A24D27800EE80DA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; @@ -7002,6 +6221,7 @@ F7F67BCA1A24D27800EE80DA /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; @@ -7224,7 +6444,7 @@ repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 8.9.0; + minimumVersion = 12.0.0; }; }; F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */ = { @@ -7245,18 +6465,10 @@ }; F734B06428E75C0100E180D5 /* XCRemoteSwiftPackageReference "TLPhotoPicker" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/marinofaggiana/TLPhotoPicker"; - requirement = { - branch = master; - kind = branch; - }; - }; - F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/huri000/SwiftEntryKit"; + repositoryURL = "https://github.com/tilltue/TLPhotoPicker"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 1.2.7; + minimumVersion = 2.0.0; }; }; F753BA91281FD8010015BFB6 /* XCRemoteSwiftPackageReference "EasyTipView" */ = { @@ -7280,7 +6492,7 @@ repositoryURL = "https://github.com/nicklockwood/LRUCache"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 1.0.4; + minimumVersion = 1.0.7; }; }; F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */ = { @@ -7299,14 +6511,6 @@ kind = branch; }; }; - F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/scenee/FloatingPanel"; - requirement = { - kind = exactVersion; - version = 2.8.6; - }; - }; F77333862927A72100466E35 /* XCRemoteSwiftPackageReference "OpenSSL" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/krzyzanowskim/OpenSSL"; diff --git a/Tests/NextcloudUITests/AssistantUITests.swift b/Tests/NextcloudUITests/AssistantUITests.swift index 6fffeaee40..bce341aed9 100644 --- a/Tests/NextcloudUITests/AssistantUITests.swift +++ b/Tests/NextcloudUITests/AssistantUITests.swift @@ -1,153 +1,153 @@ -//// SPDX-FileCopyrightText: Nextcloud GmbH -//// SPDX-FileCopyrightText: 2025 Iva Horn -//// SPDX-License-Identifier: GPL-3.0-or-later -// -//import XCTest -// -///// -///// User interface tests for the download limits management on shares. -///// -//@MainActor -//final class AssistantUITests: BaseUIXCTestCase { -// let taskInputCreated = "TestTaskCreated" + UUID().uuidString -// let taskInputRetried = "TestTaskRetried" + UUID().uuidString -// let taskInputToEdit = "TestTaskToEdit" + UUID().uuidString -// let taskInputDeleted = "TestTaskDeleted" + UUID().uuidString -// -// // MARK: - Lifecycle -// -// override func setUp() async throws { -// try await super.setUp() -// continueAfterFailure = false -// -// // Handle alerts presented by the system. -// addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") -// addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") -// -// // Launch the app. -// app = XCUIApplication() -// app.launchArguments = ["UI_TESTING"] -// app.launch() -// -// try await logIn() -// -// // Set up test backend communication. -// backend = UITestBackend() -// -// try await backend.assertCapability(true, capability: \.assistant) -// } -// -// /// -// /// Leads to the Assistant screen. -// /// -// private func goToAssistant() { -// let button = app.tabBars["Tab Bar"].buttons["More"] -// guard button.await() else { return } -// button.tap() -// -// let talkStaticText = app.tables.staticTexts["Assistant"] -// talkStaticText.tap() -// } -// -// private func createTask(input: String) { -// app.navigationBars["Assistant"].buttons["ConversationsButton"].tap() -// -// let inputTextEditor = app.textViews["InputTextEditor"] -// inputTextEditor.await() -// inputTextEditor.typeText(input) -// app.navigationBars["New Free text to text prompt task"].buttons["Create"].tap() -// } -// -// private func retryTask() { -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// cell.staticTexts[taskInputRetried].press(forDuration: 2); -// -// let retryButton = app.buttons["TaskRetryContextMenu"] -// XCTAssertTrue(retryButton.waitForExistence(timeout: 2), "Edit button not found in context menu") -// retryButton.tap() -// } -// -// private func editTask() { -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// cell.staticTexts[taskInputToEdit].press(forDuration: 2); -// -// let editButton = app.buttons["TaskEditContextMenu"] -// XCTAssertTrue(editButton.waitForExistence(timeout: 2), "Edit button not found in context menu") -// editButton.tap() -// -// app.textViews["InputTextEditor"].typeText("Edited") -// app.navigationBars["Edit Free text to text prompt task"].buttons["Edit"].tap() -// } -// -// private func deleteTask() { -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// cell.staticTexts[taskInputDeleted].press(forDuration: 2); -// -// let deleteButton = app.buttons["TaskDeleteContextMenu"] -// XCTAssertTrue(deleteButton.waitForExistence(timeout: 2), "Edit button not found in context menu") -// deleteButton.tap() -// -// app.sheets.scrollViews.otherElements.buttons["Delete"].tap() -// } -// -// // MARK: - Tests -// -// func testCreateAssistantTask() async throws { -// goToAssistant() -// -// createTask(input: taskInputCreated) -// -// pullToRefresh() -// -// try await aMoment() -// -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// XCTAssert(cell.staticTexts[taskInputCreated].exists) -// } -// -// func testRetryAssistantTask() async throws { -// goToAssistant() -// -// createTask(input: taskInputRetried) -// -// retryTask() -// -// pullToRefresh() -// -// try await aMoment() -// -// let matchingElements = app.collectionViews.cells.staticTexts.matching(identifier: taskInputRetried) -// print(app.collectionViews.staticTexts.debugDescription) -// XCTAssertEqual(matchingElements.count, 2, "Expected 2 elements") -// } -// -// func testEditAssistantTask() async throws { -// goToAssistant() -// -// createTask(input: taskInputToEdit) -// -// editTask() -// -// pullToRefresh() -// -// try await aMoment() -// -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// XCTAssert(cell.staticTexts[taskInputToEdit + "Edited"].exists) -// } -// -// func testDeleteAssistantTask() async throws { -// goToAssistant() -// -// createTask(input: taskInputDeleted) -// -// deleteTask() -// -// pullToRefresh() -// -// try await aMoment() -// -// let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) -// XCTAssert(!cell.staticTexts[taskInputDeleted].exists) -// } -//} +// SPDX-FileCopyrightText: Nextcloud GmbH +// SPDX-FileCopyrightText: 2025 Iva Horn +// SPDX-License-Identifier: GPL-3.0-or-later + +import XCTest + +/// +/// User interface tests for the download limits management on shares. +/// +@MainActor +final class AssistantUITests: BaseUIXCTestCase { + let taskInputCreated = "TestTaskCreated" + UUID().uuidString + let taskInputRetried = "TestTaskRetried" + UUID().uuidString + let taskInputToEdit = "TestTaskToEdit" + UUID().uuidString + let taskInputDeleted = "TestTaskDeleted" + UUID().uuidString + + // MARK: - Lifecycle + + override func setUp() async throws { + try await super.setUp() + continueAfterFailure = false + + // Handle alerts presented by the system. + addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") + addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") + + // Launch the app. + app = XCUIApplication() + app.launchArguments = ["UI_TESTING"] + app.launch() + + try await logIn() + + // Set up test backend communication. + backend = UITestBackend() + + try await backend.assertCapability(true, capability: \.assistant) + } + + /// + /// Leads to the Assistant screen. + /// + private func goToAssistant() { + let button = app.tabBars["Tab Bar"].buttons["More"] + guard button.await() else { return } + button.tap() + + let talkStaticText = app.tables.staticTexts["Assistant"] + talkStaticText.tap() + } + + private func createTask(input: String) { + app.navigationBars["Assistant"].buttons["CreateButton"].tap() + + let inputTextEditor = app.textViews["InputTextEditor"] + inputTextEditor.await() + inputTextEditor.typeText(input) + app.navigationBars["New Free text to text prompt task"].buttons["Create"].tap() + } + + private func retryTask() { + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + cell.staticTexts[taskInputRetried].press(forDuration: 2); + + let retryButton = app.buttons["TaskRetryContextMenu"] + XCTAssertTrue(retryButton.waitForExistence(timeout: 2), "Edit button not found in context menu") + retryButton.tap() + } + + private func editTask() { + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + cell.staticTexts[taskInputToEdit].press(forDuration: 2); + + let editButton = app.buttons["TaskEditContextMenu"] + XCTAssertTrue(editButton.waitForExistence(timeout: 2), "Edit button not found in context menu") + editButton.tap() + + app.textViews["InputTextEditor"].typeText("Edited") + app.navigationBars["Edit Free text to text prompt task"].buttons["Edit"].tap() + } + + private func deleteTask() { + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + cell.staticTexts[taskInputDeleted].press(forDuration: 2); + + let deleteButton = app.buttons["TaskDeleteContextMenu"] + XCTAssertTrue(deleteButton.waitForExistence(timeout: 2), "Edit button not found in context menu") + deleteButton.tap() + + app.sheets.scrollViews.otherElements.buttons["Delete"].tap() + } + + // MARK: - Tests + + func testCreateAssistantTask() async throws { + goToAssistant() + + createTask(input: taskInputCreated) + + pullToRefresh() + + try await aMoment() + + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + XCTAssert(cell.staticTexts[taskInputCreated].exists) + } + + func testRetryAssistantTask() async throws { + goToAssistant() + + createTask(input: taskInputRetried) + + retryTask() + + pullToRefresh() + + try await aMoment() + + let matchingElements = app.collectionViews.cells.staticTexts.matching(identifier: taskInputRetried) + print(app.collectionViews.staticTexts.debugDescription) + XCTAssertEqual(matchingElements.count, 2, "Expected 2 elements") + } + + func testEditAssistantTask() async throws { + goToAssistant() + + createTask(input: taskInputToEdit) + + editTask() + + pullToRefresh() + + try await aMoment() + + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + XCTAssert(cell.staticTexts[taskInputToEdit + "Edited"].exists) + } + + func testDeleteAssistantTask() async throws { + goToAssistant() + + createTask(input: taskInputDeleted) + + deleteTask() + + pullToRefresh() + + try await aMoment() + + let cell = app.collectionViews.children(matching: .cell).element(boundBy: 0) + XCTAssert(!cell.staticTexts[taskInputDeleted].exists) + } +} diff --git a/Tests/NextcloudUITests/AutoUploadUITests.swift b/Tests/NextcloudUITests/AutoUploadUITests.swift index 414a77cf08..8c487e6f28 100644 --- a/Tests/NextcloudUITests/AutoUploadUITests.swift +++ b/Tests/NextcloudUITests/AutoUploadUITests.swift @@ -1,127 +1,127 @@ -//// SPDX-FileCopyrightText: Nextcloud GmbH -//// SPDX-FileCopyrightText: 2025 Iva Horn -//// SPDX-License-Identifier: GPL-3.0-or-later -// -//import XCTest -// -///// -///// User interface tests for the download limits management on shares. -///// -//@MainActor -//final class AutoUploadUITests: BaseUIXCTestCase { -// // MARK: - Lifecycle -// override func setUp() async throws { -// try await super.setUp() -// continueAfterFailure = false -// -// // Handle alerts presented by the system. -// addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") -// addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") -// -// // Launch the app. -// app = XCUIApplication() -// app.launchArguments = ["UI_TESTING"] -// app.launch() -// -// try await logIn() -// -// // Set up test backend communication. -// backend = UITestBackend() -// } -// -// private func goToAutoUpload() async throws { -// addUIInterruptionMonitor(withDescription: "Are you sure you want to upload all photos?", for: "Confirm") -// -// app.tabBars["Tab Bar"].buttons["More"].tap() -// -// app.tables/*@START_MENU_TOKEN@*/.staticTexts["Settings"]/*[[".cells.staticTexts[\"Settings\"]",".staticTexts[\"Settings\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap() -// -// let collectionViewsQuery = app.collectionViews -// collectionViewsQuery/*@START_MENU_TOKEN@*/.staticTexts["Auto upload"]/*[[".cells",".buttons[\"Auto upload\"].staticTexts[\"Auto upload\"]",".staticTexts[\"Auto upload\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/.tap() -// -// try await aSmallMoment() -// -// let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") -// let allowButton = springboard.buttons["Allow Full Access"] -// -// if allowButton.await() { -// allowButton.tap() -// } -// } -// -// func testAutoUploadAllPhotos() async throws { -// try await goToAutoUpload() -// -// let collectionViewsQuery = app.collectionViews -// -// let turnOnAutoUploadingSwitch = collectionViewsQuery.switches["Turn on auto uploading"] -// -// collectionViewsQuery/*@START_MENU_TOKEN@*/.switches["Auto upload photos"]/*[[".cells.switches[\"Auto upload photos\"]",".switches[\"Auto upload photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.swipeUp() -// -// if turnOnAutoUploadingSwitch.await() { -// turnOnAutoUploadingSwitch.tap() -// } -// -// app.tabBars["Tab Bar"].buttons["Files"].tap() -// -// try await aSmallMoment() -// -// pullToRefresh() -// -// let photosItem = app.collectionViews["NCCollectionViewCommon"]/*@START_MENU_TOKEN@*/.staticTexts["Photos"]/*[[".cells[\"Photos\"].staticTexts[\"Photos\"]",".cells[\"Cell\/Photos\"].staticTexts[\"Photos\"]",".staticTexts[\"Photos\"]"],[[[-1,2],[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ -// if photosItem.await() { -// photosItem.tap() -// } -// -// try await aSmallMoment() -// -// XCTAssertTrue(app.collectionViews.cells.count == 6) -// } -// -// func testAutoUploadNewPhotos() async throws { -// try await goToAutoUpload() -// -// let backUpNewPhotosVideosOnlySwitch = app.collectionViews.switches["NewPhotosToggle"] -// -// if backUpNewPhotosVideosOnlySwitch.await() { -// backUpNewPhotosVideosOnlySwitch.switches.firstMatch.tap() -// } -// -// let collectionViewsQuery = app.collectionViews -// -// let turnOnAutoUploadingSwitch = collectionViewsQuery.switches["Turn on auto uploading"] -// -// collectionViewsQuery/*@START_MENU_TOKEN@*/.switches["Auto upload photos"]/*[[".cells.switches[\"Auto upload photos\"]",".switches[\"Auto upload photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.swipeUp() -// -// if turnOnAutoUploadingSwitch.await() { -// turnOnAutoUploadingSwitch.tap() -// } -// -// app.tabBars["Tab Bar"].buttons["Files"].tap() -// -// try await aSmallMoment() -// -// pullToRefresh() -// -// let photosItem = app.collectionViews["NCCollectionViewCommon"]/*@START_MENU_TOKEN@*/.staticTexts["Photos"]/*[[".cells[\"Photos\"].staticTexts[\"Photos\"]",".cells[\"Cell\/Photos\"].staticTexts[\"Photos\"]",".staticTexts[\"Photos\"]"],[[[-1,2],[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ -// -// // Does not seem possible to take a screenshot on Simulator or easily transfer a new photo in Simulator. -// // Thus for now we can only rely on the Photos folder not existing at all to test this. -// XCTAssertFalse(photosItem.exists) -// } -// -// override func tearDown() async throws { -// let tabBar = app.tabBars["Tab Bar"] -// tabBar.buttons["Files"].tap() -// let nccollectionviewcommonCollectionView = app.collectionViews["NCCollectionViewCommon"] -// let cell = nccollectionviewcommonCollectionView/*@START_MENU_TOKEN@*/.cells["Cell/Photos"]/*[[".cells[\"Photos\"]",".cells[\"Cell\/Photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ -// if !cell.exists { return } -// -// cell.otherElements.containing(.button, identifier:"Cell/Photos/shareButton").children(matching: .button).element(boundBy: 1).tap() -// let tablesQuery = app.tables -// tablesQuery/*@START_MENU_TOKEN@*/.staticTexts["Delete folder"]/*[[".cells.staticTexts[\"Delete folder\"]",".staticTexts[\"Delete folder\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap() -// app.alerts["Delete folder?"].scrollViews.otherElements.buttons["Yes"].tap() -// -// cell.awaitInexistence() -// } -//} +// SPDX-FileCopyrightText: Nextcloud GmbH +// SPDX-FileCopyrightText: 2025 Iva Horn +// SPDX-License-Identifier: GPL-3.0-or-later + +import XCTest + +/// +/// User interface tests for the download limits management on shares. +/// +@MainActor +final class AutoUploadUITests: BaseUIXCTestCase { + // MARK: - Lifecycle + override func setUp() async throws { + try await super.setUp() + continueAfterFailure = false + + // Handle alerts presented by the system. + addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") + addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") + + // Launch the app. + app = XCUIApplication() + app.launchArguments = ["UI_TESTING"] + app.launch() + + try await logIn() + + // Set up test backend communication. + backend = UITestBackend() + } + + private func goToAutoUpload() async throws { + addUIInterruptionMonitor(withDescription: "Are you sure you want to upload all photos?", for: "Confirm") + + app.tabBars["Tab Bar"].buttons["More"].tap() + + app.tables/*@START_MENU_TOKEN@*/.staticTexts["Settings"]/*[[".cells.staticTexts[\"Settings\"]",".staticTexts[\"Settings\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap() + + let collectionViewsQuery = app.collectionViews + collectionViewsQuery/*@START_MENU_TOKEN@*/.staticTexts["Auto upload"]/*[[".cells",".buttons[\"Auto upload\"].staticTexts[\"Auto upload\"]",".staticTexts[\"Auto upload\"]"],[[[-1,2],[-1,1],[-1,0,1]],[[-1,2],[-1,1]]],[0]]@END_MENU_TOKEN@*/.tap() + + try await aSmallMoment() + + let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") + let allowButton = springboard.buttons["Allow Full Access"] + + if allowButton.await() { + allowButton.tap() + } + } + + func testAutoUploadAllPhotos() async throws { + try await goToAutoUpload() + + let collectionViewsQuery = app.collectionViews + + let turnOnAutoUploadingSwitch = collectionViewsQuery.switches["Turn on auto uploading"] + + collectionViewsQuery/*@START_MENU_TOKEN@*/.switches["Auto upload photos"]/*[[".cells.switches[\"Auto upload photos\"]",".switches[\"Auto upload photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.swipeUp() + + if turnOnAutoUploadingSwitch.await() { + turnOnAutoUploadingSwitch.tap() + } + + app.tabBars["Tab Bar"].buttons["Files"].tap() + + try await aSmallMoment() + + pullToRefresh() + + let photosItem = app.collectionViews["NCCollectionViewCommon"]/*@START_MENU_TOKEN@*/.staticTexts["Photos"]/*[[".cells[\"Photos\"].staticTexts[\"Photos\"]",".cells[\"Cell\/Photos\"].staticTexts[\"Photos\"]",".staticTexts[\"Photos\"]"],[[[-1,2],[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ + if photosItem.await() { + photosItem.tap() + } + + try await aSmallMoment() + + XCTAssertTrue(app.collectionViews.cells.count == 6) + } + + func testAutoUploadNewPhotos() async throws { + try await goToAutoUpload() + + let backUpNewPhotosVideosOnlySwitch = app.collectionViews.switches["NewPhotosToggle"] + + if backUpNewPhotosVideosOnlySwitch.await() { + backUpNewPhotosVideosOnlySwitch.switches.firstMatch.tap() + } + + let collectionViewsQuery = app.collectionViews + + let turnOnAutoUploadingSwitch = collectionViewsQuery.switches["Turn on auto uploading"] + + collectionViewsQuery/*@START_MENU_TOKEN@*/.switches["Auto upload photos"]/*[[".cells.switches[\"Auto upload photos\"]",".switches[\"Auto upload photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.swipeUp() + + if turnOnAutoUploadingSwitch.await() { + turnOnAutoUploadingSwitch.tap() + } + + app.tabBars["Tab Bar"].buttons["Files"].tap() + + try await aSmallMoment() + + pullToRefresh() + + let photosItem = app.collectionViews["NCCollectionViewCommon"]/*@START_MENU_TOKEN@*/.staticTexts["Photos"]/*[[".cells[\"Photos\"].staticTexts[\"Photos\"]",".cells[\"Cell\/Photos\"].staticTexts[\"Photos\"]",".staticTexts[\"Photos\"]"],[[[-1,2],[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ + + // Does not seem possible to take a screenshot on Simulator or easily transfer a new photo in Simulator. + // Thus for now we can only rely on the Photos folder not existing at all to test this. + XCTAssertFalse(photosItem.exists) + } + + override func tearDown() async throws { + let tabBar = app.tabBars["Tab Bar"] + tabBar.buttons["Files"].tap() + let nccollectionviewcommonCollectionView = app.collectionViews["NCCollectionViewCommon"] + let cell = nccollectionviewcommonCollectionView/*@START_MENU_TOKEN@*/.cells["Cell/Photos"]/*[[".cells[\"Photos\"]",".cells[\"Cell\/Photos\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/ + if !cell.exists { return } + + cell.otherElements.containing(.button, identifier:"Cell/Photos/shareButton").children(matching: .button).element(boundBy: 1).tap() + let tablesQuery = app.tables + tablesQuery/*@START_MENU_TOKEN@*/.staticTexts["Delete folder"]/*[[".cells.staticTexts[\"Delete folder\"]",".staticTexts[\"Delete folder\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap() + app.alerts["Delete folder?"].scrollViews.otherElements.buttons["Yes"].tap() + + cell.awaitInexistence() + } +} diff --git a/Tests/NextcloudUITests/DownloadLimitUITests.swift b/Tests/NextcloudUITests/DownloadLimitUITests.swift index f0e80ac54d..975fe1f865 100644 --- a/Tests/NextcloudUITests/DownloadLimitUITests.swift +++ b/Tests/NextcloudUITests/DownloadLimitUITests.swift @@ -1,484 +1,484 @@ -//// SPDX-FileCopyrightText: Nextcloud GmbH -//// SPDX-FileCopyrightText: 2025 Iva Horn -//// SPDX-License-Identifier: GPL-3.0-or-later -// -//import XCTest -// -///// -///// User interface tests for the download limits management on shares. -///// -//@MainActor -//final class DownloadLimitUITests: BaseUIXCTestCase { -// /// -// /// Name of the file to work with. -// /// -// /// The leading underscore is required for the file to appear at the top of the list. -// /// Obviously, this is fragile by making some assumptions of the user interface state. -// /// -// let testFileName = "_Xcode UI Test Subject.md" -// -// // MARK: - Lifecycle -// -// override func setUp() async throws { -// try await super.setUp() -// continueAfterFailure = false -// -// // Handle alerts presented by the system. -// addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") -// addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") -// -// // Launch the app. -// app = XCUIApplication() -// app.launchArguments = ["UI_TESTING"] -// app.launch() -// -// try await logIn() -// -// // Set up test backend communication. -// backend = UITestBackend() -// -// try await backend.assertCapability(true, capability: \.downloadLimit) -// try await backend.delete(testFileName) -// try await backend.prepareTestFile(testFileName) -// } -// -// // MARK: - Tests -// -// func testShareWithoutDownloadLimitCapability() async throws { -// // This cannot be implemented at the time of writing. -// // There is no way to disable and enable server apps via web API. -// // The Xcode UI test process cannot access Docker. -// throw XCTSkip("Not implemented yet!") -// } -// -// func testNewShareWithoutDownloadLimit() async throws { -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// -// guard shareButton.exists else { -// throw UITestError.waitForExistence(shareButton) -// } -// -// shareButton.tap() -// -// // Tap add share link button. -// -// let addShareLinkButton = app.buttons["addShareLink"] -// guard addShareLinkButton.await() else { return } -// addShareLinkButton.tap() -// -// // Tap confirm share button. -// -// let confirmShareButton = app.buttons["confirmShare"] -// -// guard confirmShareButton.exists else { -// throw UITestError.waitForExistence(confirmShareButton) -// } -// -// confirmShareButton.tap() -// confirmShareButton.awaitInexistence() -// -// // Then -// let shares = try await backend.getShares(byPath: "/\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await backend.assertNoDownloadLimit(by: token) -// } -// -// func testNewShareWithDownloadLimit() async throws { -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap add share link button. -// -// let addShareLinkButton = app.buttons["addShareLink"] -// guard addShareLinkButton.await() else { return } -// addShareLinkButton.tap() -// -// // Tap download limits. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// guard downloadLimitCell.await() else { return } -// downloadLimitCell.tap() -// -// // Tap download limit switch. -// -// let downloadLimitSwitch = app.switches["downloadLimitSwitch"] -// guard downloadLimitSwitch.await() else { return } -// downloadLimitSwitch.tap() -// -// // Update allowed downloads. -// -// let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] -// guard allowedDownloadsTextField.await() else { return } -// allowedDownloadsTextField.tap() -// allowedDownloadsTextField.typeText("3") -// -// // Tap navigation back button. -// -// app.navigationBars.buttons.firstMatch.tap() -// -// // Tap confirm share button. -// -// let confirmShareButton = app.buttons["confirmShare"] -// guard confirmShareButton.await() else { return } -// confirmShareButton.tap() -// confirmShareButton.awaitInexistence() -// -// // Then -// let shares = try await backend.getShares(byPath: "/\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await backend.assertDownloadLimit(by: token, count: 0, limit: 3) -// } -// -// func testShareOfFolder() async throws { -// let testSubject = "_Xcode UI Test Subject" -// try await backend.createFolder(testSubject) -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testSubject)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap add share link button. -// -// let addShareLinkButton = app.buttons["addShareLink"] -// guard addShareLinkButton.await() else { return } -// addShareLinkButton.tap() -// -// // Verify download limits being unavailable. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// XCTAssertFalse(downloadLimitCell.exists, "Folder shares cannot have download limits") -// -// // Cleanup -// -// try await backend.delete(testSubject) -// } -// -// func testAddingDownloadLimitToExistingShare() async throws { -// try await backend.createShare(byPath: testFileName) -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap show share link details button. -// -// let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] -// guard showShareLinkDetailsButton.await() else { return } -// showShareLinkDetailsButton.tap() -// -// // Tap share link details button in share menu sheet. -// -// let shareMenuDetailsCell = app.cells["shareMenu/details"] -// guard shareMenuDetailsCell.await() else { return } -// shareMenuDetailsCell.tap() -// -// // Tap download limits. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// guard downloadLimitCell.await() else { return } -// downloadLimitCell.tap() -// -// // Tap download limit switch. -// -// let downloadLimitSwitch = app.switches["downloadLimitSwitch"] -// guard downloadLimitSwitch.await() else { return } -// downloadLimitSwitch.tap() -// -// // Update allowed downloads. -// -// let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] -// guard allowedDownloadsTextField.await() else { return } -// allowedDownloadsTextField.tap() -// allowedDownloadsTextField.typeText("3") -// -// // Tap navigation back button. -// -// app.navigationBars.buttons.firstMatch.tap() -// -// // Tap confirm share button. -// -// let confirmShareButton = app.buttons["confirmShare"] -// guard confirmShareButton.await() else { return } -// confirmShareButton.tap() -// confirmShareButton.awaitInexistence() -// -// // Then -// let shares = try await backend.getShares(byPath: "\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await aMoment() -// try await backend.assertDownloadLimit(by: token, count: 0, limit: 3) -// } -// -// func testUpdatingDownloadLimitOnExistingShare() async throws { -// try await backend.createShare(byPath: testFileName) -// var shares = try await backend.getShares(byPath: testFileName) -// -// guard let token = shares.first?.token else { -// XCTFail("Failed to fetch token of share for test file!") -// return -// } -// -// try await backend.setDownloadLimit(to: 4, by: token) -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap show share link details button. -// -// let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] -// guard showShareLinkDetailsButton.await() else { return } -// showShareLinkDetailsButton.tap() -// -// // Tap share link details button in share menu sheet. -// -// let shareMenuDetailsCell = app.cells["shareMenu/details"] -// guard shareMenuDetailsCell.await() else { return } -// shareMenuDetailsCell.tap() -// -// // Tap download limits. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// guard downloadLimitCell.await() else { return } -// downloadLimitCell.tap() -// -// // Check download limit switch. -// -// let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch -// guard downloadLimitSwitch.await() else { return } -// -// guard let downloadLimitSwitchValue = (downloadLimitSwitch.value as? String) else { -// XCTFail("Failed to get value of user interface control!") -// return -// } -// -// guard downloadLimitSwitchValue == "1" else { -// XCTFail("The switch is not on!") -// return -// } -// -// // Check and update allowed downloads. -// -// let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] -// guard allowedDownloadsTextField.await() else { return } -// -// guard let allowedDownloadsTextFieldValue = (allowedDownloadsTextField.value as? String) else { -// XCTFail("Failed to get value of user interface control!") -// return -// } -// -// guard allowedDownloadsTextFieldValue == "4" else { -// XCTFail("The text field value is wrong!") -// return -// } -// -// allowedDownloadsTextField.tap() -// allowedDownloadsTextField.typeText("6") -// -// // Tap navigation back button. -// -// app.navigationBars.buttons.firstMatch.tap() -// -// // Tap confirm share button. -// -// let confirmShareButton = app.buttons["confirmShare"] -// guard confirmShareButton.await() else { return } -// confirmShareButton.tap() -// confirmShareButton.awaitInexistence() -// -// // Then -// shares = try await backend.getShares(byPath: "\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await aMoment() -// try await backend.assertDownloadLimit(by: token, count: 0, limit: 6) -// } -// -// func testDiscardingDownloadLimitChangesOnExistingShare() async throws { -// try await backend.createShare(byPath: testFileName) -// var shares = try await backend.getShares(byPath: testFileName) -// -// guard let token = shares.first?.token else { -// XCTFail("Failed to fetch token of share for test file!") -// return -// } -// -// try await backend.setDownloadLimit(to: 8, by: token) -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap show share link details button. -// -// let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] -// guard showShareLinkDetailsButton.await() else { return } -// showShareLinkDetailsButton.tap() -// -// // Tap share link details button in share menu sheet. -// -// let shareMenuDetailsCell = app.cells["shareMenu/details"] -// guard shareMenuDetailsCell.await() else { return } -// shareMenuDetailsCell.tap() -// -// // Tap download limits. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// guard downloadLimitCell.await() else { return } -// downloadLimitCell.tap() -// -// // Check download limit switch. -// -// let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch -// guard downloadLimitSwitch.await() else { return } -// -// guard let downloadLimitSwitchValue = (downloadLimitSwitch.value as? String) else { -// XCTFail("Failed to get value of user interface control!") -// return -// } -// -// guard downloadLimitSwitchValue == "1" else { -// XCTFail("The switch is not on!") -// return -// } -// -// // Check and update allowed downloads. -// -// let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] -// guard allowedDownloadsTextField.await() else { return } -// -// guard let allowedDownloadsTextFieldValue = (allowedDownloadsTextField.value as? String) else { -// XCTFail("Failed to get value of user interface control!") -// return -// } -// -// allowedDownloadsTextField.tap() -// allowedDownloadsTextField.typeText("9") -// -// // Tap navigation back button. -// -// app.navigationBars.buttons.firstMatch.tap() -// -// // Tap confirm share button. -// -// let cancelShareButton = app.buttons["cancelShare"] -// guard cancelShareButton.await() else { return } -// cancelShareButton.tap() -// -// // Then -// shares = try await backend.getShares(byPath: "\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await aMoment() -// try await backend.assertDownloadLimit(by: token, count: 0, limit: 8) -// } -// -// func testRemovingDownloadLimitFromExistingShare() async throws { -// try await backend.createShare(byPath: testFileName) -// var shares = try await backend.getShares(byPath: testFileName) -// -// guard let token = shares.first?.token else { -// XCTFail("Failed to fetch token of share for test file!") -// return -// } -// -// try await backend.setDownloadLimit(to: 4, by: token) -// pullToRefresh() -// -// // Tap share button. -// -// let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] -// guard shareButton.await() else { return } -// shareButton.tap() -// -// // Tap show share link details button. -// -// let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] -// guard showShareLinkDetailsButton.await() else { return } -// showShareLinkDetailsButton.tap() -// -// // Tap share link details button in share menu sheet. -// -// let shareMenuDetailsCell = app.cells["shareMenu/details"] -// guard shareMenuDetailsCell.await() else { return } -// shareMenuDetailsCell.tap() -// -// // Tap download limits. -// -// let downloadLimitCell = app.cells["downloadLimit"] -// guard downloadLimitCell.await() else { return } -// downloadLimitCell.tap() -// -// // Check download limit switch. -// -// let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch -// guard downloadLimitSwitch.await() else { return } -// downloadLimitSwitch.tap() -// -// // Tap navigation back button. -// -// app.navigationBars.buttons.firstMatch.tap() -// -// // Tap confirm share button. -// -// let confirmShareButton = app.buttons["confirmShare"] -// guard confirmShareButton.await() else { return } -// confirmShareButton.tap() -// confirmShareButton.awaitInexistence() -// -// // Then -// shares = try await backend.getShares(byPath: "\(testFileName)") -// XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") -// -// guard let token = shares.first?.token else { -// throw UITestError.missingValue -// } -// -// try await aMoment() -// try await backend.assertDownloadLimit(by: token, count: nil, limit: nil) -// } -//} +// SPDX-FileCopyrightText: Nextcloud GmbH +// SPDX-FileCopyrightText: 2025 Iva Horn +// SPDX-License-Identifier: GPL-3.0-or-later + +import XCTest + +/// +/// User interface tests for the download limits management on shares. +/// +@MainActor +final class DownloadLimitUITests: BaseUIXCTestCase { + /// + /// Name of the file to work with. + /// + /// The leading underscore is required for the file to appear at the top of the list. + /// Obviously, this is fragile by making some assumptions of the user interface state. + /// + let testFileName = "_Xcode UI Test Subject.md" + + // MARK: - Lifecycle + + override func setUp() async throws { + try await super.setUp() + continueAfterFailure = false + + // Handle alerts presented by the system. + addUIInterruptionMonitor(withDescription: "Allow Notifications", for: "Allow") + addUIInterruptionMonitor(withDescription: "Save Password", for: "Not Now") + + // Launch the app. + app = XCUIApplication() + app.launchArguments = ["UI_TESTING"] + app.launch() + + try await logIn() + + // Set up test backend communication. + backend = UITestBackend() + + try await backend.assertCapability(true, capability: \.downloadLimit) + try await backend.delete(testFileName) + try await backend.prepareTestFile(testFileName) + } + + // MARK: - Tests + + func testShareWithoutDownloadLimitCapability() async throws { + // This cannot be implemented at the time of writing. + // There is no way to disable and enable server apps via web API. + // The Xcode UI test process cannot access Docker. + throw XCTSkip("Not implemented yet!") + } + + func testNewShareWithoutDownloadLimit() async throws { + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + + guard shareButton.exists else { + throw UITestError.waitForExistence(shareButton) + } + + shareButton.tap() + + // Tap add share link button. + + let addShareLinkButton = app.buttons["addShareLink"] + guard addShareLinkButton.await() else { return } + addShareLinkButton.tap() + + // Tap confirm share button. + + let confirmShareButton = app.buttons["confirmShare"] + + guard confirmShareButton.exists else { + throw UITestError.waitForExistence(confirmShareButton) + } + + confirmShareButton.tap() + confirmShareButton.awaitInexistence() + + // Then + let shares = try await backend.getShares(byPath: "/\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await backend.assertNoDownloadLimit(by: token) + } + + func testNewShareWithDownloadLimit() async throws { + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap add share link button. + + let addShareLinkButton = app.buttons["addShareLink"] + guard addShareLinkButton.await() else { return } + addShareLinkButton.tap() + + // Tap download limits. + + let downloadLimitCell = app.cells["downloadLimit"] + guard downloadLimitCell.await() else { return } + downloadLimitCell.tap() + + // Tap download limit switch. + + let downloadLimitSwitch = app.switches["downloadLimitSwitch"] + guard downloadLimitSwitch.await() else { return } + downloadLimitSwitch.tap() + + // Update allowed downloads. + + let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] + guard allowedDownloadsTextField.await() else { return } + allowedDownloadsTextField.tap() + allowedDownloadsTextField.typeText("3") + + // Tap navigation back button. + + app.navigationBars.buttons.firstMatch.tap() + + // Tap confirm share button. + + let confirmShareButton = app.buttons["confirmShare"] + guard confirmShareButton.await() else { return } + confirmShareButton.tap() + confirmShareButton.awaitInexistence() + + // Then + let shares = try await backend.getShares(byPath: "/\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await backend.assertDownloadLimit(by: token, count: 0, limit: 3) + } + + func testShareOfFolder() async throws { + let testSubject = "_Xcode UI Test Subject" + try await backend.createFolder(testSubject) + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testSubject)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap add share link button. + + let addShareLinkButton = app.buttons["addShareLink"] + guard addShareLinkButton.await() else { return } + addShareLinkButton.tap() + + // Verify download limits being unavailable. + + let downloadLimitCell = app.cells["downloadLimit"] + XCTAssertFalse(downloadLimitCell.exists, "Folder shares cannot have download limits") + + // Cleanup + + try await backend.delete(testSubject) + } + + func testAddingDownloadLimitToExistingShare() async throws { + try await backend.createShare(byPath: testFileName) + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap show share link details button. + + let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] + guard showShareLinkDetailsButton.await() else { return } + showShareLinkDetailsButton.tap() + + // Tap share link details button in share menu sheet. + + let shareMenuDetailsCell = app.cells["shareMenu/details"] + guard shareMenuDetailsCell.await() else { return } + shareMenuDetailsCell.tap() + + // Tap download limits. + + let downloadLimitCell = app.cells["downloadLimit"] + guard downloadLimitCell.await() else { return } + downloadLimitCell.tap() + + // Tap download limit switch. + + let downloadLimitSwitch = app.switches["downloadLimitSwitch"] + guard downloadLimitSwitch.await() else { return } + downloadLimitSwitch.tap() + + // Update allowed downloads. + + let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] + guard allowedDownloadsTextField.await() else { return } + allowedDownloadsTextField.tap() + allowedDownloadsTextField.typeText("3") + + // Tap navigation back button. + + app.navigationBars.buttons.firstMatch.tap() + + // Tap confirm share button. + + let confirmShareButton = app.buttons["confirmShare"] + guard confirmShareButton.await() else { return } + confirmShareButton.tap() + confirmShareButton.awaitInexistence() + + // Then + let shares = try await backend.getShares(byPath: "\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await aMoment() + try await backend.assertDownloadLimit(by: token, count: 0, limit: 3) + } + + func testUpdatingDownloadLimitOnExistingShare() async throws { + try await backend.createShare(byPath: testFileName) + var shares = try await backend.getShares(byPath: testFileName) + + guard let token = shares.first?.token else { + XCTFail("Failed to fetch token of share for test file!") + return + } + + try await backend.setDownloadLimit(to: 4, by: token) + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap show share link details button. + + let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] + guard showShareLinkDetailsButton.await() else { return } + showShareLinkDetailsButton.tap() + + // Tap share link details button in share menu sheet. + + let shareMenuDetailsCell = app.cells["shareMenu/details"] + guard shareMenuDetailsCell.await() else { return } + shareMenuDetailsCell.tap() + + // Tap download limits. + + let downloadLimitCell = app.cells["downloadLimit"] + guard downloadLimitCell.await() else { return } + downloadLimitCell.tap() + + // Check download limit switch. + + let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch + guard downloadLimitSwitch.await() else { return } + + guard let downloadLimitSwitchValue = (downloadLimitSwitch.value as? String) else { + XCTFail("Failed to get value of user interface control!") + return + } + + guard downloadLimitSwitchValue == "1" else { + XCTFail("The switch is not on!") + return + } + + // Check and update allowed downloads. + + let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] + guard allowedDownloadsTextField.await() else { return } + + guard let allowedDownloadsTextFieldValue = (allowedDownloadsTextField.value as? String) else { + XCTFail("Failed to get value of user interface control!") + return + } + + guard allowedDownloadsTextFieldValue == "4" else { + XCTFail("The text field value is wrong!") + return + } + + allowedDownloadsTextField.tap() + allowedDownloadsTextField.typeText("6") + + // Tap navigation back button. + + app.navigationBars.buttons.firstMatch.tap() + + // Tap confirm share button. + + let confirmShareButton = app.buttons["confirmShare"] + guard confirmShareButton.await() else { return } + confirmShareButton.tap() + confirmShareButton.awaitInexistence() + + // Then + shares = try await backend.getShares(byPath: "\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await aMoment() + try await backend.assertDownloadLimit(by: token, count: 0, limit: 6) + } + + func testDiscardingDownloadLimitChangesOnExistingShare() async throws { + try await backend.createShare(byPath: testFileName) + var shares = try await backend.getShares(byPath: testFileName) + + guard let token = shares.first?.token else { + XCTFail("Failed to fetch token of share for test file!") + return + } + + try await backend.setDownloadLimit(to: 8, by: token) + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap show share link details button. + + let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] + guard showShareLinkDetailsButton.await() else { return } + showShareLinkDetailsButton.tap() + + // Tap share link details button in share menu sheet. + + let shareMenuDetailsCell = app.cells["shareMenu/details"] + guard shareMenuDetailsCell.await() else { return } + shareMenuDetailsCell.tap() + + // Tap download limits. + + let downloadLimitCell = app.cells["downloadLimit"] + guard downloadLimitCell.await() else { return } + downloadLimitCell.tap() + + // Check download limit switch. + + let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch + guard downloadLimitSwitch.await() else { return } + + guard let downloadLimitSwitchValue = (downloadLimitSwitch.value as? String) else { + XCTFail("Failed to get value of user interface control!") + return + } + + guard downloadLimitSwitchValue == "1" else { + XCTFail("The switch is not on!") + return + } + + // Check and update allowed downloads. + + let allowedDownloadsTextField = app.textFields["downloadLimitTextField"] + guard allowedDownloadsTextField.await() else { return } + + guard let allowedDownloadsTextFieldValue = (allowedDownloadsTextField.value as? String) else { + XCTFail("Failed to get value of user interface control!") + return + } + + allowedDownloadsTextField.tap() + allowedDownloadsTextField.typeText("9") + + // Tap navigation back button. + + app.navigationBars.buttons.firstMatch.tap() + + // Tap confirm share button. + + let cancelShareButton = app.buttons["cancelShare"] + guard cancelShareButton.await() else { return } + cancelShareButton.tap() + + // Then + shares = try await backend.getShares(byPath: "\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await aMoment() + try await backend.assertDownloadLimit(by: token, count: 0, limit: 8) + } + + func testRemovingDownloadLimitFromExistingShare() async throws { + try await backend.createShare(byPath: testFileName) + var shares = try await backend.getShares(byPath: testFileName) + + guard let token = shares.first?.token else { + XCTFail("Failed to fetch token of share for test file!") + return + } + + try await backend.setDownloadLimit(to: 4, by: token) + pullToRefresh() + + // Tap share button. + + let shareButton = app.buttons["Cell/\(testFileName)/shareButton"] + guard shareButton.await() else { return } + shareButton.tap() + + // Tap show share link details button. + + let showShareLinkDetailsButton = app.buttons["showShareLinkDetails"] + guard showShareLinkDetailsButton.await() else { return } + showShareLinkDetailsButton.tap() + + // Tap share link details button in share menu sheet. + + let shareMenuDetailsCell = app.cells["shareMenu/details"] + guard shareMenuDetailsCell.await() else { return } + shareMenuDetailsCell.tap() + + // Tap download limits. + + let downloadLimitCell = app.cells["downloadLimit"] + guard downloadLimitCell.await() else { return } + downloadLimitCell.tap() + + // Check download limit switch. + + let downloadLimitSwitch = app.switches["downloadLimitSwitch"].firstMatch + guard downloadLimitSwitch.await() else { return } + downloadLimitSwitch.tap() + + // Tap navigation back button. + + app.navigationBars.buttons.firstMatch.tap() + + // Tap confirm share button. + + let confirmShareButton = app.buttons["confirmShare"] + guard confirmShareButton.await() else { return } + confirmShareButton.tap() + confirmShareButton.awaitInexistence() + + // Then + shares = try await backend.getShares(byPath: "\(testFileName)") + XCTAssertEqual(shares.count, 1, "Only one share existing on \(testFileName)") + + guard let token = shares.first?.token else { + throw UITestError.missingValue + } + + try await aMoment() + try await backend.assertDownloadLimit(by: token, count: nil, limit: nil) + } +} diff --git a/iOSClient/Account/NCAccount.swift b/iOSClient/Account/NCAccount.swift index 3367205405..dd3120bc73 100644 --- a/iOSClient/Account/NCAccount.swift +++ b/iOSClient/Account/NCAccount.swift @@ -108,9 +108,10 @@ class NCAccount: NSObject { // set theming color NCBrandColor.shared.settingThemingColor(account: account, capabilities: capabilities) } - // Start the auto upload - let num = await NCAutoUpload.shared.initAutoUpload(tblAccount: tblAccount) - nkLog(start: "Auto upload with \(num) photo") +// // Start the auto upload +// let num = await NCAutoUpload.shared.initAutoUpload(tblAccount: tblAccount) +// nkLog(start: "Auto upload with \(num) photo") + // Networking Process await NCNetworkingProcess.shared.setCurrentAccount(account) @@ -196,6 +197,7 @@ class NCAccount: NSObject { guard let tblAccount = await NCManageDatabase.shared.getTableAccountAsync(predicate: NSPredicate(format: "account == %@", account)) else { return } + let windowScene = SceneManager.shared.getWindowScene(controller: controller) await showErrorBanner(windowScene: windowScene, text: String(format: NSLocalizedString("_account_unauthorized_", comment: ""), account), errorCode: NCGlobal.shared.errorUnauthorized401) diff --git a/iOSClient/Analytics/AnalyticsHelper.swift b/iOSClient/Analytics/AnalyticsHelper.swift index 54281e40df..3b765cd06a 100644 --- a/iOSClient/Analytics/AnalyticsHelper.swift +++ b/iOSClient/Analytics/AnalyticsHelper.swift @@ -82,9 +82,9 @@ class AnalyticsHelper: NSObject, AnalyticsService { } } - func displayInAppNotification() { - self.analyticsServices.forEach { $0.displayInAppNotification() } - } +// func displayInAppNotification() { +// self.analyticsServices.forEach { $0.displayInAppNotification() } +// } } diff --git a/iOSClient/Analytics/AnalyticsService.swift b/iOSClient/Analytics/AnalyticsService.swift index e20600ca76..7da2e93d45 100644 --- a/iOSClient/Analytics/AnalyticsService.swift +++ b/iOSClient/Analytics/AnalyticsService.swift @@ -19,7 +19,7 @@ protocol AnalyticsService { func trackCreateVoiceMemo(size: Int64, date: Date) func trackCreateFolder(isEncrypted: Bool, creationDate: Date) func trackEventWithMetadata(eventName: AnalyticEvents, metadata: tableMetadata) - func displayInAppNotification() +// func displayInAppNotification() } // swiftlint:disable identifier_name diff --git a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift index 8a3c903fa3..b10abb9abc 100644 --- a/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift +++ b/iOSClient/Analytics/MoEngage/MoEngageAnalytics.swift @@ -10,12 +10,17 @@ import Foundation import MoEngageSDK import MoEngageInApps import StoreKit +import OSLog class MoEngageAnalytics: NSObject { + static let shared = MoEngageAnalytics() + private let log = Logger(subsystem: Bundle.main.bundleIdentifier ?? "MoEngage", category: "MoEngageAnalytics") // Initializer for the MoEngageAnalytics class override init() { super.init() + + log.debug("Initializing MoEngage SDK…") // Create a configuration object for MoEngage SDK with the given App ID and Data Center let sdkConfig = MoEngageSDKConfig(appId: "7KWWUKA6OKXGP8Q6DMCXLDX5", dataCenter: MoEngageDataCenter.data_center_02) @@ -31,59 +36,154 @@ class MoEngageAnalytics: NSObject { #else MoEngage.sharedInstance.initializeDefaultLiveInstance(sdkConfig) #endif - setupMoEngageInAppMessaging() + log.debug("MoEngage SDK initializeDefault instance set (debug: \( self._isDebugBuild() ))") + + Task { @MainActor in + setupMoEngageInAppMessaging() + } // Register delegate for In-App Native callbacks MoEngageSDKInApp.sharedInstance.setInAppDelegate(self) + log.debug("MoEngage In-App delegate set") } - // Method to track the App ID - func trackAppId() { - MoEngageSDKAnalytics.sharedInstance.trackLocale(forAppID: "312838242") + // MARK: - Setup Helper + /// Call this early in app lifecycle (e.g., AppDelegate didFinishLaunching or SceneDelegate willConnect) + static func setupIfNeeded() { + _ = MoEngageAnalytics.shared } - - func setupMoEngageInAppMessaging() { - //MARK: MoEngage In-App messages + + // MARK: - UI Helpers + private func activeWindowScene() -> UIWindowScene? { + return UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .first { $0.activationState == .foregroundActive } + } + + private func topViewController(in root: UIViewController?) -> UIViewController? { + guard let root = root else { return nil } + if let nav = root as? UINavigationController { return topViewController(in: nav.visibleViewController) } + if let tab = root as? UITabBarController { return topViewController(in: tab.selectedViewController) } + if let presented = root.presentedViewController { return topViewController(in: presented) } + return root + } + + @MainActor + func currentTopViewController() -> UIViewController? { + // 1. Find the active window scene (Crucial for iPad) + let activeScene = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .first { $0.activationState == .foregroundActive } + + // 2. Get the key window from that specific scene + let keyWindow = activeScene?.windows.first { $0.isKeyWindow } + ?? activeScene?.windows.first + + // 3. Start from the rootViewController + var topController = keyWindow?.rootViewController + + // 4. Drill down through navigation, tabs, and presented controllers + while let presentedController = topController?.presentedViewController { + topController = presentedController + } + + return topController + } + + /// Safer wrapper that ensures visible scene and top VC before asking MoEngage to show in-apps + @MainActor + func displayInAppNotificationSafely(reason: String? = nil) { + let reasonText = reason ?? "unspecified" + + // 1. Get all connected window scenes + let scenes = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + + // 2. Prioritize the scene that actually has the "Key Window" (Works best for iPad Split View) + let activeScene = scenes.first { $0.windows.contains(where: { $0.isKeyWindow }) } + ?? scenes.first { $0.activationState == .foregroundActive } + + guard let scene = activeScene else { + print("In-App not shown: No foreground window scene (reason: \(reasonText))") + return + } + + // 3. Ensure we have a valid top controller + guard let topVC = currentTopViewController() else { + print("In-App not shown: No top view controller available (reason: \(reasonText))") + return + } + + // 4. Trigger MoEngage + // iPad Tip: MoEngage uses the key window to determine where to draw the UI + if UIDevice.current.userInterfaceIdiom != .pad{ + self.triggerMoEngage() + } + else { +#if targetEnvironment(simulator) + // Simulator: Always show fallback alert + print("In-App shown: showInApp)") + let appID = "312838242" + + // Correct URLs with /app/id/ prefix + let webURLString = "https://apps.apple.com\(appID)?action=write-review" + + self.showSimulatorAlert(link: webURLString) +#else + // iPad Fallback: Scene might be transitioning. Retry once. + print("iPad Scene transition detected. Retrying...") + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + self.triggerMoEngage() + } +#endif + } + } + + private func triggerMoEngage() { MoEngageSDKInApp.sharedInstance.showInApp() MoEngageSDKInApp.sharedInstance.showNudge() } + + + private func _isDebugBuild() -> Bool { + #if DEBUG + return true + #else + return false + #endif + } + + // Method to track the App ID + func trackAppId() { + MoEngageSDKAnalytics.sharedInstance.trackLocale(forAppID: "312838242") + } - // Handles triggering Apple's native review popup -// private func requestAppStoreReview() { -// DispatchQueue.main.async { -// if let scene = UIApplication.shared.connectedScenes -// .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { -// SKStoreReviewController.requestReview(in: scene) -// } -// } -// } - - private func requestAppStoreReview() { - DispatchQueue.main.async { - guard - let windowScene = UIApplication.shared.connectedScenes - .compactMap({ $0 as? UIWindowScene }) - .first(where: { $0.activationState == .foregroundActive }) - else { - return - } - - #if targetEnvironment(simulator) - // Simulator fallback for testing - let alert = UIAlertController( - title: "Review Prompt (Simulator)", - message: "This simulates the App Store review dialog.", - preferredStyle: .alert - ) - alert.addAction(UIAlertAction(title: "OK", style: .default)) - windowScene.keyWindow?.rootViewController?.present(alert, animated: true) - #else - // Real request on device - SKStoreReviewController.requestReview(in: windowScene) - #endif + @MainActor func setupMoEngageInAppMessaging() { + // MARK: MoEngage In-App messages + log.debug("setupMoEngageInAppMessaging() — scheduling initial in-app evaluation") + Task { @MainActor in + displayInAppNotificationSafely(reason: "initial setup") } } + // Helper to show the alert on the topmost view controller + private func showSimulatorAlert(link: String) { + let alert = UIAlertController( + title: "Simulator Mode", + message: "App Store links don't open in Simulator. On a real device, this would open: \(link)", + preferredStyle: .alert + ) + alert.addAction(UIAlertAction(title: "OK", style: .default)) + + // Finds the current active window to present the alert + let keyWindow = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .flatMap { $0.windows } + .first { $0.isKeyWindow } + + keyWindow?.rootViewController?.present(alert, animated: true) + } + } // AnalyticsService protocol @@ -92,6 +192,11 @@ extension MoEngageAnalytics: AnalyticsService { func trackEvent(eventName: AnalyticEvents, properties: [String: Any]?) { let eventProperties = MoEngageProperties(withAttributes: properties) MoEngageSDKAnalytics.sharedInstance.trackEvent(eventName.moEngageEvent, withProperties: eventProperties) + Task { @MainActor in + // Re-evaluate in-app messages after trackEvent + MoEngageAnalytics.shared.displayInAppNotificationSafely(reason: "track Event") + } + } // Method to track user data @@ -186,12 +291,6 @@ extension MoEngageAnalytics: AnalyticsService { properties.addAttribute(getDate(date: date), withName: AnalyticPropertyAttributes.PROPERTIES__CREATION_DATE.rawValue) MoEngageSDKAnalytics.sharedInstance.trackEvent(AnalyticEvents.EVENT__CREATE_VOICE_MEMO.rawValue, withProperties: properties) } - - func displayInAppNotification() { - MoEngageSDKInApp.sharedInstance.showInApp() - //For showing nudges at any mentioned position - MoEngageSDKInApp.sharedInstance.showNudge() - } } // Functions @@ -247,28 +346,96 @@ extension MoEngageAnalytics: MoEngageInAppNativeDelegate { forAccountMeta accountMeta: MoEngageAccountMeta) { let kv = customAction.keyValuePairs + log.debug("In-App custom action received: keyValues=\(kv)") if let showRating = kv["show-native-rating"] as? String, showRating.lowercased() == "true" { - requestAppStoreReview() + log.debug("User clicked Rating - Opening App Store directly") + + // Use the reliable direct link instead of the restricted native prompt + ReviewManager.shared.requestReviewIfAppropriate() } } // Called when a "self-handled" in-app is triggered func selfHandledInAppTriggered(withInfo inAppCampaign: MoEngageInAppSelfHandledCampaign, forAccountMeta accountMeta: MoEngageAccountMeta) { - // no-op unless you use self-handled campaigns + log.debug("Self-handled in-app triggered: \(String(describing: inAppCampaign))") } // Optional — track impression func inAppShown(withCampaignInfo inappCampaign: MoEngageInAppCampaign, forAccountMeta accountMeta: MoEngageAccountMeta) { - // no-op + log.debug("In-App shown: \(String(describing: inappCampaign))") } // Optional — track dismissal func inAppDismissed(withCampaignInfo inappCampaign: MoEngageInAppCampaign, forAccountMeta accountMeta: MoEngageAccountMeta) { - // no-op + log.debug("In-App dismissed: \(String(describing: inappCampaign))") + } +} + +@MainActor // Ensures this is only called on the Main Thread +class UIHelper { + + static func getTopViewController() -> UIViewController? { + // 1. Get the active scene + let activeScene = UIApplication.shared.connectedScenes + .first { $0.activationState == .foregroundActive } as? UIWindowScene + + // 2. Get the root view controller from the key window + let rootVC = activeScene?.windows + .first { $0.isKeyWindow }?.rootViewController + + return findTopViewController(from: rootVC) + } + + private static func findTopViewController(from root: UIViewController?) -> UIViewController? { + if let nav = root as? UINavigationController { + return findTopViewController(from: nav.visibleViewController) + } + if let tab = root as? UITabBarController { + return findTopViewController(from: tab.selectedViewController) + } + if let presented = root?.presentedViewController { + return findTopViewController(from: presented) + } + return root + } +} + +class ReviewManager { + static let shared = ReviewManager() + private let appID = "312838242" + + /// Requests the native system rating sheet if an active foreground scene is available. + func requestReviewIfAppropriate() { + // 1. Find the active, foreground UIWindowScene required by StoreKit + guard let scene = UIApplication.shared.connectedScenes + .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene else { + // Silently exit if no foreground view is active +// // Fallback: If no scene is active (rare), open the App Store directly +// self.forceOpenAppStore() + return + } + + // 2. Trigger the native system prompt overlay + // Note: Apple will throttle this to 3 times per year maximum per user. + SKStoreReviewController.requestReview(in: scene) + } + + /// Call this function ONLY when a user explicitly taps a manual "Rate Us" button. + func forceOpenAppStore() { + let appStoreURLString = "itms-apps://://apple.com\(appID)?action=write-review" + let webURLString = "https://apple.com\(appID)?action=write-review" + + if let url = URL(string: appStoreURLString), UIApplication.shared.canOpenURL(url) { + // Opens the native iOS App Store app directly to your review composition page + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } else if let fallbackWebUrl = URL(string: webURLString) { + // Fallback safety layer: Opens up your App Store page inside Safari + UIApplication.shared.open(fallbackWebUrl, options: [:], completionHandler: nil) + } } } diff --git a/iOSClient/Login/NCLoginWeb.swift b/iOSClient/Login/NCLoginWeb.swift index 9d2380e112..0f19c2a9c2 100644 --- a/iOSClient/Login/NCLoginWeb.swift +++ b/iOSClient/Login/NCLoginWeb.swift @@ -154,8 +154,11 @@ class NCLoginWeb: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + // Re-evaluate in-app messages after viewDidAppear + MoEngageAnalytics.shared.displayInAppNotificationSafely(reason: "viewDidAppear") + // Stop timer error network - appDelegate.timerErrorNetworking?.invalidate() +// appDelegate.timerErrorNetworking?.invalidate() if let account = NCManageDatabase.shared.getActiveTableAccount(), NCPreferences().getPassword(account: account.account).isEmpty { @@ -176,7 +179,7 @@ class NCLoginWeb: UIViewController { super.viewDidDisappear(animated) // Start timer error network - appDelegate.startTimerErrorNetworking() +// appDelegate.startTimerErrorNetworking() } func loadWebPage(webView: WKWebView, url: URL) { @@ -356,6 +359,14 @@ extension NCLoginWeb: WKNavigationDelegate { // SceneManager.shared.register(scene: scene, withRootViewController: controller) // } // +// +// window?.rootViewController = controller +// window?.makeKeyAndVisible() +// +// if let scene = window?.windowScene { +// SceneManager.shared.register(scene: scene, withRootViewController: controller) +// } +// // UIView.animate(withDuration: 0.5) { // controller.view.alpha = 1 // } diff --git a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift index da51ddaaf9..cb72dafccb 100644 --- a/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift +++ b/iOSClient/Main/Collection Common/NCCollectionViewCommon+CollectionViewDelegate.swift @@ -20,7 +20,9 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { return } } else { - await showInfoBanner(windowScene: windowScene, text: "_e2e_server_disabled_") + Task { + await showInfoBanner(windowScene: windowScene, text: "_e2e_server_disabled_") + } return } } @@ -55,12 +57,11 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { for: token) } } - if let banner { await banner.dismissAsync() } - if results.nkError == .success || results.nkError == .cancelled { + if results.nkError == .success || results.afError?.isExplicitlyCancelledError ?? false { print("ok") } else { await showErrorBanner(windowScene: windowScene, text: results.nkError.errorDescription, errorCode: results.nkError.errorCode) @@ -68,7 +69,7 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { } if metadata.directory { - await pushMetadata(metadata) + pushMetadata(metadata) } else { Task { @MainActor in let image = utility.getImage(ocId: metadata.ocId, etag: metadata.etag, ext: self.global.previewExt1024, userId: metadata.userId, urlBase: metadata.urlBase) @@ -115,8 +116,9 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { self.navigationController?.pushViewController(vc, animated: true) } } else { - let error = NKError(errorCode: global.errorOffline, errorDescription: "_go_online_") - NCContentPresenter().showInfo(error: error) + Task { + await showErrorBanner(windowScene: windowScene, text: "_go_online_", errorCode: NCGlobal.shared.errorOfflineNotAllowed) + } } } } @@ -142,9 +144,7 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { return } - Task { - await didSelectMetadata(metadata, withOcIds: true) - } + self.didSelectMetadata(metadata, withOcIds: true) } func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { @@ -169,9 +169,9 @@ extension NCCollectionViewCommon: UICollectionViewDelegate { } return UIContextMenuConfiguration(identifier: identifier, previewProvider: { - return NCViewerProviderContextMenu(metadata: metadata, image: image, sceneIdentifier: self.sceneIdentifier) + return nil }, actionProvider: { _ in - let contextMenu = NCContextMenu(metadata: metadata.detachedCopy(), viewController: self, sceneIdentifier: self.sceneIdentifier, image: image) + let contextMenu = NCContextMenu(metadata: metadata.detachedCopy(), viewController: self, sceneIdentifier: self.sceneIdentifier, sender: cell) return contextMenu.viewMenu() }) } diff --git a/iOSClient/Main/Create/NCCreateDocument.swift b/iOSClient/Main/Create/NCCreateDocument.swift new file mode 100644 index 0000000000..6cc78c4669 --- /dev/null +++ b/iOSClient/Main/Create/NCCreateDocument.swift @@ -0,0 +1,200 @@ +// +// NCCreateDocument.swift +// Nextcloud +// +// Created by Marino Faggiana on 22/06/24. +// Copyright © 2024 Marino Faggiana. All rights reserved. +// +// Author Marino Faggiana +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// + +import Foundation +import UIKit +import NextcloudKit + +class NCCreateDocument: NSObject { + let utility = NCUtility() + let database = NCManageDatabase.shared + let global = NCGlobal.shared +// var fileNameExtension = "" + + @MainActor + func createDocument(controller: NCMainTabBarController, fileNamePath: String, fileName: String, fileNameExtension: String = "", editorId: String, creatorId: String? = nil, templateId: String, account: String) async { + let session = NCSession.shared.getSession(account: account) + guard let viewController = controller.currentViewController() else { + return + } + var UUID = NSUUID().uuidString + UUID = "TEMP" + UUID.replacingOccurrences(of: "-", with: "") + var options = NKRequestOptions() + let serverUrl = controller.currentServerUrl() + + if let creatorId, editorId == "text" || editorId == "onlyoffice" { + if editorId == "onlyoffice" { + options = NKRequestOptions(customUserAgent: NCUtility().getCustomUserAgentOnlyOffice()) + } else if editorId == "text" { + options = NKRequestOptions(customUserAgent: NCUtility().getCustomUserAgentNCText()) + } + let results = await NextcloudKit.shared.textCreateFileAsync(fileNamePath: fileNamePath, editorId: editorId, creatorId: creatorId, templateId: templateId, account: account, options: options) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: account, + path: fileNamePath, + name: "textCreateFile") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) + } + } + guard results.error == .success, let url = results.url else { + return NCContentPresenter().showError(error: results.error) + } + + var result = await NKTypeIdentifiers.shared.getInternalType(fileName: fileName, mimeType: "", directory: false, account: session.account) + + controller.dismiss(animated: true, completion: { + + Task { + let metadata = await NCManageDatabaseCreateMetadata().createMetadataAsync( + fileName: fileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: viewController) { + viewController.navigationController?.pushViewController(vc, animated: true) + } + } + }) + + } else if editorId == "collabora" { + + let results = await NextcloudKit.shared.createRichdocumentsAsync(path: fileNamePath, templateId: templateId, account: account) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: account, + path: fileNamePath, + name: "CreateRichdocuments") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) + } + } + guard results.error == .success, let url = results.url else { + return NCContentPresenter().showError(error: results.error) + } + + controller.dismiss(animated: true, completion: { + + Task { + let createFileName = (fileName as NSString).deletingPathExtension + "." + fileNameExtension + let metadata = await NCManageDatabaseCreateMetadata().createMetadataAsync( + fileName: createFileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + AnalyticsHelper.shared.trackCreateFile(metadata: metadata) + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: viewController) { + viewController.navigationController?.pushViewController(vc, animated: true) + } + } + }) + + } + } + + func getTemplate(editorId: String, templateId: String, account: String) async -> (templates: [NKEditorTemplate], selectedTemplate: NKEditorTemplate, ext: String) { + var templates: [NKEditorTemplate] = [] + var selectedTemplate = NKEditorTemplate() + var ext: String = "" + + if editorId == "text" || editorId == "onlyoffice" { + var options = NKRequestOptions() + if editorId == "onlyoffice" { + options = NKRequestOptions(customUserAgent: NCUtility().getCustomUserAgentOnlyOffice()) + } else if editorId == "text" { + options = NKRequestOptions(customUserAgent: NCUtility().getCustomUserAgentNCText()) + } + + let results = await NextcloudKit.shared.textGetListOfTemplatesAsync(account: account, options: options) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: account, + name: "textGetListOfTemplates") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) + } + } + if results.error == .success, let resultTemplates = results.templates { + for template in resultTemplates { + var temp = NKEditorTemplate() + temp.identifier = template.identifier + temp.ext = template.ext + temp.name = template.name + temp.preview = template.preview + templates.append(temp) + // default: template empty + if temp.preview.isEmpty { + selectedTemplate = temp + ext = template.ext + } + } + } + + if templates.isEmpty { + var temp = NKEditorTemplate() + temp.identifier = "" + if editorId == "text" { + temp.ext = "md" + } else if editorId == "onlyoffice" && templateId == "document" { + temp.ext = "docx" + } else if editorId == "onlyoffice" && templateId == "spreadsheet" { + temp.ext = "xlsx" + } else if editorId == "onlyoffice" && templateId == "presentation" { + temp.ext = "pptx" + } + temp.name = "Empty" + temp.preview = "" + templates.append(temp) + selectedTemplate = temp + ext = temp.ext + } + } + + if editorId == "collabora" { + let results = await NextcloudKit.shared.getTemplatesRichdocumentsAsync(typeTemplate: templateId, account: account) { task in + Task { + let identifier = await NCNetworking.shared.networkingTasks.createIdentifier(account: account, + path: templateId, + name: "getTemplatesRichdocuments") + await NCNetworking.shared.networkingTasks.track(identifier: identifier, task: task) + } + } + if results.error == .success { + for template in results.templates! { + var temp = NKEditorTemplate() + temp.identifier = "\(template.templateId)" + temp.ext = template.ext + temp.name = template.name + temp.preview = template.preview + templates.append(temp) + // default: template empty + if temp.preview.isEmpty { + selectedTemplate = temp + ext = temp.ext + } + } + } + } + + return (templates, selectedTemplate, ext) + } +} diff --git a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift index 758e2249e2..99c1194d9b 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadDocuments.swift @@ -28,10 +28,6 @@ import XLForm // MARK: - @objc class NCCreateFormUploadDocuments: XLFormViewController, NCSelectDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, NCCreateFormUploadConflictDelegate { - func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool, session: NCSession.Session) { - - } - @IBOutlet weak var indicator: UIActivityIndicatorView! @IBOutlet weak var collectionView: UICollectionView! @@ -233,7 +229,7 @@ import XLForm // MARK: - Action - func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool, session: NCSession.Session) { guard let serverUrl = serverUrl else { return } @@ -300,8 +296,10 @@ import XLForm // Trim whitespaces and newlines fileNameForm = fileNameForm.trimmingCharacters(in: .whitespacesAndNewlines) - let fileAutoRenamer = FileAutoRenamer() - fileName = fileAutoRenamer.rename(filename: fileNameForm, isFolderPath: true) +// let fileAutoRenamer = FileAutoRenamer() + let session = NCSession.shared.getSession(controller: self.controller) + let capabilities = await NKCapabilities.shared.getCapabilities(for: session.account) + fileName = FileAutoRenamer.rename(fileNameForm, isFolderPath: true, capabilities: capabilities) let result = await NKTypeIdentifiers.shared.getInternalType(fileName: fileNameForm, mimeType: "", directory: false, account: session.account) @@ -331,7 +329,7 @@ import XLForm } else { - let fileNamePath = utilityFileSystem.getFileNamePath(String(describing: fileNameForm), serverUrl: serverUrl, session: session) + let fileNamePath = utilityFileSystem.getRelativeFilePath(String(describing: fileNameForm), serverUrl: serverUrl, session: session) await NCCreateDocument().createDocument(controller: controller, fileNamePath: fileNamePath, fileName: String(describing: fileNameForm), fileNameExtension: self.fileNameExtension, editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account) } @@ -342,7 +340,7 @@ import XLForm if let metadatas, metadatas.count > 0 { let fileName = metadatas[0].fileName - let fileNamePath = utilityFileSystem.getFileNamePath(fileName, serverUrl: serverUrl, session: session) + let fileNamePath = utilityFileSystem.getRelativeFilePath(fileName, serverUrl: serverUrl, session: session) // createDocument(fileNamePath: fileNamePath, fileName: fileName) Task { await NCCreateDocument().createDocument(controller: controller, fileNamePath: fileNamePath, fileName: String(describing: fileName), editorId: editorId, creatorId: creatorId, templateId: templateIdentifier, account: session.account) @@ -382,12 +380,14 @@ import XLForm guard results.error == .success, let url = results.url else { return NCContentPresenter().showError(error: results.error) } - let metadata = await NCManageDatabase.shared.createMetadataAsync(fileName: fileName, - ocId: UUID, - serverUrl: serverUrl, - url: url, - session: session, - sceneIdentifier: controller.sceneIdentifier) + let metadata = await NCManageDatabaseCreateMetadata().createMetadataAsync( + fileName: fileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + AnalyticsHelper.shared.trackCreateFile(metadata: metadata) if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: controller) { controller.navigationController?.pushViewController(vc, animated: true) @@ -410,13 +410,14 @@ import XLForm return NCContentPresenter().showError(error: results.error) } - let metadata = await NCManageDatabase.shared.createMetadataAsync(fileName: fileName, - ocId: UUID, - serverUrl: serverUrl, - url: url, - session: session, - sceneIdentifier: controller.sceneIdentifier) - + let metadata = await NCManageDatabaseCreateMetadata().createMetadataAsync( + fileName: fileName, + ocId: UUID, + serverUrl: serverUrl, + url: url, + session: session, + sceneIdentifier: controller.sceneIdentifier) + if let vc = await NCViewer().getViewerController(metadata: metadata, delegate: controller) { controller.navigationController?.pushViewController(vc, animated: true) } diff --git a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift index f61f3cf801..63bdea4f27 100644 --- a/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift +++ b/iOSClient/Main/Create/NCCreateFormUploadVoiceNote.swift @@ -187,8 +187,10 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud self.form.delegate = nil if let fileNameNew = formRow.value as? String { - self.fileName = utility.removeForbiddenCharacters(fileNameNew) - self.fileName = FileAutoRenamer.rename(filename: fileNameNew, isFolderPath: true) + Task { + let capabilities = await NKCapabilities.shared.getCapabilities(for: session.account) + self.fileName = FileAutoRenamer.rename(fileNameNew, isFolderPath: true, capabilities: capabilities) + } } else { self.fileName = "" } @@ -209,8 +211,8 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud // MARK: - Action - func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool) { - + func dismissSelect(serverUrl: String?, metadata: tableMetadata?, type: String, items: [Any], overwrite: Bool, copy: Bool, move: Bool, session: NCSession.Session) { + if serverUrl != nil { self.serverUrl = serverUrl! @@ -245,27 +247,36 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud fileNameSave = (name as NSString).deletingPathExtension + ".m4a" } - let metadataForUpload = NCManageDatabase.shared.createMetadata(fileName: fileNameSave, fileNameView: fileNameSave, ocId: UUID().uuidString, serverUrl: serverUrl, url: "", contentType: "", session: session, sceneIdentifier: self.appDelegate.sceneIdentifier) + Task { + let fileNamePath = NSTemporaryDirectory() + fileNameSave + let metadata = await NCManageDatabaseCreateMetadata().createMetadataAsync( + fileName: fileNameSave, + ocId: UUID().uuidString, + serverUrl: serverUrl,//controller.currentServerUrl(), + session: self.session, + sceneIdentifier: self.controller?.sceneIdentifier) - metadataForUpload.session = NCNetworking.shared.sessionUploadBackground - metadataForUpload.sessionSelector = NCGlobal.shared.selectorUploadFile - metadataForUpload.status = NCGlobal.shared.metadataStatusWaitUpload - metadataForUpload.size = utilityFileSystem.getFileSize(filePath: fileNamePath) + metadata.session = NCNetworking.shared.sessionUploadBackground + metadata.sessionSelector = NCGlobal.shared.selectorUploadFile + metadata.status = NCGlobal.shared.metadataStatusWaitUpload + metadata.sessionDate = Date() + metadata.size = NCUtilityFileSystem().getFileSize(filePath: fileNamePath) - if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { + if NCManageDatabase.shared.getMetadataConflict(account: session.account, serverUrl: serverUrl, fileNameView: fileNameSave, nativeFormat: false) != nil { - guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } + guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict else { return } - conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") - conflict.serverUrl = serverUrl - conflict.metadatasUploadInConflict = [metadataForUpload] - conflict.delegate = self + conflict.textLabelDetailNewFile = NSLocalizedString("_now_", comment: "") + conflict.serverUrl = serverUrl + conflict.metadatasUploadInConflict = [metadata] + conflict.delegate = self - self.present(conflict, animated: true, completion: nil) + self.present(conflict, animated: true, completion: nil) - } else { + } else { - dismissAndUpload(metadataForUpload) + dismissAndUpload(metadata) + } } } @@ -282,8 +293,14 @@ class NCCreateFormUploadVoiceNote: XLFormViewController, NCSelectDelegate, AVAud AnalyticsHelper.shared.trackCreateVoiceMemo(size: metadata.size, date: metadata.creationDate as Date) - utilityFileSystem.copyFile(atPath: self.fileNamePath, toPath: utilityFileSystem.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)) + NCUtilityFileSystem().copyFile(atPath: fileNamePath, toPath: NCUtilityFileSystem().getDirectoryProviderStorageOcId(metadata.ocId, + fileName: metadata.fileNameView, + userId: metadata.userId, + urlBase: metadata.urlBase)) + Task { + await NCManageDatabase.shared.addMetadataAsync(metadata) + } NCNetworkingProcess.shared.createProcessUploads(metadatas: [metadata], completion: { _ in }) self.dismiss(animated: true, completion: nil) diff --git a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift index caa5aefaf4..bc2e39f8b2 100644 --- a/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift +++ b/iOSClient/Scan document/NCCreateFormUploadScanDocument.swift @@ -493,7 +493,7 @@ class NCCreateFormUploadScanDocument: XLFormViewController, NCSelectDelegate, NC var newFileName: String = "" if fileName == nil || fileName == "" { - name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") + name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") name = utilityFileSystem.createFileNameDate("scan", ext: "pdf") } else { name = fileName! diff --git a/iOSClient/Settings/NCManageAutoUploadFileName.swift b/iOSClient/Settings/NCManageAutoUploadFileName.swift index 41356f7ea7..4a192b80f8 100644 --- a/iOSClient/Settings/NCManageAutoUploadFileName.swift +++ b/iOSClient/Settings/NCManageAutoUploadFileName.swift @@ -130,6 +130,10 @@ class NCManageAutoUploadFileName: XLFormViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + + // Re-evaluate in-app messages after viewDidAppear + MoEngageAnalytics.shared.displayInAppNotificationSafely(reason: "viewDidAppear") + appDelegate.activeViewController = self } diff --git a/iOSClient/Settings/NCSettings.m b/iOSClient/Settings/NCSettings.m index 62abc39c87..e416450e70 100644 --- a/iOSClient/Settings/NCSettings.m +++ b/iOSClient/Settings/NCSettings.m @@ -101,7 +101,7 @@ - (void)initializeForm BOOL isE2EEEnabled = [[NCGlobal shared] capabilityE2EEEnabled]; NSString *versionE2EE = [[NCGlobal shared] capabilityE2EEApiVersion]; - if (isE2EEEnabled == YES && [NCGlobal.shared.e2eeVersions containsObject:versionE2EE]) { + if (isE2EEEnabled == YES && [NCGlobal.shared.e2eeCompatibleVersions containsObject:versionE2EE]) { // EndToEnd Encryption NSString *title = [NSString stringWithFormat:@"%@",NSLocalizedString(@"_e2e_settings_", nil)]; diff --git a/iOSClient/Settings/NCSettingsBundleHelper.swift b/iOSClient/Settings/NCSettingsBundleHelper.swift index 8b0169890f..c169d58bc1 100644 --- a/iOSClient/Settings/NCSettingsBundleHelper.swift +++ b/iOSClient/Settings/NCSettingsBundleHelper.swift @@ -1,25 +1,6 @@ -// -// NCSettingsBundleHelper.swift -// Nextcloud -// -// Created by Marino Faggiana on 17/02/21. -// Copyright © 2021 Marino Faggiana. All rights reserved. -// -// Author Marino Faggiana -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -// +// SPDX-FileCopyrightText: Nextcloud GmbH +// SPDX-FileCopyrightText: 2021 Marino Faggiana +// SPDX-License-Identifier: GPL-3.0-or-later import Foundation import UIKit diff --git a/iOSClient/Settings/PrivacyPolicyViewController.swift b/iOSClient/Settings/PrivacyPolicyViewController.swift index 141c444fca..9e1bd0ed64 100644 --- a/iOSClient/Settings/PrivacyPolicyViewController.swift +++ b/iOSClient/Settings/PrivacyPolicyViewController.swift @@ -35,6 +35,10 @@ class PrivacyPolicyViewController: UIViewController, WKNavigationDelegate, WKUID override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + + // Re-evaluate in-app messages after viewDidAppear + MoEngageAnalytics.shared.displayInAppNotificationSafely(reason: "viewDidAppear") + myWebView = WKWebView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.width, height:UIScreen.main.bounds.height)) } override func didReceiveMemoryWarning() {