Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/ios.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarinofaggiana <ios@nextcloud.com>2022-02-02 12:26:38 +0300
committermarinofaggiana <ios@nextcloud.com>2022-02-02 12:26:38 +0300
commit541d12bdb8040cbe9d38561055d39e584e7e21a5 (patch)
tree313e81e4cc26ecbae77d512260ba548492788ff7
parentd33196a70f4cfe495260d7c0f56a998560f3815d (diff)
parent6e0ac29089b58755f830a7b7367de1e5ef648616 (diff)
Merge branch 'develop'4.2.1
-rw-r--r--.gitignore2
-rw-r--r--.swiftlint.yml2
-rw-r--r--Cartfile10
-rw-r--r--Cartfile.resolved3
-rw-r--r--Nextcloud.xcodeproj/project.pbxproj551
-rw-r--r--Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved119
-rw-r--r--README.md2
-rw-r--r--Share/MainInterface.storyboard25
-rw-r--r--Share/NCShareCell.swift82
-rw-r--r--Share/NCShareExtension+DataSource.swift180
-rw-r--r--Share/NCShareExtension+Files.swift215
-rw-r--r--Share/NCShareExtension+NCDelegate.swift159
-rw-r--r--Share/NCShareExtension.swift923
-rw-r--r--iOSClient/AppDelegate.swift11
-rwxr-xr-xiOSClient/Brand/NCBrand.swift1
-rw-r--r--iOSClient/Data/NCDatabase.swift7
-rw-r--r--iOSClient/Data/NCManageDatabase.swift45
-rw-r--r--iOSClient/Extensions/UIImage+Extensions.swift31
-rw-r--r--iOSClient/Main/Create cloud/NCCreateFormUploadAssets.swift1
-rw-r--r--iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift25
-rw-r--r--iOSClient/Main/NCFunctionCenter.swift58
-rw-r--r--iOSClient/Main/NCPickerViewController.swift2
-rw-r--r--iOSClient/Menu/NCViewer+Menu.swift22
-rw-r--r--iOSClient/NCGlobal.swift3
-rw-r--r--iOSClient/Networking/NCNetworking.swift74
-rw-r--r--iOSClient/Networking/NCNetworkingE2EE.swift2
-rw-r--r--iOSClient/Networking/NCNetworkingProcessUpload.swift9
-rw-r--r--iOSClient/Rename file/NCRenameFile.swift5
-rw-r--r--iOSClient/Security/NCEndToEndEncryption.m25
-rw-r--r--iOSClient/Settings/Acknowledgements.rtf8
-rwxr-xr-xiOSClient/Settings/CCAdvanced.h2
-rw-r--r--iOSClient/Settings/CCManageAccount.h2
-rw-r--r--iOSClient/Settings/CCManageAutoUpload.h2
-rw-r--r--iOSClient/Settings/NCManageEndToEndEncryption.h2
-rw-r--r--iOSClient/Settings/NCSettings.h2
-rw-r--r--iOSClient/Supporting Files/af.lproj/Localizable.stringsbin100386 -> 102484 bytes
-rw-r--r--iOSClient/Supporting Files/ar.lproj/Localizable.stringsbin97536 -> 99672 bytes
-rw-r--r--iOSClient/Supporting Files/ast.lproj/Localizable.stringsbin100540 -> 102616 bytes
-rw-r--r--iOSClient/Supporting Files/az.lproj/Localizable.stringsbin100026 -> 102132 bytes
-rw-r--r--iOSClient/Supporting Files/bg_BG.lproj/Localizable.stringsbin106060 -> 107970 bytes
-rw-r--r--iOSClient/Supporting Files/bn_BD.lproj/Localizable.stringsbin99964 -> 102070 bytes
-rw-r--r--iOSClient/Supporting Files/br.lproj/Localizable.stringsbin104432 -> 106388 bytes
-rw-r--r--iOSClient/Supporting Files/bs.lproj/Localizable.stringsbin99956 -> 102062 bytes
-rw-r--r--iOSClient/Supporting Files/ca.lproj/Localizable.stringsbin107172 -> 109064 bytes
-rw-r--r--iOSClient/Supporting Files/cs-CZ.lproj/Localizable.stringsbin102710 -> 104810 bytes
-rw-r--r--iOSClient/Supporting Files/cy_GB.lproj/Localizable.stringsbin99956 -> 102034 bytes
-rw-r--r--iOSClient/Supporting Files/da.lproj/Localizable.stringsbin100284 -> 102306 bytes
-rw-r--r--iOSClient/Supporting Files/de.lproj/Localizable.stringsbin109124 -> 111402 bytes
-rw-r--r--iOSClient/Supporting Files/el.lproj/Localizable.stringsbin109572 -> 111416 bytes
-rw-r--r--iOSClient/Supporting Files/en-GB.lproj/Localizable.stringsbin99770 -> 101876 bytes
-rw-r--r--iOSClient/Supporting Files/en.lproj/Localizable.strings54
-rw-r--r--iOSClient/Supporting Files/eo.lproj/Localizable.stringsbin100400 -> 102486 bytes
-rw-r--r--iOSClient/Supporting Files/es-419.lproj/Localizable.stringsbin103840 -> 105806 bytes
-rw-r--r--iOSClient/Supporting Files/es-AR.lproj/Localizable.stringsbin102760 -> 104708 bytes
-rw-r--r--iOSClient/Supporting Files/es-CL.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-CO.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-CR.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-DO.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-EC.lproj/Localizable.stringsbin104472 -> 106438 bytes
-rw-r--r--iOSClient/Supporting Files/es-GT.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-HN.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es-MX.lproj/Localizable.stringsbin104592 -> 106544 bytes
-rw-r--r--iOSClient/Supporting Files/es-NI.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es-PA.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es-PE.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es-PR.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es-PY.lproj/Localizable.stringsbin103854 -> 105820 bytes
-rw-r--r--iOSClient/Supporting Files/es-SV.lproj/Localizable.stringsbin104466 -> 106432 bytes
-rw-r--r--iOSClient/Supporting Files/es-UY.lproj/Localizable.stringsbin103828 -> 105794 bytes
-rw-r--r--iOSClient/Supporting Files/es.lproj/Localizable.stringsbin107196 -> 109162 bytes
-rw-r--r--iOSClient/Supporting Files/et_EE.lproj/Localizable.stringsbin100206 -> 102310 bytes
-rw-r--r--iOSClient/Supporting Files/eu.lproj/Localizable.stringsbin106320 -> 108466 bytes
-rw-r--r--iOSClient/Supporting Files/fa.lproj/Localizable.stringsbin100542 -> 102594 bytes
-rw-r--r--iOSClient/Supporting Files/fi-FI.lproj/Localizable.stringsbin102574 -> 104626 bytes
-rw-r--r--iOSClient/Supporting Files/fr.lproj/Localizable.stringsbin111350 -> 113428 bytes
-rw-r--r--iOSClient/Supporting Files/gl.lproj/Localizable.stringsbin106862 -> 108884 bytes
-rw-r--r--iOSClient/Supporting Files/he.lproj/Localizable.stringsbin97964 -> 100120 bytes
-rw-r--r--iOSClient/Supporting Files/hr.lproj/Localizable.stringsbin104840 -> 106962 bytes
-rw-r--r--iOSClient/Supporting Files/hu.lproj/Localizable.stringsbin103602 -> 105590 bytes
-rw-r--r--iOSClient/Supporting Files/ia.lproj/Localizable.stringsbin100394 -> 102494 bytes
-rw-r--r--iOSClient/Supporting Files/id.lproj/Localizable.stringsbin100360 -> 102460 bytes
-rw-r--r--iOSClient/Supporting Files/is.lproj/Localizable.stringsbin101830 -> 103870 bytes
-rw-r--r--iOSClient/Supporting Files/it.lproj/Localizable.stringsbin106794 -> 108970 bytes
-rw-r--r--iOSClient/Supporting Files/ja-JP.lproj/Localizable.stringsbin84096 -> 86436 bytes
-rw-r--r--iOSClient/Supporting Files/ka-GE.lproj/Localizable.stringsbin102586 -> 104624 bytes
-rw-r--r--iOSClient/Supporting Files/ko.lproj/Localizable.stringsbin82658 -> 83344 bytes
-rw-r--r--iOSClient/Supporting Files/lb.lproj/Localizable.stringsbin100056 -> 102146 bytes
-rw-r--r--iOSClient/Supporting Files/lo.lproj/Localizable.stringsbin97970 -> 100118 bytes
-rw-r--r--iOSClient/Supporting Files/lt_LT.lproj/Localizable.stringsbin102284 -> 104392 bytes
-rw-r--r--iOSClient/Supporting Files/lv.lproj/Localizable.stringsbin100654 -> 102732 bytes
-rw-r--r--iOSClient/Supporting Files/mk.lproj/Localizable.stringsbin100910 -> 102970 bytes
-rw-r--r--iOSClient/Supporting Files/mn.lproj/Localizable.stringsbin100412 -> 102512 bytes
-rw-r--r--iOSClient/Supporting Files/nb-NO.lproj/Localizable.stringsbin100792 -> 102880 bytes
-rw-r--r--iOSClient/Supporting Files/nl.lproj/Localizable.stringsbin105026 -> 107096 bytes
-rw-r--r--iOSClient/Supporting Files/nn_NO.lproj/Localizable.stringsbin99818 -> 101924 bytes
-rw-r--r--iOSClient/Supporting Files/oc.lproj/Localizable.stringsbin100232 -> 102332 bytes
-rw-r--r--iOSClient/Supporting Files/pl.lproj/Localizable.stringsbin104274 -> 106394 bytes
-rw-r--r--iOSClient/Supporting Files/pt-BR.lproj/Localizable.stringsbin105062 -> 107228 bytes
-rw-r--r--iOSClient/Supporting Files/pt-PT.lproj/Localizable.stringsbin103776 -> 105672 bytes
-rw-r--r--iOSClient/Supporting Files/ro.lproj/Localizable.stringsbin100546 -> 104826 bytes
-rw-r--r--iOSClient/Supporting Files/ru.lproj/Localizable.stringsbin104726 -> 106796 bytes
-rw-r--r--iOSClient/Supporting Files/sc.lproj/Localizable.stringsbin109528 -> 111444 bytes
-rw-r--r--iOSClient/Supporting Files/si.lproj/Localizable.stringsbin100626 -> 102682 bytes
-rw-r--r--iOSClient/Supporting Files/sk-SK.lproj/Localizable.stringsbin103968 -> 106064 bytes
-rw-r--r--iOSClient/Supporting Files/sl.lproj/Localizable.stringsbin105650 -> 107504 bytes
-rw-r--r--iOSClient/Supporting Files/sq.lproj/Localizable.stringsbin101404 -> 103378 bytes
-rw-r--r--iOSClient/Supporting Files/sr.lproj/Localizable.stringsbin101432 -> 103518 bytes
-rw-r--r--iOSClient/Supporting Files/sr@latin.lproj/Localizable.stringsbin99964 -> 102056 bytes
-rw-r--r--iOSClient/Supporting Files/sv.lproj/Localizable.stringsbin101540 -> 103620 bytes
-rw-r--r--iOSClient/Supporting Files/th_TH.lproj/Localizable.stringsbin100108 -> 102206 bytes
-rw-r--r--iOSClient/Supporting Files/tr.lproj/Localizable.stringsbin103586 -> 105594 bytes
-rw-r--r--iOSClient/Supporting Files/uk.lproj/Localizable.stringsbin100810 -> 102864 bytes
-rw-r--r--iOSClient/Supporting Files/vi.lproj/Localizable.stringsbin100306 -> 102394 bytes
-rw-r--r--iOSClient/Supporting Files/zh-Hans.lproj/Localizable.stringsbin74452 -> 76940 bytes
-rw-r--r--iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.stringsbin75882 -> 78688 bytes
-rw-r--r--iOSClient/Supporting Files/zh_HK.lproj/Localizable.stringsbin75038 -> 76618 bytes
-rw-r--r--iOSClient/Utility/CCUtility.h2
-rw-r--r--iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift57
-rw-r--r--iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift38
-rw-r--r--iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift7
-rw-r--r--iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.storyboard4
121 files changed, 1601 insertions, 1173 deletions
diff --git a/.gitignore b/.gitignore
index 86f3f75ec..5d65d1376 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,8 +37,6 @@ DerivedData
## Package
Carthage/
-Package.resolved
-Cartfile.resolved
### SwiftPackageManager ###
.swiftpm
diff --git a/.swiftlint.yml b/.swiftlint.yml
index aa7354d20..6dc7182d3 100644
--- a/.swiftlint.yml
+++ b/.swiftlint.yml
@@ -4,6 +4,7 @@ opt_in_rules: # some rules are turned off by default, so you need to opt-in
- empty_string
- explicit_init
- unneeded_parentheses_in_closure_argument
+ - operator_usage_whitespace
empty_count:
severity: warning
@@ -33,7 +34,6 @@ excluded:
- File Provider Extension/FileProviderExtension.swift
- File Provider Extension/FileProviderUtility.swift
- Notification Service Extension/NotificationService.swift
- - Share/NCShareExtension.swift
- iOSClient/Activity/NCActivity.swift
- iOSClient/Activity/NCActivityTableViewCell.swift
- iOSClient/AppDelegate.swift
diff --git a/Cartfile b/Cartfile
index 0078200dc..75e1cbfe8 100644
--- a/Cartfile
+++ b/Cartfile
@@ -1,11 +1,3 @@
-github "tilltue/TLPhotoPicker" "2.1.4"
-github "kishikawakatsumi/UICKeyChainStore"
-github "WenchaoD/FSCalendar" "2.8.0"
-github "FabrizioBrancati/Queuer"
-github "xmartlabs/XLForm" ~> 4.1
-github "AssistoLab/DropDown" "v2.3.13"
-
github "https://github.com/marinofaggiana/KTVHTTPCache" "2.0.2"
github "https://github.com/marinofaggiana/TOPasscodeViewController" "master"
-github "https://github.com/marinofaggiana/OpenSSL" "master"
-github "https://github.com/marinofaggiana/ChromaColorPicker" "master"
+github "krzyzanowskim/OpenSSL" \ No newline at end of file
diff --git a/Cartfile.resolved b/Cartfile.resolved
new file mode 100644
index 000000000..c96766238
--- /dev/null
+++ b/Cartfile.resolved
@@ -0,0 +1,3 @@
+github "krzyzanowskim/OpenSSL" "1.1.1300"
+github "marinofaggiana/KTVHTTPCache" "2.0.2"
+github "marinofaggiana/TOPasscodeViewController" "7a750031bb86d9dc9f193bf34a38bbd288b3c4fd"
diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj
index 4c766e440..995415431 100644
--- a/Nextcloud.xcodeproj/project.pbxproj
+++ b/Nextcloud.xcodeproj/project.pbxproj
@@ -18,6 +18,13 @@
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 */; };
+ AF22B206277B4E4C00DAB0CC /* NCCreateFormUploadConflict.swift in Sources */ = {isa = PBXBuildFile; fileRef = F704B5E42430AA8000632F5F /* NCCreateFormUploadConflict.swift */; };
+ AF22B207277B4E4C00DAB0CC /* NCCreateFormUploadConflict.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F704B5E22430AA6F00632F5F /* NCCreateFormUploadConflict.storyboard */; };
+ AF22B208277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F704B5E82430C0B800632F5F /* NCCreateFormUploadConflictCell.swift */; };
+ AF22B209277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F704B5E62430C06700632F5F /* NCCreateFormUploadConflictCell.xib */; };
+ AF22B20C277C6F4D00DAB0CC /* NCShareCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF22B20B277C6F4D00DAB0CC /* NCShareCell.swift */; };
+ AF22B217277D196700DAB0CC /* NCShareExtension+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF22B215277D196700DAB0CC /* NCShareExtension+DataSource.swift */; };
+ AF22B218277D196700DAB0CC /* NCShareExtension+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF22B216277D196700DAB0CC /* NCShareExtension+Files.swift */; };
AF2D7C7C2742556F00ADF566 /* NCShareLinkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF2D7C7B2742556F00ADF566 /* NCShareLinkCell.swift */; };
AF2D7C7E2742559100ADF566 /* NCShareUserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF2D7C7D2742559100ADF566 /* NCShareUserCell.swift */; };
AF4BF614275629E20081CEEF /* NCManageDatabase+Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4BF613275629E20081CEEF /* NCManageDatabase+Account.swift */; };
@@ -32,6 +39,7 @@
AF4BF61F27562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */; };
AF4BF62027562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */; };
AF4BF62127562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */; };
+ AF730AFA27843E4C00B7520E /* NCShareExtension+NCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF730AF927843E4C00B7520E /* NCShareExtension+NCDelegate.swift */; };
AF817EF1274BC781009ED85B /* NCUserBaseUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF817EF0274BC781009ED85B /* NCUserBaseUrl.swift */; };
AF817EF2274BC781009ED85B /* NCUserBaseUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF817EF0274BC781009ED85B /* NCUserBaseUrl.swift */; };
AF817EF3274BC781009ED85B /* NCUserBaseUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF817EF0274BC781009ED85B /* NCUserBaseUrl.swift */; };
@@ -76,25 +84,6 @@
F70B866D2642A21300ED5349 /* NCBackgroundImageColor.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F70B866B2642A21300ED5349 /* NCBackgroundImageColor.storyboard */; };
F70B866E2642A21300ED5349 /* NCBackgroundImageColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70B866C2642A21300ED5349 /* NCBackgroundImageColor.swift */; };
F70B86752642CE3B00ED5349 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = F70B86742642CE3B00ED5349 /* FirebaseCrashlytics */; };
- F70B86762642CF5300ED5349 /* ChromaColorPicker.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B866F2642CA9500ED5349 /* ChromaColorPicker.xcframework */; };
- F70B86772642CF5300ED5349 /* ChromaColorPicker.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B866F2642CA9500ED5349 /* ChromaColorPicker.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B86872642CF5600ED5349 /* TLPhotoPicker.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867A2642CF5300ED5349 /* TLPhotoPicker.xcframework */; };
- F70B86882642CF5600ED5349 /* TLPhotoPicker.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867A2642CF5300ED5349 /* TLPhotoPicker.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B86892642CF5600ED5349 /* XLForm.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867B2642CF5300ED5349 /* XLForm.xcframework */; };
- F70B868A2642CF5600ED5349 /* XLForm.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867B2642CF5300ED5349 /* XLForm.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B868B2642CF5600ED5349 /* Queuer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867C2642CF5300ED5349 /* Queuer.xcframework */; };
- F70B868C2642CF5600ED5349 /* Queuer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867C2642CF5300ED5349 /* Queuer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B868D2642CF5600ED5349 /* UICKeyChainStore.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867D2642CF5400ED5349 /* UICKeyChainStore.xcframework */; };
- F70B868E2642CF5600ED5349 /* UICKeyChainStore.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867D2642CF5400ED5349 /* UICKeyChainStore.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B86932642CF5700ED5349 /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; };
- F70B86942642CF5700ED5349 /* OpenSSL.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B86972642CF5700ED5349 /* TOPasscodeViewController.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86822642CF5500ED5349 /* TOPasscodeViewController.xcframework */; };
- F70B86982642CF5700ED5349 /* TOPasscodeViewController.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86822642CF5500ED5349 /* TOPasscodeViewController.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B86992642CF5800ED5349 /* FSCalendar.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86832642CF5500ED5349 /* FSCalendar.xcframework */; };
- F70B869A2642CF5800ED5349 /* FSCalendar.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86832642CF5500ED5349 /* FSCalendar.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B869B2642CF5800ED5349 /* DropDown.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86842642CF5500ED5349 /* DropDown.xcframework */; };
- F70B869C2642CF5800ED5349 /* DropDown.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86842642CF5500ED5349 /* DropDown.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F70B869D2642CF6900ED5349 /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; };
F70BFC7420E0FA7D00C67599 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; };
F70BFC7520E0FA7D00C67599 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; };
F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; };
@@ -106,6 +95,14 @@
F710D1F52405770F00A6033D /* NCViewerPDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D1F42405770F00A6033D /* NCViewerPDF.swift */; };
F710D2022405826100A6033D /* NCViewer+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F710D2012405826100A6033D /* NCViewer+Menu.swift */; };
F710E8111EF95C9C00DC2427 /* ImagesIntro.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */; };
+ F710FC7A277B7D0000AA9FBF /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC79277B7D0000AA9FBF /* Realm */; };
+ F710FC7C277B7D0000AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC7B277B7D0000AA9FBF /* RealmSwift */; };
+ F710FC7E277B7D2600AA9FBF /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC7D277B7D2600AA9FBF /* Realm */; };
+ F710FC80277B7D2700AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC7F277B7D2700AA9FBF /* RealmSwift */; };
+ F710FC82277B7D3500AA9FBF /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC81277B7D3500AA9FBF /* Realm */; };
+ F710FC84277B7D3500AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC83277B7D3500AA9FBF /* RealmSwift */; };
+ F710FC86277B7D3F00AA9FBF /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC85277B7D3F00AA9FBF /* Realm */; };
+ F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F710FC87277B7D3F00AA9FBF /* RealmSwift */; };
F7134186259747BA00768D21 /* NCPushNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = F7134185259747BA00768D21 /* NCPushNotification.m */; };
F713FF002472764100214AF6 /* UIImage+animatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = F713FEFF2472764100214AF6 /* UIImage+animatedGIF.m */; };
F71459D21D12E3B700CAFEEC /* CCUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7053E3D1C639DF500741EA5 /* CCUtility.m */; };
@@ -118,15 +115,12 @@
F7148059262ED52200693E51 /* NCSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD57219048040088454D /* NCSectionHeaderMenu.xib */; };
F714805E262ED52900693E51 /* NCSectionFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F78ACD53219047D40088454D /* NCSectionFooter.xib */; };
F7148063262ED66200693E51 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7239876253D86D300257F49 /* NCEmptyView.xib */; };
- F716B75A26F0995200D37EFC /* KTVHTTPCache.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86792642CF5300ED5349 /* KTVHTTPCache.xcframework */; };
- F716B75B26F0995200D37EFC /* KTVHTTPCache.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86792642CF5300ED5349 /* KTVHTTPCache.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- F716B75C26F0995200D37EFC /* KTVCocoaHTTPServer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867E2642CF5400ED5349 /* KTVCocoaHTTPServer.xcframework */; };
- F716B75D26F0995200D37EFC /* KTVCocoaHTTPServer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867E2642CF5400ED5349 /* KTVCocoaHTTPServer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F716B75F26F09DF600D37EFC /* NCKTVHTTPCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F716B75E26F09DF600D37EFC /* NCKTVHTTPCache.swift */; };
F717402D24F699A5000C87D5 /* NCFavorite.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F717402B24F699A5000C87D5 /* NCFavorite.storyboard */; };
F717402E24F699A5000C87D5 /* NCFavorite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F717402C24F699A5000C87D5 /* NCFavorite.swift */; };
F718C24E254D507B00C5C256 /* NCViewerMediaDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F718C24D254D507B00C5C256 /* NCViewerMediaDetailView.swift */; };
F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7226EDB1EE4089300EBECB1 /* Main.storyboard */; };
+ F7233B3A27835FA400F40A43 /* ChromaColorPicker in Frameworks */ = {isa = PBXBuildFile; productRef = F7233B3927835FA400F40A43 /* ChromaColorPicker */; };
F723985C253C95CE00257F49 /* NCViewerRichdocument.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F723985B253C95CE00257F49 /* NCViewerRichdocument.storyboard */; };
F7239871253D86B600257F49 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7239870253D86B600257F49 /* NCEmptyDataSet.swift */; };
F7239877253D86D300257F49 /* NCEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7239876253D86D300257F49 /* NCEmptyView.xib */; };
@@ -134,13 +128,13 @@
F726EEEC1FED1C820030B9C8 /* NCEndToEndInitialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = F726EEEB1FED1C820030B9C8 /* NCEndToEndInitialize.swift */; };
F72928A0253B0937009CA4FD /* NCMainNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F729289F253B0937009CA4FD /* NCMainNavigationController.swift */; };
F72A47EC2487B06B005AD489 /* NCOperationQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72A47EB2487B06B005AD489 /* NCOperationQueue.swift */; };
+ F72CD01227A7E92400E59476 /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F72CD01127A7E92400E59476 /* JGProgressHUD */; };
F72CD63A25C19EBF00F46F9A /* NCAutoUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72CD63925C19EBF00F46F9A /* NCAutoUpload.swift */; };
F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F72D1005210B6882009C96B7 /* NCPushNotificationEncryption.m */; };
F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72D404823D2082500A97FD0 /* NCViewerNextcloudText.swift */; };
F72D7EB7263B1207000B3DFC /* MarkdownKit in Frameworks */ = {isa = PBXBuildFile; productRef = F72D7EB6263B1207000B3DFC /* MarkdownKit */; };
F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */ = {isa = PBXBuildFile; productRef = F72DA9B325F53E4E00B87DB1 /* SwiftRichString */; };
F733598125C1C188002ABA72 /* NCAskAuthorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = F733598025C1C188002ABA72 /* NCAskAuthorization.swift */; };
- F73521B527396D2900919197 /* IHProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F73521B427396D2900919197 /* IHProgressHUD */; };
F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7362A1E220C853A005101B5 /* LaunchScreen.storyboard */; };
F7381EE1218218C9000B1560 /* NCOffline.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7381EDA218218C9000B1560 /* NCOffline.swift */; };
F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7381EDE218218C9000B1560 /* NCOffline.storyboard */; };
@@ -183,11 +177,13 @@
F74C0437253F1CDC009762AB /* NCShares.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F74C0435253F1CDC009762AB /* NCShares.storyboard */; };
F74DE14325135B6800917068 /* NCTransfers.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74DE14125135B6800917068 /* NCTransfers.swift */; };
F74DE14425135B6800917068 /* NCTransfers.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F74DE14225135B6800917068 /* NCTransfers.storyboard */; };
+ F74E7720277A2EF40013B958 /* XLForm in Frameworks */ = {isa = PBXBuildFile; productRef = F74E771F277A2EF40013B958 /* XLForm */; };
F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7501C302212E57400FB1415 /* NCMedia.storyboard */; };
F7501C332212E57500FB1415 /* NCMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7501C312212E57400FB1415 /* NCMedia.swift */; };
F755BD9B20594AC7008C5FBB /* NCService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F755BD9A20594AC7008C5FBB /* NCService.swift */; };
F7581D1A25EFDA61004DC699 /* NCLoginWeb+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7581D1925EFDA60004DC699 /* NCLoginWeb+Menu.swift */; };
F7581D2425EFDDDF004DC699 /* NCMedia+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7581D2325EFDDDF004DC699 /* NCMedia+Menu.swift */; };
+ F758A01227A7F03E0069468B /* JGProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F758A01127A7F03E0069468B /* JGProgressHUD */; };
F758B45A212C564000515F55 /* Scan.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F758B457212C564000515F55 /* Scan.storyboard */; };
F758B45E212C569D00515F55 /* ScanCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F758B45D212C569C00515F55 /* ScanCell.swift */; };
F758B460212C56A400515F55 /* ScanCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F758B45F212C56A400515F55 /* ScanCollectionView.swift */; };
@@ -226,6 +222,17 @@
F76D3CF12428B40E005DFA87 /* NCViewerPDFSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76D3CF02428B40E005DFA87 /* NCViewerPDFSearch.swift */; };
F76D3CF32428B94E005DFA87 /* NCViewerPDFSearchCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F76D3CF22428B94E005DFA87 /* NCViewerPDFSearchCell.xib */; };
F76D3CF52428D0C1005DFA87 /* NCViewerPDF.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F76D3CF42428D0C0005DFA87 /* NCViewerPDF.storyboard */; };
+ F76DA93F277B75870082465B /* KTVCocoaHTTPServer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867E2642CF5400ED5349 /* KTVCocoaHTTPServer.xcframework */; };
+ F76DA940277B75870082465B /* KTVCocoaHTTPServer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B867E2642CF5400ED5349 /* KTVCocoaHTTPServer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F76DA941277B75870082465B /* KTVHTTPCache.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86792642CF5300ED5349 /* KTVHTTPCache.xcframework */; };
+ F76DA942277B75870082465B /* KTVHTTPCache.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86792642CF5300ED5349 /* KTVHTTPCache.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F76DA95B277B75A90082465B /* TOPasscodeViewController.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86822642CF5500ED5349 /* TOPasscodeViewController.xcframework */; };
+ F76DA95C277B75A90082465B /* TOPasscodeViewController.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86822642CF5500ED5349 /* TOPasscodeViewController.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F76DA963277B760E0082465B /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F76DA962277B760E0082465B /* Queuer */; };
+ F76DA966277B76F30082465B /* UICKeyChainStore in Frameworks */ = {isa = PBXBuildFile; productRef = F76DA965277B76F30082465B /* UICKeyChainStore */; };
+ F76DA969277B77EA0082465B /* DropDown in Frameworks */ = {isa = PBXBuildFile; productRef = F76DA968277B77EA0082465B /* DropDown */; };
+ F76DA96C277B78400082465B /* FSCalendar in Frameworks */ = {isa = PBXBuildFile; productRef = F76DA96B277B78400082465B /* FSCalendar */; };
+ F76DA96F277B78AE0082465B /* TLPhotoPicker in Frameworks */ = {isa = PBXBuildFile; productRef = F76DA96E277B78AE0082465B /* TLPhotoPicker */; };
F7707687263A853700A1BA94 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
F7707689263A896A00A1BA94 /* UIImage+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B7504A2397D38E004E13EC /* UIImage+Extensions.swift */; };
F770768A263A8A2500A1BA94 /* NCUtilityFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74AF3A3247FB6AE00AC767B /* NCUtilityFileSystem.swift */; };
@@ -258,14 +265,6 @@
F78071091EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */; };
F780710A1EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */; };
F78295311F962EFA00A572F5 /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; };
- F782A57B25123694007BBABD /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F782A57A25123694007BBABD /* Realm */; };
- F782A57D25123694007BBABD /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F782A57C25123694007BBABD /* RealmSwift */; };
- F782A583251236B7007BBABD /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F782A582251236B7007BBABD /* Realm */; };
- F782A585251236B7007BBABD /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F782A584251236B7007BBABD /* RealmSwift */; };
- F782A587251236CA007BBABD /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F782A586251236CA007BBABD /* Realm */; };
- F782A589251236CA007BBABD /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F782A588251236CA007BBABD /* RealmSwift */; };
- F782A58B251236D1007BBABD /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = F782A58A251236D1007BBABD /* Realm */; };
- F782A58D251236D1007BBABD /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F782A58C251236D1007BBABD /* RealmSwift */; };
F782FDC424E6933900666099 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; };
F785EE9D246196DF00B3F945 /* NCNetworkingE2EE.swift in Sources */ = {isa = PBXBuildFile; fileRef = F785EE9C246196DF00B3F945 /* NCNetworkingE2EE.swift */; };
F785EE9E2461A09900B3F945 /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; };
@@ -304,7 +303,6 @@
F79B646226CA661600838ACA /* UIControl+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79B645F26CA661600838ACA /* UIControl+Extensions.swift */; };
F79B646326CA661600838ACA /* UIControl+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79B645F26CA661600838ACA /* UIControl+Extensions.swift */; };
F79B869B265E19D40085C0E0 /* NSMutableAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79B869A265E19D40085C0E0 /* NSMutableAttributedString+Extensions.swift */; };
- F79BCEEB270B49C800B5B71F /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79BCEEA270B49C800B5B71F /* SwiftUI.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
F79EC77F26316193004E59D6 /* NCRenameFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70D87CE25EE6E58008CBBBD /* NCRenameFile.swift */; };
F79EC784263161BA004E59D6 /* NCRenameFile.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F70D87CD25EE6E58008CBBBD /* NCRenameFile.storyboard */; };
F79EC78926316AC4004E59D6 /* NCPopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F702F30725EE5D47008F8E80 /* NCPopupViewController.swift */; };
@@ -330,6 +328,7 @@
F7BAADC91ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
F7BAADCB1ED5A87C00B7EAD4 /* NCManageDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB51ED5A87C00B7EAD4 /* NCManageDatabase.swift */; };
F7BAADCC1ED5A87C00B7EAD4 /* NCManageDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB51ED5A87C00B7EAD4 /* NCManageDatabase.swift */; };
+ F7BB7E4727A18C56009B9F29 /* Parchment in Frameworks */ = {isa = PBXBuildFile; productRef = F7BB7E4627A18C56009B9F29 /* Parchment */; };
F7BC287E26663F6C004D46C5 /* NCViewCertificateDetails.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7BC287D26663F6C004D46C5 /* NCViewCertificateDetails.storyboard */; };
F7BC288026663F85004D46C5 /* NCViewCertificateDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BC287F26663F85004D46C5 /* NCViewCertificateDetails.swift */; };
F7BD71E62636EAFC00643C34 /* NCNetworkingE2EE.swift in Sources */ = {isa = PBXBuildFile; fileRef = F785EE9C246196DF00B3F945 /* NCNetworkingE2EE.swift */; };
@@ -353,6 +352,15 @@
F7DFB7F4219C5CA800680748 /* NCCreateFormUploadScanDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DFB7F3219C5CA800680748 /* NCCreateFormUploadScanDocument.swift */; };
F7E0CDCF265CE8610044854E /* NCUserStatus.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7E0CDCE265CE8610044854E /* NCUserStatus.storyboard */; };
F7E4D9C422ED929B003675FD /* NCShareCommentsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E4D9C322ED929B003675FD /* NCShareCommentsCell.swift */; };
+ F7E572FD278F146C00F8C99E /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; };
+ F7E572FE278F146C00F8C99E /* OpenSSL.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F7E57302278F14FF00F8C99E /* OpenSSL.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70B86802642CF5400ED5349 /* OpenSSL.xcframework */; };
+ F7EBCDCF277B81FF00A4EF67 /* UICKeyChainStore in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDCE277B81FF00A4EF67 /* UICKeyChainStore */; };
+ F7EBCDD1277B820D00A4EF67 /* UICKeyChainStore in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDD0277B820D00A4EF67 /* UICKeyChainStore */; };
+ F7EBCDD3277B821700A4EF67 /* UICKeyChainStore in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDD2277B821700A4EF67 /* UICKeyChainStore */; };
+ F7EBCDD5277B82DE00A4EF67 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDD4277B82DE00A4EF67 /* Queuer */; };
+ F7EBCDD7277B834400A4EF67 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDD6277B834400A4EF67 /* Queuer */; };
+ F7EBCDD9277B834F00A4EF67 /* Queuer in Frameworks */ = {isa = PBXBuildFile; productRef = F7EBCDD8277B834F00A4EF67 /* Queuer */; };
F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */ = {isa = PBXBuildFile; productRef = F7ED547B25EEA65400956C55 /* QRCodeReader */; };
F7EDE4CC262D7B6F00414FE6 /* NCEmptyDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7239870253D86B600257F49 /* NCEmptyDataSet.swift */; };
F7EDE4D1262D7B8400414FE6 /* NCDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C1EEA425053A9C00866ACC /* NCDataSource.swift */; };
@@ -367,8 +375,6 @@
F7EFC0C6256BC77700461AAD /* NCMoreUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7EFC0C5256BC77700461AAD /* NCMoreUserCell.xib */; };
F7EFC0CD256BF8DD00461AAD /* NCUserStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7EFC0CC256BF8DD00461AAD /* NCUserStatus.swift */; };
F7F1E54C2492369A00E42386 /* NCMediaCommandView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7F1E54B2492369A00E42386 /* NCMediaCommandView.xib */; };
- F7F5488F273995CE0067475B /* IHProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = F7F5488E273995CE0067475B /* IHProgressHUD */; };
- F7F5CE252707089C007ED1CD /* Parchment in Frameworks */ = {isa = PBXBuildFile; productRef = F7F5CE242707089C007ED1CD /* Parchment */; };
F7F878AE1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; };
F7F878AF1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F878AD1FB9E3B900599E4F /* NCEndToEndMetadata.swift */; };
F7F9D1BB25397CE000D9BFF5 /* NCViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F9D1BA25397CE000D9BFF5 /* NCViewer.swift */; };
@@ -406,23 +412,16 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
- F70B86782642CF5300ED5349 /* Embed Frameworks */ = {
+ F76DA934277B75710082465B /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
- F716B75B26F0995200D37EFC /* KTVHTTPCache.xcframework in Embed Frameworks */,
- F70B869A2642CF5800ED5349 /* FSCalendar.xcframework in Embed Frameworks */,
- F70B868E2642CF5600ED5349 /* UICKeyChainStore.xcframework in Embed Frameworks */,
- F70B86982642CF5700ED5349 /* TOPasscodeViewController.xcframework in Embed Frameworks */,
- F70B86942642CF5700ED5349 /* OpenSSL.xcframework in Embed Frameworks */,
- F716B75D26F0995200D37EFC /* KTVCocoaHTTPServer.xcframework in Embed Frameworks */,
- F70B868C2642CF5600ED5349 /* Queuer.xcframework in Embed Frameworks */,
- F70B868A2642CF5600ED5349 /* XLForm.xcframework in Embed Frameworks */,
- F70B869C2642CF5800ED5349 /* DropDown.xcframework in Embed Frameworks */,
- F70B86882642CF5600ED5349 /* TLPhotoPicker.xcframework in Embed Frameworks */,
- F70B86772642CF5300ED5349 /* ChromaColorPicker.xcframework in Embed Frameworks */,
+ F76DA942277B75870082465B /* KTVHTTPCache.xcframework in Embed Frameworks */,
+ F76DA95C277B75A90082465B /* TOPasscodeViewController.xcframework in Embed Frameworks */,
+ F7E572FE278F146C00F8C99E /* OpenSSL.xcframework in Embed Frameworks */,
+ F76DA940277B75870082465B /* KTVCocoaHTTPServer.xcframework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -457,11 +456,15 @@
371B5A3223D0BD5500FAFAE9 /* FloatingPanel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FloatingPanel.framework; path = Carthage/Build/iOS/FloatingPanel.framework; sourceTree = "<group>"; };
3781B9AF23DB2B7E006B4B1D /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = "<group>"; };
8491B1CC273BBA82001C8C5B /* UIViewController+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Menu.swift"; sourceTree = "<group>"; };
+ AF22B20B277C6F4D00DAB0CC /* NCShareCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCell.swift; sourceTree = "<group>"; };
+ AF22B215277D196700DAB0CC /* NCShareExtension+DataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+DataSource.swift"; sourceTree = "<group>"; };
+ AF22B216277D196700DAB0CC /* NCShareExtension+Files.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+Files.swift"; sourceTree = "<group>"; };
AF2D7C7B2742556F00ADF566 /* NCShareLinkCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareLinkCell.swift; sourceTree = "<group>"; };
AF2D7C7D2742559100ADF566 /* NCShareUserCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareUserCell.swift; sourceTree = "<group>"; };
AF4BF613275629E20081CEEF /* NCManageDatabase+Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Account.swift"; sourceTree = "<group>"; };
AF4BF61827562A4B0081CEEF /* NCManageDatabse+Metadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabse+Metadata.swift"; sourceTree = "<group>"; };
AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Activity.swift"; sourceTree = "<group>"; };
+ AF730AF927843E4C00B7520E /* NCShareExtension+NCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+NCDelegate.swift"; sourceTree = "<group>"; };
AF817EF0274BC781009ED85B /* NCUserBaseUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCUserBaseUrl.swift; sourceTree = "<group>"; };
AF8ED1F92757821000B8DBC4 /* NextcloudTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
AF8ED1FB2757821000B8DBC4 /* NextcloudTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextcloudTests.swift; sourceTree = "<group>"; };
@@ -474,6 +477,21 @@
F700510222DF6897003A3356 /* Parchment.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Parchment.framework; path = Carthage/Build/iOS/Parchment.framework; sourceTree = "<group>"; };
F700510422DF6A89003A3356 /* NCShare.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShare.swift; sourceTree = "<group>"; };
F7020FCD2233D7F700B7297D /* NCCreateFormUploadVoiceNote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadVoiceNote.swift; sourceTree = "<group>"; };
+ F702864D27735D1400ADA8BE /* libavdevice.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libavdevice.xcframework; path = ffmpeg/libavdevice.xcframework; sourceTree = "<group>"; };
+ F702864E27735D1400ADA8BE /* ffmpegkit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = ffmpegkit.xcframework; path = ffmpeg/ffmpegkit.xcframework; sourceTree = "<group>"; };
+ F702864F27735D1500ADA8BE /* libnettle.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libnettle.xcframework; path = ffmpeg/libnettle.xcframework; sourceTree = "<group>"; };
+ F702865027735D1500ADA8BE /* libswscale.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libswscale.xcframework; path = ffmpeg/libswscale.xcframework; sourceTree = "<group>"; };
+ F702865127735D1500ADA8BE /* gmp.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = gmp.xcframework; path = ffmpeg/gmp.xcframework; sourceTree = "<group>"; };
+ F702865227735D1500ADA8BE /* libavcodec.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libavcodec.xcframework; path = ffmpeg/libavcodec.xcframework; sourceTree = "<group>"; };
+ F702865327735D1500ADA8BE /* libavutil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libavutil.xcframework; path = ffmpeg/libavutil.xcframework; sourceTree = "<group>"; };
+ F702865427735D1500ADA8BE /* openh264.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = openh264.xcframework; path = ffmpeg/openh264.xcframework; sourceTree = "<group>"; };
+ F702865527735D1600ADA8BE /* libavfilter.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libavfilter.xcframework; path = ffmpeg/libavfilter.xcframework; sourceTree = "<group>"; };
+ F702865627735D1600ADA8BE /* libhogweed.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libhogweed.xcframework; path = ffmpeg/libhogweed.xcframework; sourceTree = "<group>"; };
+ F702865727735D1600ADA8BE /* x264.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = x264.xcframework; path = ffmpeg/x264.xcframework; sourceTree = "<group>"; };
+ F702865827735D1600ADA8BE /* libavformat.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libavformat.xcframework; path = ffmpeg/libavformat.xcframework; sourceTree = "<group>"; };
+ F702865927735D1600ADA8BE /* libswresample.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = libswresample.xcframework; path = ffmpeg/libswresample.xcframework; sourceTree = "<group>"; };
+ F702865A27735D1700ADA8BE /* gnutls.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = gnutls.xcframework; path = ffmpeg/gnutls.xcframework; sourceTree = "<group>"; };
+ F702867E2773609C00ADA8BE /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
F702F2CC25EE5B4F008F8E80 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
F702F2CE25EE5B5C008F8E80 /* NCGlobal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCGlobal.swift; sourceTree = "<group>"; };
F702F2E425EE5C82008F8E80 /* NCAudioRecorderViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCAudioRecorderViewController.swift; sourceTree = "<group>"; };
@@ -824,10 +842,12 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ F710FC88277B7D3F00AA9FBF /* RealmSwift in Frameworks */,
+ F7EBCDD9277B834F00A4EF67 /* Queuer in Frameworks */,
+ F710FC86277B7D3F00AA9FBF /* Realm in Frameworks */,
+ F7EBCDD3277B821700A4EF67 /* UICKeyChainStore in Frameworks */,
F75E57C325BF0ED2002B72C2 /* SVGKit in Frameworks */,
- F782A58D251236D1007BBABD /* RealmSwift in Frameworks */,
F786D597253454D800E3DD7B /* NCCommunication in Frameworks */,
- F782A58B251236D1007BBABD /* Realm in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -842,13 +862,15 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- F70B869D2642CF6900ED5349 /* OpenSSL.xcframework in Frameworks */,
+ F7E57302278F14FF00F8C99E /* OpenSSL.xcframework in Frameworks */,
+ F710FC80277B7D2700AA9FBF /* RealmSwift in Frameworks */,
+ F72CD01227A7E92400E59476 /* JGProgressHUD in Frameworks */,
+ F710FC7E277B7D2600AA9FBF /* Realm in Frameworks */,
F73ADD2126554F8E0069EA0D /* SwiftEntryKit in Frameworks */,
+ F7EBCDCF277B81FF00A4EF67 /* UICKeyChainStore in Frameworks */,
F75E57BF25BF0EC8002B72C2 /* SVGKit in Frameworks */,
- F782A585251236B7007BBABD /* RealmSwift in Frameworks */,
- F7F5488F273995CE0067475B /* IHProgressHUD in Frameworks */,
+ F7EBCDD5277B82DE00A4EF67 /* Queuer in Frameworks */,
F786D593253454CE00E3DD7B /* NCCommunication in Frameworks */,
- F782A583251236B7007BBABD /* Realm in Frameworks */,
F72D7EB7263B1207000B3DFC /* MarkdownKit in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -857,11 +879,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ F7EBCDD1277B820D00A4EF67 /* UICKeyChainStore in Frameworks */,
F75E57C125BF0ECD002B72C2 /* SVGKit in Frameworks */,
- F782A589251236CA007BBABD /* RealmSwift in Frameworks */,
+ F7EBCDD7277B834400A4EF67 /* Queuer in Frameworks */,
F73ADD2426554FE20069EA0D /* SwiftEntryKit in Frameworks */,
+ F710FC82277B7D3500AA9FBF /* Realm in Frameworks */,
+ F710FC84277B7D3500AA9FBF /* RealmSwift in Frameworks */,
F786D595253454D300E3DD7B /* NCCommunication in Frameworks */,
- F782A587251236CA007BBABD /* Realm in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -869,31 +893,30 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- F79BCEEB270B49C800B5B71F /* SwiftUI.framework in Frameworks */,
+ F76DA941277B75870082465B /* KTVHTTPCache.xcframework in Frameworks */,
F7ED547C25EEA65400956C55 /* QRCodeReader in Frameworks */,
- F70B86972642CF5700ED5349 /* TOPasscodeViewController.xcframework in Frameworks */,
F788ECC7263AAAFA00ADC67F /* MarkdownKit in Frameworks */,
- F70B869B2642CF5800ED5349 /* DropDown.xcframework in Frameworks */,
- F70B86892642CF5600ED5349 /* XLForm.xcframework in Frameworks */,
+ F7BB7E4727A18C56009B9F29 /* Parchment in Frameworks */,
+ F7233B3A27835FA400F40A43 /* ChromaColorPicker in Frameworks */,
F770768E263A8C3400A1BA94 /* FloatingPanel in Frameworks */,
+ F710FC7C277B7D0000AA9FBF /* RealmSwift in Frameworks */,
+ F7E572FD278F146C00F8C99E /* OpenSSL.xcframework in Frameworks */,
F786D58D253454BF00E3DD7B /* NCCommunication in Frameworks */,
- F70B868B2642CF5600ED5349 /* Queuer.xcframework in Frameworks */,
- F716B75C26F0995200D37EFC /* KTVCocoaHTTPServer.xcframework in Frameworks */,
- F782A57B25123694007BBABD /* Realm in Frameworks */,
- F716B75A26F0995200D37EFC /* KTVHTTPCache.xcframework in Frameworks */,
+ F758A01227A7F03E0069468B /* JGProgressHUD in Frameworks */,
+ F76DA96F277B78AE0082465B /* TLPhotoPicker in Frameworks */,
+ F76DA966277B76F30082465B /* UICKeyChainStore in Frameworks */,
+ F76DA95B277B75A90082465B /* TOPasscodeViewController.xcframework in Frameworks */,
+ F76DA963277B760E0082465B /* Queuer in Frameworks */,
F75E57BD25BF0EC1002B72C2 /* SVGKit in Frameworks */,
F70B86752642CE3B00ED5349 /* FirebaseCrashlytics in Frameworks */,
- F70B86992642CF5800ED5349 /* FSCalendar.xcframework in Frameworks */,
- F70B86762642CF5300ED5349 /* ChromaColorPicker.xcframework in Frameworks */,
+ F76DA969277B77EA0082465B /* DropDown in Frameworks */,
F75EAED826D2552E00F4320E /* MarqueeLabel in Frameworks */,
- F73521B527396D2900919197 /* IHProgressHUD in Frameworks */,
+ F710FC7A277B7D0000AA9FBF /* Realm in Frameworks */,
F72DA9B425F53E4E00B87DB1 /* SwiftRichString in Frameworks */,
- F7F5CE252707089C007ED1CD /* Parchment in Frameworks */,
- F70B86932642CF5700ED5349 /* OpenSSL.xcframework in Frameworks */,
+ F74E7720277A2EF40013B958 /* XLForm in Frameworks */,
F73ADD1C265546890069EA0D /* SwiftEntryKit in Frameworks */,
- F70B868D2642CF5600ED5349 /* UICKeyChainStore.xcframework in Frameworks */,
- F782A57D25123694007BBABD /* RealmSwift in Frameworks */,
- F70B86872642CF5600ED5349 /* TLPhotoPicker.xcframework in Frameworks */,
+ F76DA96C277B78400082465B /* FSCalendar in Frameworks */,
+ F76DA93F277B75870082465B /* KTVCocoaHTTPServer.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1426,6 +1449,10 @@
children = (
F714803A262EBE3900693E51 /* MainInterface.storyboard */,
F7148040262EBE4000693E51 /* NCShareExtension.swift */,
+ AF730AF927843E4C00B7520E /* NCShareExtension+NCDelegate.swift */,
+ AF22B215277D196700DAB0CC /* NCShareExtension+DataSource.swift */,
+ AF22B216277D196700DAB0CC /* NCShareExtension+Files.swift */,
+ AF22B20B277C6F4D00DAB0CC /* NCShareCell.swift */,
F7148046262EBE4B00693E51 /* Share-Bridging-Header.h */,
);
path = Share;
@@ -1622,6 +1649,21 @@
F7FC7D541DC1F93700BB2C6A /* Frameworks */ = {
isa = PBXGroup;
children = (
+ F702867E2773609C00ADA8BE /* libiconv.tbd */,
+ F702864E27735D1400ADA8BE /* ffmpegkit.xcframework */,
+ F702865127735D1500ADA8BE /* gmp.xcframework */,
+ F702865A27735D1700ADA8BE /* gnutls.xcframework */,
+ F702865227735D1500ADA8BE /* libavcodec.xcframework */,
+ F702864D27735D1400ADA8BE /* libavdevice.xcframework */,
+ F702865527735D1600ADA8BE /* libavfilter.xcframework */,
+ F702865827735D1600ADA8BE /* libavformat.xcframework */,
+ F702865327735D1500ADA8BE /* libavutil.xcframework */,
+ F702865627735D1600ADA8BE /* libhogweed.xcframework */,
+ F702864F27735D1500ADA8BE /* libnettle.xcframework */,
+ F702865927735D1600ADA8BE /* libswresample.xcframework */,
+ F702865027735D1500ADA8BE /* libswscale.xcframework */,
+ F702865427735D1500ADA8BE /* openh264.xcframework */,
+ F702865727735D1600ADA8BE /* x264.xcframework */,
F79BCEEA270B49C800B5B71F /* SwiftUI.framework */,
F70B86842642CF5500ED5349 /* DropDown.xcframework */,
F70B86832642CF5500ED5349 /* FSCalendar.xcframework */,
@@ -1744,10 +1786,12 @@
);
name = "Notification Service Extension";
packageProductDependencies = (
- F782A58A251236D1007BBABD /* Realm */,
- F782A58C251236D1007BBABD /* RealmSwift */,
F786D596253454D800E3DD7B /* NCCommunication */,
F75E57C225BF0ED2002B72C2 /* SVGKit */,
+ F710FC85277B7D3F00AA9FBF /* Realm */,
+ F710FC87277B7D3F00AA9FBF /* RealmSwift */,
+ F7EBCDD2277B821700A4EF67 /* UICKeyChainStore */,
+ F7EBCDD8277B834F00A4EF67 /* Queuer */,
);
productName = "Notification Service Extension";
productReference = 2C33C47F23E2C475005F963B /* Notification Service Extension.appex */;
@@ -1785,13 +1829,15 @@
);
name = Share;
packageProductDependencies = (
- F782A582251236B7007BBABD /* Realm */,
- F782A584251236B7007BBABD /* RealmSwift */,
F786D592253454CE00E3DD7B /* NCCommunication */,
F75E57BE25BF0EC8002B72C2 /* SVGKit */,
F72D7EB6263B1207000B3DFC /* MarkdownKit */,
F73ADD2026554F8E0069EA0D /* SwiftEntryKit */,
- F7F5488E273995CE0067475B /* IHProgressHUD */,
+ F710FC7D277B7D2600AA9FBF /* Realm */,
+ F710FC7F277B7D2700AA9FBF /* RealmSwift */,
+ F7EBCDCE277B81FF00A4EF67 /* UICKeyChainStore */,
+ F7EBCDD4277B82DE00A4EF67 /* Queuer */,
+ F72CD01127A7E92400E59476 /* JGProgressHUD */,
);
productName = "Share Ext";
productReference = F7CE8AFB1DC1F8D8009CAE48 /* Share.appex */;
@@ -1811,11 +1857,13 @@
);
name = "File Provider Extension";
packageProductDependencies = (
- F782A586251236CA007BBABD /* Realm */,
- F782A588251236CA007BBABD /* RealmSwift */,
F786D594253454D300E3DD7B /* NCCommunication */,
F75E57C025BF0ECD002B72C2 /* SVGKit */,
F73ADD2326554FE20069EA0D /* SwiftEntryKit */,
+ F710FC81277B7D3500AA9FBF /* Realm */,
+ F710FC83277B7D3500AA9FBF /* RealmSwift */,
+ F7EBCDD0277B820D00A4EF67 /* UICKeyChainStore */,
+ F7EBCDD6277B834400A4EF67 /* Queuer */,
);
productName = "File Provider Extension";
productReference = F771E3D020E2392D00AFB62D /* File Provider Extension.appex */;
@@ -1829,9 +1877,9 @@
F77B0EDC1D118A16002130FE /* Frameworks */,
F77B0EE91D118A16002130FE /* Resources */,
F77B0F981D118A16002130FE /* Embed App Extensions */,
- F70B86782642CF5300ED5349 /* Embed Frameworks */,
F7439BF8265669E800406313 /* Run Script */,
AFBFD01327551A54002244BC /* ShellScript */,
+ F76DA934277B75710082465B /* Embed Frameworks */,
);
buildRules = (
);
@@ -1842,8 +1890,6 @@
);
name = Nextcloud;
packageProductDependencies = (
- F782A57A25123694007BBABD /* Realm */,
- F782A57C25123694007BBABD /* RealmSwift */,
F786D58C253454BF00E3DD7B /* NCCommunication */,
F75E57BC25BF0EC1002B72C2 /* SVGKit */,
F7ED547B25EEA65400956C55 /* QRCodeReader */,
@@ -1853,8 +1899,17 @@
F70B86742642CE3B00ED5349 /* FirebaseCrashlytics */,
F73ADD1B265546890069EA0D /* SwiftEntryKit */,
F75EAED726D2552E00F4320E /* MarqueeLabel */,
- F7F5CE242707089C007ED1CD /* Parchment */,
- F73521B427396D2900919197 /* IHProgressHUD */,
+ F74E771F277A2EF40013B958 /* XLForm */,
+ F76DA962277B760E0082465B /* Queuer */,
+ F76DA965277B76F30082465B /* UICKeyChainStore */,
+ F76DA968277B77EA0082465B /* DropDown */,
+ F76DA96B277B78400082465B /* FSCalendar */,
+ F76DA96E277B78AE0082465B /* TLPhotoPicker */,
+ F710FC79277B7D0000AA9FBF /* Realm */,
+ F710FC7B277B7D0000AA9FBF /* RealmSwift */,
+ F7233B3927835FA400F40A43 /* ChromaColorPicker */,
+ F7BB7E4627A18C56009B9F29 /* Parchment */,
+ F758A01127A7F03E0069468B /* JGProgressHUD */,
);
productName = "Crypto Cloud";
productReference = F7CE8AFA1DC1F8D8009CAE48 /* Nextcloud.app */;
@@ -1963,7 +2018,6 @@
);
mainGroup = F7F67B9F1A24D27800EE80DA;
packageReferences = (
- F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */,
F786D58B253454BF00E3DD7B /* XCRemoteSwiftPackageReference "ios-communication-library" */,
F75E57A725BF0D61002B72C2 /* XCRemoteSwiftPackageReference "SVGKit" */,
F7ED547A25EEA65400956C55 /* XCRemoteSwiftPackageReference "QRCodeReader" */,
@@ -1973,8 +2027,16 @@
F70B86732642CE3B00ED5349 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */,
F75EAED626D2552E00F4320E /* XCRemoteSwiftPackageReference "MarqueeLabel" */,
- F7F5CE232707089B007ED1CD /* XCRemoteSwiftPackageReference "Parchment" */,
- F73521B327396D2800919197 /* XCRemoteSwiftPackageReference "IHProgressHUD" */,
+ F74E771E277A2EF40013B958 /* XCRemoteSwiftPackageReference "XLForm" */,
+ F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */,
+ F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */,
+ F76DA967277B77E90082465B /* XCRemoteSwiftPackageReference "DropDown" */,
+ F76DA96A277B78400082465B /* XCRemoteSwiftPackageReference "FSCalendar" */,
+ F76DA96D277B78AE0082465B /* XCRemoteSwiftPackageReference "TLPhotoPicker" */,
+ F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */,
+ F7233B3827835FA300F40A43 /* XCRemoteSwiftPackageReference "ChromaColorPicker" */,
+ F7BB7E4527A18C56009B9F29 /* XCRemoteSwiftPackageReference "Parchment" */,
+ F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */,
);
productRefGroup = F7F67B9F1A24D27800EE80DA;
projectDirPath = "";
@@ -2014,7 +2076,9 @@
F7148054262ED51000693E51 /* NCListCell.xib in Resources */,
F7D57C8626317BDA00DE301D /* NCAccountRequest.storyboard in Resources */,
F7145A1A1D12E3B700CAFEEC /* Images.xcassets in Resources */,
+ AF22B209277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.xib in Resources */,
F7148063262ED66200693E51 /* NCEmptyView.xib in Resources */,
+ AF22B207277B4E4C00DAB0CC /* NCCreateFormUploadConflict.storyboard in Resources */,
F7145A231D12E3B700CAFEEC /* Localizable.strings in Resources */,
F746EC51273906C40052598D /* NCViewCertificateDetails.storyboard in Resources */,
F79EC784263161BA004E59D6 /* NCRenameFile.storyboard in Resources */,
@@ -2202,6 +2266,7 @@
F7707687263A853700A1BA94 /* NCContentPresenter.swift in Sources */,
F70460532499095400BB98A7 /* NotificationCenter+MainThread.swift in Sources */,
F70BFC7520E0FA7D00C67599 /* NCUtility.swift in Sources */,
+ AF22B20C277C6F4D00DAB0CC /* NCShareCell.swift in Sources */,
F79B646126CA661600838ACA /* UIControl+Extensions.swift in Sources */,
F7EDE4CC262D7B6F00414FE6 /* NCEmptyDataSet.swift in Sources */,
AF4BF61A27562A4B0081CEEF /* NCManageDatabse+Metadata.swift in Sources */,
@@ -2210,20 +2275,25 @@
AF817EF2274BC781009ED85B /* NCUserBaseUrl.swift in Sources */,
F78295311F962EFA00A572F5 /* NCEndToEndEncryption.m in Sources */,
F74AF3A5247FB6AE00AC767B /* NCUtilityFileSystem.swift in Sources */,
+ AF22B206277B4E4C00DAB0CC /* NCCreateFormUploadConflict.swift in Sources */,
F7BD71E62636EAFC00643C34 /* NCNetworkingE2EE.swift in Sources */,
F7F878AF1FB9E3B900599E4F /* NCEndToEndMetadata.swift in Sources */,
+ AF22B218277D196700DAB0CC /* NCShareExtension+Files.swift in Sources */,
F702F2D025EE5B5C008F8E80 /* NCGlobal.swift in Sources */,
F7EDE4DB262D7BA200414FE6 /* NCCellProtocol.swift in Sources */,
F7EDE4D1262D7B8400414FE6 /* NCDataSource.swift in Sources */,
F71459D21D12E3B700CAFEEC /* CCUtility.m in Sources */,
F75A9EE723796C6F0044CFCE /* NCNetworking.swift in Sources */,
+ AF730AFA27843E4C00B7520E /* NCShareExtension+NCDelegate.swift in Sources */,
F7EDE4E0262D7BAF00414FE6 /* NCGridCell.swift in Sources */,
F7A76DC8256A71CD00119AB3 /* UIImage+Extensions.swift in Sources */,
F7B8CD96261AF401007C1359 /* NCNetworkingChunkedUpload.swift in Sources */,
F7BAADC91ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */,
F7D57C8B26317BDE00DE301D /* NCAccountRequest.swift in Sources */,
+ AF22B217277D196700DAB0CC /* NCShareExtension+DataSource.swift in Sources */,
F780710A1EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m in Sources */,
F79EC77F26316193004E59D6 /* NCRenameFile.swift in Sources */,
+ AF22B208277B4E4C00DAB0CC /* NCCreateFormUploadConflictCell.swift in Sources */,
F7148041262EBE4000693E51 /* NCShareExtension.swift in Sources */,
F76B3CCF1EAE01BD00921AC9 /* NCBrand.swift in Sources */,
F7BAADCC1ED5A87C00B7EAD4 /* NCManageDatabase.swift in Sources */,
@@ -2508,7 +2578,6 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2521,14 +2590,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/Notification_Service_Extension.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = "-ObjC";
@@ -2562,7 +2630,6 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2575,14 +2642,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/Notification_Service_Extension.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
MTL_FAST_MATH = YES;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.Nextcloud.Notification-Service-Extension";
@@ -2609,7 +2675,6 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -2624,7 +2689,6 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.NextcloudTests;
@@ -2651,7 +2715,6 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
GCC_C_LANGUAGE_STANDARD = gnu11;
@@ -2662,7 +2725,6 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
- MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.NextcloudTests;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2684,7 +2746,6 @@
CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/Share.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2697,14 +2758,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/Share.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.Nextcloud.Share;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2730,7 +2790,6 @@
CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/Share.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2743,14 +2802,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/Share.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.Nextcloud.Share;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2783,7 +2841,6 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2796,14 +2853,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/File_Provider_Extension.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.Nextcloud.File-Provider-Extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2836,7 +2892,6 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2849,14 +2904,13 @@
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/File_Provider_Extension.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
OTHER_LDFLAGS = "-ObjC";
PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.Nextcloud.File-Provider-Extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2881,7 +2935,6 @@
CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/iOSClient.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
ENABLE_BITCODE = YES;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2891,15 +2944,18 @@
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/iOSClient.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
- OTHER_LDFLAGS = "-ObjC";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-weak_framework",
+ SwiftUI,
+ );
OTHER_SWIFT_FLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2929,7 +2985,6 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_TEAM = 6JLRKY9ZV7;
ENABLE_BITCODE = YES;
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -2938,15 +2993,18 @@
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "$(SRCROOT)/iOSClient/Brand/iOSClient.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
LIBRARY_SEARCH_PATHS = "";
- MARKETING_VERSION = 4.2.0;
- OTHER_LDFLAGS = "-ObjC";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-weak_framework",
+ SwiftUI,
+ );
PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
@@ -2993,6 +3051,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 7;
DEFINES_MODULE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -3012,7 +3071,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+ MARKETING_VERSION = 4.2.1;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = (
@@ -3057,6 +3117,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 7;
DEFINES_MODULE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -3072,7 +3133,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+ MARKETING_VERSION = 4.2.1;
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = (
"-Obj-C",
@@ -3155,22 +3217,38 @@
minimumVersion = 8.9.0;
};
};
- F72DA9B225F53E4E00B87DB1 /* XCRemoteSwiftPackageReference "SwiftRichString" */ = {
+ F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/malcommac/SwiftRichString";
+ repositoryURL = "https://github.com/realm/realm-swift";
requirement = {
kind = upToNextMajorVersion;
- minimumVersion = 3.7.2;
+ minimumVersion = 10.0.0;
};
};
- F73521B327396D2800919197 /* XCRemoteSwiftPackageReference "IHProgressHUD" */ = {
+ F7233B3827835FA300F40A43 /* XCRemoteSwiftPackageReference "ChromaColorPicker" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/marinofaggiana/IHProgressHUD";
+ repositoryURL = "https://github.com/marinofaggiana/ChromaColorPicker";
requirement = {
branch = master;
kind = branch;
};
};
+ F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/JonasGessner/JGProgressHUD.git";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 2.0.0;
+ };
+ };
+ F72DA9B225F53E4E00B87DB1 /* XCRemoteSwiftPackageReference "SwiftRichString" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/malcommac/SwiftRichString";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 3.7.2;
+ };
+ };
F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/huri000/SwiftEntryKit";
@@ -3179,6 +3257,14 @@
minimumVersion = 1.2.7;
};
};
+ F74E771E277A2EF40013B958 /* XCRemoteSwiftPackageReference "XLForm" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/xmartlabs/XLForm";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 4.0.0;
+ };
+ };
F75E57A725BF0D61002B72C2 /* XCRemoteSwiftPackageReference "SVGKit" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/SVGKit/SVGKit.git";
@@ -3195,20 +3281,52 @@
minimumVersion = 4.3.0;
};
};
- F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */ = {
+ F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/scenee/FloatingPanel";
+ repositoryURL = "https://github.com/FabrizioBrancati/Queuer";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 2.0.0;
+ };
+ };
+ F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/kishikawakatsumi/UICKeyChainStore";
+ requirement = {
+ branch = master;
+ kind = branch;
+ };
+ };
+ F76DA967277B77E90082465B /* XCRemoteSwiftPackageReference "DropDown" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/AssistoLab/DropDown";
+ requirement = {
+ branch = master;
+ kind = branch;
+ };
+ };
+ F76DA96A277B78400082465B /* XCRemoteSwiftPackageReference "FSCalendar" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/WenchaoD/FSCalendar";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 2.0.0;
};
};
- F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */ = {
+ F76DA96D277B78AE0082465B /* XCRemoteSwiftPackageReference "TLPhotoPicker" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/realm/realm-cocoa";
+ repositoryURL = "https://github.com/tilltue/TLPhotoPicker";
requirement = {
kind = upToNextMajorVersion;
- minimumVersion = 10.20.1;
+ minimumVersion = 2.0.0;
+ };
+ };
+ F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */ = {
+ isa = XCRemoteSwiftPackageReference;
+ repositoryURL = "https://github.com/scenee/FloatingPanel";
+ requirement = {
+ kind = upToNextMajorVersion;
+ minimumVersion = 2.0.0;
};
};
F786D58B253454BF00E3DD7B /* XCRemoteSwiftPackageReference "ios-communication-library" */ = {
@@ -3216,7 +3334,7 @@
repositoryURL = "https://github.com/nextcloud/ios-communication-library/";
requirement = {
kind = exactVersion;
- version = 0.99.3;
+ version = 0.99.4;
};
};
F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */ = {
@@ -3227,20 +3345,20 @@
minimumVersion = 1.7.1;
};
};
- F7ED547A25EEA65400956C55 /* XCRemoteSwiftPackageReference "QRCodeReader" */ = {
+ F7BB7E4527A18C56009B9F29 /* XCRemoteSwiftPackageReference "Parchment" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/yannickl/QRCodeReader.swift";
+ repositoryURL = "https://github.com/rechsteiner/Parchment";
requirement = {
- kind = upToNextMajorVersion;
- minimumVersion = 10.1.1;
+ branch = main;
+ kind = branch;
};
};
- F7F5CE232707089B007ED1CD /* XCRemoteSwiftPackageReference "Parchment" */ = {
+ F7ED547A25EEA65400956C55 /* XCRemoteSwiftPackageReference "QRCodeReader" */ = {
isa = XCRemoteSwiftPackageReference;
- repositoryURL = "https://github.com/marinofaggiana/Parchment";
+ repositoryURL = "https://github.com/yannickl/QRCodeReader.swift";
requirement = {
- branch = master;
- kind = branch;
+ kind = upToNextMajorVersion;
+ minimumVersion = 10.1.1;
};
};
/* End XCRemoteSwiftPackageReference section */
@@ -3251,6 +3369,56 @@
package = F70B86732642CE3B00ED5349 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseCrashlytics;
};
+ F710FC79277B7D0000AA9FBF /* Realm */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = Realm;
+ };
+ F710FC7B277B7D0000AA9FBF /* RealmSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = RealmSwift;
+ };
+ F710FC7D277B7D2600AA9FBF /* Realm */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = Realm;
+ };
+ F710FC7F277B7D2700AA9FBF /* RealmSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = RealmSwift;
+ };
+ F710FC81277B7D3500AA9FBF /* Realm */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = Realm;
+ };
+ F710FC83277B7D3500AA9FBF /* RealmSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = RealmSwift;
+ };
+ F710FC85277B7D3F00AA9FBF /* Realm */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = Realm;
+ };
+ F710FC87277B7D3F00AA9FBF /* RealmSwift */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F710FC78277B7CFF00AA9FBF /* XCRemoteSwiftPackageReference "realm-swift" */;
+ productName = RealmSwift;
+ };
+ F7233B3927835FA400F40A43 /* ChromaColorPicker */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F7233B3827835FA300F40A43 /* XCRemoteSwiftPackageReference "ChromaColorPicker" */;
+ productName = ChromaColorPicker;
+ };
+ F72CD01127A7E92400E59476 /* JGProgressHUD */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+ productName = JGProgressHUD;
+ };
F72D7EB6263B1207000B3DFC /* MarkdownKit */ = {
isa = XCSwiftPackageProductDependency;
package = F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */;
@@ -3261,11 +3429,6 @@
package = F72DA9B225F53E4E00B87DB1 /* XCRemoteSwiftPackageReference "SwiftRichString" */;
productName = SwiftRichString;
};
- F73521B427396D2900919197 /* IHProgressHUD */ = {
- isa = XCSwiftPackageProductDependency;
- package = F73521B327396D2800919197 /* XCRemoteSwiftPackageReference "IHProgressHUD" */;
- productName = IHProgressHUD;
- };
F73ADD1B265546890069EA0D /* SwiftEntryKit */ = {
isa = XCSwiftPackageProductDependency;
package = F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */;
@@ -3281,6 +3444,16 @@
package = F73ADD1A265546880069EA0D /* XCRemoteSwiftPackageReference "SwiftEntryKit" */;
productName = SwiftEntryKit;
};
+ F74E771F277A2EF40013B958 /* XLForm */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F74E771E277A2EF40013B958 /* XCRemoteSwiftPackageReference "XLForm" */;
+ productName = XLForm;
+ };
+ F758A01127A7F03E0069468B /* JGProgressHUD */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F72CD01027A7E92400E59476 /* XCRemoteSwiftPackageReference "JGProgressHUD" */;
+ productName = JGProgressHUD;
+ };
F75E57BC25BF0EC1002B72C2 /* SVGKit */ = {
isa = XCSwiftPackageProductDependency;
package = F75E57A725BF0D61002B72C2 /* XCRemoteSwiftPackageReference "SVGKit" */;
@@ -3306,50 +3479,35 @@
package = F75EAED626D2552E00F4320E /* XCRemoteSwiftPackageReference "MarqueeLabel" */;
productName = MarqueeLabel;
};
- F770768D263A8C3400A1BA94 /* FloatingPanel */ = {
- isa = XCSwiftPackageProductDependency;
- package = F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */;
- productName = FloatingPanel;
- };
- F782A57A25123694007BBABD /* Realm */ = {
- isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = Realm;
- };
- F782A57C25123694007BBABD /* RealmSwift */ = {
+ F76DA962277B760E0082465B /* Queuer */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = RealmSwift;
- };
- F782A582251236B7007BBABD /* Realm */ = {
- isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = Realm;
+ package = F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */;
+ productName = Queuer;
};
- F782A584251236B7007BBABD /* RealmSwift */ = {
+ F76DA965277B76F30082465B /* UICKeyChainStore */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = RealmSwift;
+ package = F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */;
+ productName = UICKeyChainStore;
};
- F782A586251236CA007BBABD /* Realm */ = {
+ F76DA968277B77EA0082465B /* DropDown */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = Realm;
+ package = F76DA967277B77E90082465B /* XCRemoteSwiftPackageReference "DropDown" */;
+ productName = DropDown;
};
- F782A588251236CA007BBABD /* RealmSwift */ = {
+ F76DA96B277B78400082465B /* FSCalendar */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = RealmSwift;
+ package = F76DA96A277B78400082465B /* XCRemoteSwiftPackageReference "FSCalendar" */;
+ productName = FSCalendar;
};
- F782A58A251236D1007BBABD /* Realm */ = {
+ F76DA96E277B78AE0082465B /* TLPhotoPicker */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = Realm;
+ package = F76DA96D277B78AE0082465B /* XCRemoteSwiftPackageReference "TLPhotoPicker" */;
+ productName = TLPhotoPicker;
};
- F782A58C251236D1007BBABD /* RealmSwift */ = {
+ F770768D263A8C3400A1BA94 /* FloatingPanel */ = {
isa = XCSwiftPackageProductDependency;
- package = F782A57925123694007BBABD /* XCRemoteSwiftPackageReference "realm-cocoa" */;
- productName = RealmSwift;
+ package = F770768C263A8C3400A1BA94 /* XCRemoteSwiftPackageReference "FloatingPanel" */;
+ productName = FloatingPanel;
};
F786D58C253454BF00E3DD7B /* NCCommunication */ = {
isa = XCSwiftPackageProductDependency;
@@ -3376,20 +3534,45 @@
package = F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */;
productName = MarkdownKit;
};
- F7ED547B25EEA65400956C55 /* QRCodeReader */ = {
+ F7BB7E4627A18C56009B9F29 /* Parchment */ = {
isa = XCSwiftPackageProductDependency;
- package = F7ED547A25EEA65400956C55 /* XCRemoteSwiftPackageReference "QRCodeReader" */;
- productName = QRCodeReader;
+ package = F7BB7E4527A18C56009B9F29 /* XCRemoteSwiftPackageReference "Parchment" */;
+ productName = Parchment;
};
- F7F5488E273995CE0067475B /* IHProgressHUD */ = {
+ F7EBCDCE277B81FF00A4EF67 /* UICKeyChainStore */ = {
isa = XCSwiftPackageProductDependency;
- package = F73521B327396D2800919197 /* XCRemoteSwiftPackageReference "IHProgressHUD" */;
- productName = IHProgressHUD;
+ package = F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */;
+ productName = UICKeyChainStore;
};
- F7F5CE242707089C007ED1CD /* Parchment */ = {
+ F7EBCDD0277B820D00A4EF67 /* UICKeyChainStore */ = {
isa = XCSwiftPackageProductDependency;
- package = F7F5CE232707089B007ED1CD /* XCRemoteSwiftPackageReference "Parchment" */;
- productName = Parchment;
+ package = F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */;
+ productName = UICKeyChainStore;
+ };
+ F7EBCDD2277B821700A4EF67 /* UICKeyChainStore */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F76DA964277B76F10082465B /* XCRemoteSwiftPackageReference "UICKeyChainStore" */;
+ productName = UICKeyChainStore;
+ };
+ F7EBCDD4277B82DE00A4EF67 /* Queuer */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */;
+ productName = Queuer;
+ };
+ F7EBCDD6277B834400A4EF67 /* Queuer */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */;
+ productName = Queuer;
+ };
+ F7EBCDD8277B834F00A4EF67 /* Queuer */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F76DA961277B760E0082465B /* XCRemoteSwiftPackageReference "Queuer" */;
+ productName = Queuer;
+ };
+ F7ED547B25EEA65400956C55 /* QRCodeReader */ = {
+ isa = XCSwiftPackageProductDependency;
+ package = F7ED547A25EEA65400956C55 /* XCRemoteSwiftPackageReference "QRCodeReader" */;
+ productName = QRCodeReader;
};
/* End XCSwiftPackageProductDependency section */
};
diff --git a/Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 93020ee70..a5f4f1b8c 100644
--- a/Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/Nextcloud.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/Alamofire/Alamofire",
"state": {
"branch": null,
- "revision": "d120af1e8638c7da36c8481fd61a66c0c08dc4fc",
- "version": "5.4.4"
+ "revision": "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
+ "version": "5.5.0"
}
},
{
@@ -29,12 +29,30 @@
}
},
{
+ "package": "ChromaColorPicker",
+ "repositoryURL": "https://github.com/marinofaggiana/ChromaColorPicker",
+ "state": {
+ "branch": "master",
+ "revision": "b1b2c58c3c5617c73863a073cb6393c79195932e",
+ "version": null
+ }
+ },
+ {
"package": "CocoaLumberjack",
"repositoryURL": "https://github.com/CocoaLumberjack/CocoaLumberjack.git",
"state": {
"branch": null,
- "revision": "e518eb6e362df327574ba5e04269cd6d29f40aec",
- "version": "3.7.2"
+ "revision": "80ada1f753b0d53d9b57c465936a7c4169375002",
+ "version": "3.7.4"
+ }
+ },
+ {
+ "package": "DropDown",
+ "repositoryURL": "https://github.com/AssistoLab/DropDown",
+ "state": {
+ "branch": "master",
+ "revision": "2ab6f6ce19f0117d1a76ea043ef8f57722c65d16",
+ "version": null
}
},
{
@@ -42,8 +60,8 @@
"repositoryURL": "https://github.com/firebase/firebase-ios-sdk",
"state": {
"branch": null,
- "revision": "08686f04881483d2bc098b2696e674c0ba135e47",
- "version": "8.10.0"
+ "revision": "5344857522053b5d4403ec8173ec0d23200a97ea",
+ "version": "8.11.0"
}
},
{
@@ -56,6 +74,15 @@
}
},
{
+ "package": "FSCalendar",
+ "repositoryURL": "https://github.com/WenchaoD/FSCalendar",
+ "state": {
+ "branch": null,
+ "revision": "afaf247581eb1f8aea847f2e6c99c665ae900494",
+ "version": "2.8.3"
+ }
+ },
+ {
"package": "GoogleAppMeasurement",
"repositoryURL": "https://github.com/google/GoogleAppMeasurement.git",
"state": {
@@ -78,8 +105,8 @@
"repositoryURL": "https://github.com/google/GoogleUtilities.git",
"state": {
"branch": null,
- "revision": "797005ad8a1f0614063933e2fa010a5d13cb09d0",
- "version": "7.6.0"
+ "revision": "b3bb0c5551fb3f80ca939829639ab5b093edd14f",
+ "version": "7.7.0"
}
},
{
@@ -101,21 +128,21 @@
}
},
{
- "package": "IHProgressHUD",
- "repositoryURL": "https://github.com/marinofaggiana/IHProgressHUD",
+ "package": "NCCommunication",
+ "repositoryURL": "https://github.com/nextcloud/ios-communication-library/",
"state": {
- "branch": "master",
- "revision": "a3d94dfb869ff9b2f9e5a4d0359a73a625072853",
- "version": null
+ "branch": null,
+ "revision": "c7aabb42f734f30c2e325dec4000c59349f33005",
+ "version": "0.99.4"
}
},
{
- "package": "NCCommunication",
- "repositoryURL": "https://github.com/nextcloud/ios-communication-library/",
+ "package": "JGProgressHUD",
+ "repositoryURL": "https://github.com/JonasGessner/JGProgressHUD.git",
"state": {
"branch": null,
- "revision": "c8e3eac61a846775d570b1d252612a8d2d02930d",
- "version": "0.99.3"
+ "revision": "78d7cd35f1d90ff74fd82e486f2cbe4b24be8cf9",
+ "version": "2.2.0"
}
},
{
@@ -156,10 +183,10 @@
},
{
"package": "Parchment",
- "repositoryURL": "https://github.com/marinofaggiana/Parchment",
+ "repositoryURL": "https://github.com/rechsteiner/Parchment",
"state": {
- "branch": "master",
- "revision": "f4081dbd1a1793217686a381330e90b6626710c7",
+ "branch": "main",
+ "revision": "cad6924f8a292eecaedc1bdefb57006f7979b9eb",
"version": null
}
},
@@ -182,6 +209,15 @@
}
},
{
+ "package": "Queuer",
+ "repositoryURL": "https://github.com/FabrizioBrancati/Queuer",
+ "state": {
+ "branch": null,
+ "revision": "52515108d0ac4616d9e15ffcc7ad986e300d31ff",
+ "version": "2.1.1"
+ }
+ },
+ {
"package": "QuickLayout",
"repositoryURL": "https://github.com/huri000/QuickLayout",
"state": {
@@ -191,21 +227,21 @@
}
},
{
- "package": "Realm",
- "repositoryURL": "https://github.com/realm/realm-cocoa",
+ "package": "RealmDatabase",
+ "repositoryURL": "https://github.com/realm/realm-core",
"state": {
"branch": null,
- "revision": "f483fa0a52f6d49897d133a827510a35e21183c1",
- "version": "10.20.1"
+ "revision": "6b81f1a7a2d421f9e0b9e7f04e76bcf736a54409",
+ "version": "11.9.0"
}
},
{
- "package": "RealmDatabase",
- "repositoryURL": "https://github.com/realm/realm-core",
+ "package": "Realm",
+ "repositoryURL": "https://github.com/realm/realm-swift",
"state": {
"branch": null,
- "revision": "c3c11a841642ac93c27bd1edd61f989fc0bfb809",
- "version": "11.6.1"
+ "revision": "9dff9f2862240d521ad6ad599541269177ddb993",
+ "version": "10.22.0"
}
},
{
@@ -270,6 +306,33 @@
"revision": "d7a1d23f04c86c1cd2e8f19247dd15d74e0ea8be",
"version": "5.6.0"
}
+ },
+ {
+ "package": "TLPhotoPicker",
+ "repositoryURL": "https://github.com/tilltue/TLPhotoPicker",
+ "state": {
+ "branch": null,
+ "revision": "0d0cbbd2d20ed5fd36e5f4052209f5e2d9aaa8b7",
+ "version": "2.1.9"
+ }
+ },
+ {
+ "package": "UICKeyChainStore",
+ "repositoryURL": "https://github.com/kishikawakatsumi/UICKeyChainStore",
+ "state": {
+ "branch": "master",
+ "revision": "db869212bc69b6198a62efe03e2f5fc8e19c6b65",
+ "version": null
+ }
+ },
+ {
+ "package": "XLForm",
+ "repositoryURL": "https://github.com/xmartlabs/XLForm",
+ "state": {
+ "branch": null,
+ "revision": "870afc56602fd518e33d0b271371a2d5acd410ea",
+ "version": "4.3.0"
+ }
}
]
},
diff --git a/README.md b/README.md
index dea8c941b..dae0e1b60 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ branch. Maybe start working on [starter issues](https://github.com/nextcloud/ios
Easy starting points are also reviewing [pull requests](https://github.com/nextcloud/ios/pulls)
-### Xcode 13 Project Setup
+### Xcode 13.2 Project Setup
#### Dependencies
diff --git a/Share/MainInterface.storyboard b/Share/MainInterface.storyboard
index 3862d7da3..16924d3b6 100644
--- a/Share/MainInterface.storyboard
+++ b/Share/MainInterface.storyboard
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EAU-PF-EEd">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EAU-PF-EEd">
<device id="retina6_5" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -46,39 +46,42 @@
<rect key="frame" x="10" y="70" width="394" height="220"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<prototypes>
- <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="Cell" rowHeight="50" id="6Kt-n0-i8J">
- <rect key="frame" x="0.0" y="24.333333969116211" width="394" height="50"/>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="Cell" rowHeight="50" id="6Kt-n0-i8J" customClass="NCShareCell" customModule="Share" customModuleProvider="target">
+ <rect key="frame" x="0.0" y="44.666666030883789" width="394" height="50"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="6Kt-n0-i8J" id="WGN-Zn-lR8">
<rect key="frame" x="0.0" y="0.0" width="394" height="50"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
- <imageView clipsSubviews="YES" userInteractionEnabled="NO" tag="10" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="uvl-De-S9p">
+ <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="uvl-De-S9p">
<rect key="frame" x="10" y="5" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" constant="40" id="Vpb-6e-ta9"/>
<constraint firstAttribute="height" constant="40" id="wvf-Ey-woY"/>
</constraints>
</imageView>
- <label opaque="NO" userInteractionEnabled="NO" tag="20" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="filename" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rz6-pe-DB5">
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="filename" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rz6-pe-DB5">
<rect key="frame" x="60" y="10" width="284" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
- <label opaque="NO" userInteractionEnabled="NO" tag="40" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="size" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QFh-Vy-b4Z">
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="size" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QFh-Vy-b4Z">
<rect key="frame" x="60" y="29.999999999999996" width="284" height="14.333333333333332"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" systemColor="systemGray2Color"/>
<nil key="highlightedColor"/>
</label>
- <button opaque="NO" tag="30" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OGY-95-ZYi" customClass="NCShareExtensionButtonWithIndexPath" customModule="Share" customModuleProvider="target">
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OGY-95-ZYi">
<rect key="frame" x="354" y="10" width="30" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="QqR-Uw-RnV"/>
<constraint firstAttribute="width" constant="30" id="bpm-t5-3HA"/>
</constraints>
<state key="normal" image="more"/>
+ <connections>
+ <action selector="buttonTapped:" destination="6Kt-n0-i8J" eventType="touchUpInside" id="Xx7-1X-AhZ"/>
+ </connections>
</button>
</subviews>
<constraints>
@@ -95,6 +98,12 @@
</constraints>
</tableViewCellContentView>
<inset key="separatorInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
+ <connections>
+ <outlet property="fileNameCell" destination="rz6-pe-DB5" id="e8w-G7-bBe"/>
+ <outlet property="imageCell" destination="uvl-De-S9p" id="S4F-TD-YGI"/>
+ <outlet property="moreButton" destination="OGY-95-ZYi" id="vA3-mU-S1e"/>
+ <outlet property="sizeCell" destination="QFh-Vy-b4Z" id="rmM-qr-QXU"/>
+ </connections>
</tableViewCell>
</prototypes>
<connections>
diff --git a/Share/NCShareCell.swift b/Share/NCShareCell.swift
new file mode 100644
index 000000000..15e1504ab
--- /dev/null
+++ b/Share/NCShareCell.swift
@@ -0,0 +1,82 @@
+//
+// NCShareCell.swift
+// Share
+//
+// Created by Henrik Storch on 29.12.21.
+// Copyright © 2021 Henrik Storch. All rights reserved.
+//
+// Author Henrik Storch <henrik.storch@nextcloud.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+//
+
+import UIKit
+import NCCommunication
+
+protocol NCShareCellDelegate: AnyObject {
+ var uploadStarted: Bool { get }
+ func removeFile(named fileName: String)
+ func renameFile(named fileName: String)
+}
+
+class NCShareCell: UITableViewCell {
+ @IBOutlet weak var imageCell: UIImageView!
+ @IBOutlet weak var fileNameCell: UILabel!
+ @IBOutlet weak var moreButton: UIButton!
+ @IBOutlet weak var sizeCell: UILabel!
+ weak var delegate: (NCShareCellDelegate & UIViewController)?
+ var fileName = ""
+
+ func setup(fileName: String) {
+ self.fileName = fileName
+ let resultInternalType = NCCommunicationCommon.shared.getInternalType(fileName: fileName, mimeType: "", directory: false)
+
+ backgroundColor = NCBrandColor.shared.systemBackground
+ imageCell?.layer.cornerRadius = 6
+ imageCell?.layer.masksToBounds = true
+
+ if let image = UIImage.downsample(imageAt: URL(fileURLWithPath: NSTemporaryDirectory() + fileName), to: CGSize(width: 80, height: 80)) {
+ imageCell.image = image
+ } else {
+ if !resultInternalType.iconName.isEmpty {
+ imageCell?.image = UIImage(named: resultInternalType.iconName)
+ } else {
+ imageCell?.image = NCBrandColor.cacheImages.file
+ }
+ }
+
+ fileNameCell?.text = fileName
+
+ let fileSize = NCUtilityFileSystem.shared.getFileSize(filePath: (NSTemporaryDirectory() + fileName))
+ sizeCell?.text = CCUtility.transformedSize(fileSize)
+
+ moreButton?.setImage(NCUtility.shared.loadImage(named: "more").image(color: NCBrandColor.shared.label, size: 15), for: .normal)
+ }
+
+ @IBAction func buttonTapped(_ sender: Any) {
+ guard !fileName.isEmpty, delegate?.uploadStarted != true else { return }
+ let alertController = UIAlertController(title: "", message: fileName, preferredStyle: .alert)
+
+ alertController.addAction(UIAlertAction(title: NSLocalizedString("_rename_file_", comment: ""), style: .default) { _ in
+ self.delegate?.renameFile(named: self.fileName)
+ })
+
+ alertController.addAction(UIAlertAction(title: NSLocalizedString("_remove_file_", comment: ""), style: .default) { _ in
+ self.delegate?.removeFile(named: self.fileName)
+ })
+
+ alertController.addAction(UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel) { _ in })
+ delegate?.present(alertController, animated: true, completion: nil)
+ }
+}
diff --git a/Share/NCShareExtension+DataSource.swift b/Share/NCShareExtension+DataSource.swift
new file mode 100644
index 000000000..ef2ec2a99
--- /dev/null
+++ b/Share/NCShareExtension+DataSource.swift
@@ -0,0 +1,180 @@
+//
+// NCShareExtension+DataSource.swift
+// Share
+//
+// Created by Henrik Storch on 29.12.21.
+// Copyright © 2021 Henrik Storch. All rights reserved.
+//
+// Author Henrik Storch <henrik.storch@nextcloud.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+//
+
+import UIKit
+import NCCommunication
+
+// MARK: - Collection View (target folder)
+
+extension NCShareExtension: UICollectionViewDelegate {
+
+ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
+ guard let metadata = dataSource.cellForItemAt(indexPath: indexPath),
+ let serverUrl = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName) else {
+ return showAlert(description: "_invalid_url_")
+ }
+
+ if metadata.e2eEncrypted && !CCUtility.isEnd(toEndEnabled: activeAccount.account) {
+ showAlert(title: "_info_", description: "_e2e_goto_settings_for_enable_")
+ }
+
+ self.serverUrl = serverUrl
+ reloadDatasource(withLoadFolder: true)
+ setNavigationBar(navigationTitle: metadata.fileNameView)
+ }
+}
+
+extension NCShareExtension: UICollectionViewDataSource {
+
+ func numberOfSections(in collectionView: UICollectionView) -> Int {
+ return 1
+ }
+
+ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+ let numberOfItems = dataSource.numberOfItems()
+ emptyDataSet?.numberOfItemsInSection(numberOfItems, section: section)
+ return numberOfItems
+ }
+
+ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+
+ guard let metadata = dataSource.cellForItemAt(indexPath: indexPath), let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "listCell", for: indexPath) as? NCListCell else {
+ return UICollectionViewCell()
+ }
+
+ cell.delegate = self
+
+ cell.fileObjectId = metadata.ocId
+ cell.fileUser = metadata.ownerId
+ cell.labelTitle.text = metadata.fileNameView
+ cell.labelTitle.textColor = NCBrandColor.shared.label
+
+ cell.imageSelect.image = nil
+ cell.imageStatus.image = nil
+ cell.imageLocal.image = nil
+ cell.imageFavorite.image = nil
+ cell.imageShared.image = nil
+ cell.imageMore.image = nil
+ cell.imageItem.image = nil
+ cell.imageItem.backgroundColor = nil
+
+ cell.progressView.progress = 0.0
+
+ if metadata.directory {
+ setupDirectoryCell(cell, with: metadata)
+ }
+
+ // image Favorite
+ if metadata.favorite {
+ cell.imageFavorite.image = NCBrandColor.cacheImages.favorite
+ }
+
+ cell.imageSelect.isHidden = true
+ cell.backgroundView = nil
+ cell.hideButtonMore(true)
+ cell.hideButtonShare(true)
+ cell.selectMode(false)
+
+ // Live Photo
+ if metadata.livePhoto {
+ cell.imageStatus.image = NCBrandColor.cacheImages.livePhoto
+ }
+
+ // Remove last separator
+ cell.separator.isHidden = collectionView.numberOfItems(inSection: indexPath.section) == indexPath.row + 1
+
+ return cell
+ }
+
+ func setupDirectoryCell(_ cell: NCListCell, with metadata: tableMetadata) {
+ var isShare = false
+ var isMounted = false
+ if let metadataFolder = metadataFolder {
+ isShare = metadata.permissions.contains(NCGlobal.shared.permissionShared) && !metadataFolder.permissions.contains(NCGlobal.shared.permissionShared)
+ isMounted = metadata.permissions.contains(NCGlobal.shared.permissionMounted) && !metadataFolder.permissions.contains(NCGlobal.shared.permissionMounted)
+ }
+
+ var tableShare: tableShare?
+ if dataSource.metadataShare[metadata.ocId] != nil {
+ tableShare = dataSource.metadataShare[metadata.ocId]
+ }
+
+ if metadata.e2eEncrypted {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderEncrypted
+ } else if isShare {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderSharedWithMe
+ } else if tableShare != nil && tableShare?.shareType != 3 {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderSharedWithMe
+ } else if tableShare != nil && tableShare?.shareType == 3 {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderPublic
+ } else if metadata.mountType == "group" {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderGroup
+ } else if isMounted {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderExternal
+ } else if metadata.fileName == autoUploadFileName && metadata.serverUrl == autoUploadDirectory {
+ cell.imageItem.image = NCBrandColor.cacheImages.folderAutomaticUpload
+ } else {
+ cell.imageItem.image = NCBrandColor.cacheImages.folder
+ }
+
+ cell.labelInfo.text = CCUtility.dateDiff(metadata.date as Date)
+
+ let lockServerUrl = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName)!
+ let tableDirectory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", activeAccount.account, lockServerUrl))
+
+ // Local image: offline
+ if tableDirectory != nil && tableDirectory!.offline {
+ cell.imageLocal.image = NCBrandColor.cacheImages.offlineFlag
+ }
+ }
+}
+
+// MARK: - Table View (uploading files)
+
+extension NCShareExtension: UITableViewDelegate {
+
+ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+ return heightRowTableView
+ }
+
+ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ guard !uploadStarted else { return }
+ let fileName = filesName[indexPath.row]
+ renameFile(named: fileName)
+ }
+}
+
+extension NCShareExtension: UITableViewDataSource {
+
+ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+ filesName.count
+ }
+
+ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+ guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? NCShareCell else { return UITableViewCell() }
+ let fileName = filesName[indexPath.row]
+ cell.setup(fileName: fileName)
+ cell.delegate = self
+ return cell
+ }
+}
diff --git a/Share/NCShareExtension+Files.swift b/Share/NCShareExtension+Files.swift
new file mode 100644
index 000000000..13f05e8dc
--- /dev/null
+++ b/Share/NCShareExtension+Files.swift
@@ -0,0 +1,215 @@
+//
+// NCShareExtension+Files.swift
+// Share
+//
+// Created by Henrik Storch on 29.12.21.
+// Copyright © 2021 Henrik Storch. All rights reserved.
+//
+// Author Henrik Storch <henrik.storch@nextcloud.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+//
+
+import Foundation
+
+extension NCShareExtension {
+
+ @objc func reloadDatasource(withLoadFolder: Bool) {
+
+ layoutForView = NCUtility.shared.getLayoutForView(key: keyLayout, serverUrl: serverUrl)
+
+ let metadatasSource = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND directory == true", activeAccount.account, serverUrl))
+ self.dataSource = NCDataSource(
+ metadatasSource: metadatasSource,
+ sort: layoutForView?.sort,
+ ascending: layoutForView?.ascending,
+ directoryOnTop: layoutForView?.directoryOnTop,
+ favoriteOnTop: true,
+ filterLivePhoto: true)
+
+ if withLoadFolder {
+ loadFolder()
+ } else {
+ self.refreshControl.endRefreshing()
+ }
+
+ collectionView.reloadData()
+ }
+
+ func createFolder(with fileName: String) {
+
+ NCNetworking.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: activeAccount.account, urlBase: activeAccount.urlBase) { errorCode, errorDescription in
+
+ DispatchQueue.main.async {
+ if errorCode == 0 {
+
+ self.serverUrl += "/" + fileName
+ self.reloadDatasource(withLoadFolder: true)
+ self.setNavigationBar(navigationTitle: fileName)
+
+ } else {
+ self.showAlert(title: "_error_createsubfolders_upload_", description: errorDescription)
+ }
+ }
+ }
+ }
+
+ func loadFolder() {
+
+ networkInProgress = true
+ collectionView.reloadData()
+
+ NCNetworking.shared.readFolder(serverUrl: serverUrl, account: activeAccount.account) { _, metadataFolder, _, _, _, _, errorCode, errorDescription in
+
+ DispatchQueue.main.async {
+ if errorCode != 0 {
+ self.showAlert(description: errorDescription)
+ }
+ self.networkInProgress = false
+ self.metadataFolder = metadataFolder
+ self.reloadDatasource(withLoadFolder: false)
+ }
+ }
+ }
+}
+
+class NCFilesExtensionHandler {
+ var itemsProvider: [NSItemProvider] = []
+ lazy var filesName: [String] = []
+ let dateFormatter: DateFormatter = {
+ let formatter = DateFormatter()
+ formatter.dateFormat = "yyyy-MM-dd HH-mm-ss-"
+ return formatter
+ }()
+
+ @discardableResult
+ init(items: [NSExtensionItem], completion: @escaping ([String]) -> Void) {
+ CCUtility.emptyTemporaryDirectory()
+ var counter = 0
+
+ self.itemsProvider = items.compactMap({ $0.attachments }).flatMap { $0.filter({
+ $0.hasItemConformingToTypeIdentifier(kUTTypeItem as String) || $0.hasItemConformingToTypeIdentifier("public.url")
+ }) }
+
+ for (ix, provider) in itemsProvider.enumerated() {
+ provider.loadItem(forTypeIdentifier: provider.typeIdentifier) { [self] item, error in
+ defer {
+ counter += 1
+ if counter == itemsProvider.count { completion(self.filesName) }
+ }
+ guard error == nil else { return }
+ var originalName = (dateFormatter.string(from: Date())) + String(ix)
+
+ if let url = item as? URL, url.isFileURL, !url.lastPathComponent.isEmpty {
+ originalName = url.lastPathComponent
+ }
+
+ var fileName: String?
+ switch item {
+ case let image as UIImage:
+ fileName = getItem(image: image, fileName: originalName)
+ case let url as URL:
+ fileName = getItem(url: url, fileName: originalName)
+ case let data as Data:
+ fileName = getItem(data: data, fileName: originalName, provider: provider)
+ case let text as String:
+ fileName = getItem(string: text, fileName: originalName)
+ default: return
+ }
+
+ if let fileName = fileName, !filesName.contains(fileName) { filesName.append(fileName) }
+ }
+ }
+ }
+
+ // Image
+ func getItem(image: UIImage, fileName: String) -> String? {
+ var fileUrl = URL(fileURLWithPath: NSTemporaryDirectory() + fileName)
+ if fileUrl.pathExtension.isEmpty { fileUrl.appendPathExtension("png") }
+ guard let pngImageData = image.pngData(),
+ (try? pngImageData.write(to: fileUrl, options: [.atomic])) != nil
+ else { return nil }
+ return fileUrl.lastPathComponent
+ }
+
+ // URL
+ // Does not work for directories
+ func getItem(url: URL, fileName: String) -> String? {
+ var fileName = fileName
+ guard url.isFileURL else {
+ guard !filesName.contains(url.lastPathComponent) else { return nil }
+ if !url.deletingPathExtension().lastPathComponent.isEmpty { fileName = url.deletingPathExtension().lastPathComponent }
+ fileName += "." + (url.pathExtension.isEmpty ? "html" : url.pathExtension)
+ let filenamePath = NSTemporaryDirectory() + fileName
+
+ do {
+ let downloadedContent = try Data(contentsOf: url)
+ guard !FileManager.default.fileExists(atPath: filenamePath) else { return nil }
+ try downloadedContent.write(to: URL(fileURLWithPath: filenamePath))
+ } catch { print(error); return nil }
+ return fileName
+ }
+
+ let filenamePath = NSTemporaryDirectory() + fileName
+
+ try? FileManager.default.removeItem(atPath: filenamePath)
+
+ do {
+ try FileManager.default.copyItem(atPath: url.path, toPath: filenamePath)
+
+ let attr = try FileManager.default.attributesOfItem(atPath: filenamePath)
+ guard !attr.isEmpty else { return nil }
+ return fileName
+ } catch { return nil }
+ }
+
+ // Data
+ func getItem(data: Data, fileName: String, provider: NSItemProvider) -> String? {
+ guard !data.isEmpty else { return nil }
+ var fileName = fileName
+
+ if let url = URL(string: fileName), !url.pathExtension.isEmpty {
+ fileName = url.lastPathComponent
+ } else if let name = provider.suggestedName {
+ fileName = name
+ } else if let ext = provider.registeredTypeIdentifiers.last?.split(separator: ".").last {
+ fileName += "." + ext
+ } // else: no file information, use default name without ext
+
+ // when sharing images in safari only data is retuned.
+ // also, when sharing option "Automatic" is slected extension will return both raw data and a url, which will be downloaded, causing the image to appear twice with different names
+ if let image = UIImage(data: data) {
+ return getItem(image: image, fileName: fileName)
+ }
+
+ let filenamePath = NSTemporaryDirectory() + fileName
+ FileManager.default.createFile(atPath: filenamePath, contents: data, attributes: nil)
+ return fileName
+ }
+
+ // String
+ func getItem(string: String, fileName: String) -> String? {
+ guard !string.isEmpty else { return nil }
+ let filenamePath = NSTemporaryDirectory() + fileName + ".txt"
+ FileManager.default.createFile(atPath: filenamePath, contents: string.data(using: String.Encoding.utf8), attributes: nil)
+ return fileName
+ }
+}
+
+extension NSItemProvider {
+ var typeIdentifier: String {
+ if hasItemConformingToTypeIdentifier("public.url") { return "public.url" } else
+ if hasItemConformingToTypeIdentifier(kUTTypeItem as String) { return kUTTypeItem as String } else { return "" }
+ }
+}
diff --git a/Share/NCShareExtension+NCDelegate.swift b/Share/NCShareExtension+NCDelegate.swift
new file mode 100644
index 000000000..17f6e379a
--- /dev/null
+++ b/Share/NCShareExtension+NCDelegate.swift
@@ -0,0 +1,159 @@
+//
+// NCShareExtension.swift
+// Share
+//
+// Created by Marino Faggiana on 04.01.2022.
+// Copyright © 2022 Henrik Storch. All rights reserved.
+//
+// Author Henrik Storch <henrik.storch@nextcloud.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+//
+
+import NCCommunication
+import UIKit
+
+extension NCShareExtension: NCEmptyDataSetDelegate, NCAccountRequestDelegate {
+ // MARK: - Empty
+
+ func emptyDataSetView(_ view: NCEmptyView) {
+
+ if networkInProgress {
+ view.emptyImage.image = UIImage(named: "networkInProgress")?.image(color: .gray, size: UIScreen.main.bounds.width)
+ view.emptyTitle.text = NSLocalizedString("_request_in_progress_", comment: "")
+ view.emptyDescription.text = ""
+ } else {
+ view.emptyImage.image = UIImage(named: "folder")?.image(color: NCBrandColor.shared.brandElement, size: UIScreen.main.bounds.width)
+ view.emptyTitle.text = NSLocalizedString("_files_no_folders_", comment: "")
+ view.emptyDescription.text = ""
+ }
+ }
+
+ // MARK: - Account
+
+ func showAccountPicker() {
+ let accounts = NCManageDatabase.shared.getAllAccountOrderAlias()
+ guard accounts.count > 1,
+ let vcAccountRequest = UIStoryboard(name: "NCAccountRequest", bundle: nil).instantiateInitialViewController() as? NCAccountRequest else { return }
+
+ // Only here change the active account
+ for account in accounts {
+ account.active = account.account == self.activeAccount.account
+ }
+
+ vcAccountRequest.activeAccount = self.activeAccount
+ vcAccountRequest.accounts = accounts.sorted { sorg, dest -> Bool in
+ return sorg.active && !dest.active
+ }
+ vcAccountRequest.enableTimerProgress = false
+ vcAccountRequest.enableAddAccount = false
+ vcAccountRequest.delegate = self
+ vcAccountRequest.dismissDidEnterBackground = true
+
+ let screenHeighMax = UIScreen.main.bounds.height - (UIScreen.main.bounds.height / 5)
+ let height = min(CGFloat(accounts.count * Int(vcAccountRequest.heightCell) + 45), screenHeighMax)
+
+ let popup = NCPopupViewController(contentController: vcAccountRequest, popupWidth: 300, popupHeight: height + 20)
+
+ self.present(popup, animated: true)
+ }
+
+ func accountRequestChangeAccount(account: String) {
+ guard let activeAccount = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", account)) else {
+ cancel(with: NCShareExtensionError.noAccount)
+ return
+ }
+ self.activeAccount = activeAccount
+
+ // NETWORKING
+ NCCommunicationCommon.shared.setup(
+ account: activeAccount.account,
+ user: activeAccount.user,
+ userId: activeAccount.userId,
+ password: CCUtility.getPassword(activeAccount.account),
+ urlBase: activeAccount.urlBase,
+ userAgent: CCUtility.getUserAgent(),
+ webDav: NCUtilityFileSystem.shared.getWebDAV(account: activeAccount.account),
+ nextcloudVersion: 0,
+ delegate: NCNetworking.shared)
+
+ // get auto upload folder
+ autoUploadFileName = NCManageDatabase.shared.getAccountAutoUploadFileName()
+ autoUploadDirectory = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: activeAccount.urlBase, account: activeAccount.account)
+
+ serverUrl = NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account)
+
+ layoutForView = NCUtility.shared.getLayoutForView(key: keyLayout, serverUrl: serverUrl)
+
+ reloadDatasource(withLoadFolder: true)
+ setNavigationBar(navigationTitle: NCBrandOptions.shared.brand)
+ }
+}
+
+extension NCShareExtension: NCShareCellDelegate, NCRenameFileDelegate, NCListCellDelegate {
+
+ func removeFile(named fileName: String) {
+ guard let index = self.filesName.firstIndex(of: fileName) else {
+ return showAlert(title: "_file_not_found_", description: fileName)
+ }
+ self.filesName.remove(at: index)
+ if self.filesName.isEmpty {
+ cancel(with: NCShareExtensionError.noFiles)
+ } else {
+ self.setCommandView()
+ }
+ }
+
+ func renameFile(named fileName: String) {
+ guard let vcRename = UIStoryboard(name: "NCRenameFile", bundle: nil).instantiateInitialViewController() as? NCRenameFile else { return }
+
+ let resultInternalType = NCCommunicationCommon.shared.getInternalType(fileName: fileName, mimeType: "", directory: false)
+ vcRename.delegate = self
+ vcRename.fileName = fileName
+ if let previewImage = UIImage.downsample(imageAt: URL(fileURLWithPath: NSTemporaryDirectory() + fileName), to: CGSize(width: 140, height: 140)) {
+ vcRename.imagePreview = previewImage
+ } else {
+ vcRename.imagePreview = UIImage(named: resultInternalType.iconName) ?? NCBrandColor.cacheImages.file
+ }
+
+ let popup = NCPopupViewController(contentController: vcRename, popupWidth: vcRename.width, popupHeight: vcRename.height)
+
+ self.present(popup, animated: true)
+ }
+
+ func rename(fileName: String, fileNameNew: String) {
+ guard fileName != fileNameNew else { return }
+ guard let fileIx = self.filesName.firstIndex(of: fileName),
+ !self.filesName.contains(fileNameNew),
+ NCUtilityFileSystem.shared.moveFile(atPath: (NSTemporaryDirectory() + fileName), toPath: (NSTemporaryDirectory() + fileNameNew)) else {
+ return showAlert(title: "_single_file_conflict_title_", description: "'\(fileName)' -> '\(fileNameNew)'")
+ }
+
+ filesName[fileIx] = fileNameNew
+ tableView.reloadData()
+ }
+}
+
+extension NCShareExtension: NCCreateFormUploadConflictDelegate {
+ func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) {
+ guard let metadatas = metadatas else {
+ uploadStarted = false
+ uploadMetadata.removeAll()
+ return
+ }
+
+ self.uploadMetadata.append(contentsOf: metadatas)
+ self.upload()
+ }
+}
diff --git a/Share/NCShareExtension.swift b/Share/NCShareExtension.swift
index dda59037e..970700054 100644
--- a/Share/NCShareExtension.swift
+++ b/Share/NCShareExtension.swift
@@ -1,11 +1,13 @@
//
// NCShareExtension.swift
-// Nextcloud
+// Share
//
// Created by Marino Faggiana on 20/04/2021.
// Copyright © 2021 Marino Faggiana. All rights reserved.
+// Copyright © 2021 Henrik Storch. All rights reserved.
//
// Author Marino Faggiana <marino.faggiana@nextcloud.com>
+// Author Henrik Storch <henrik.storch@nextcloud.com>
//
// 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
@@ -23,9 +25,13 @@
import UIKit
import NCCommunication
-import IHProgressHUD
+import JGProgressHUD
-class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDelegate, NCRenameFileDelegate, NCAccountRequestDelegate {
+enum NCShareExtensionError: Error {
+ case cancel, fileUpload, noAccount, noFiles
+}
+
+class NCShareExtension: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var tableView: UITableView!
@@ -38,7 +44,6 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
@IBOutlet weak var createFolderView: UIView!
@IBOutlet weak var createFolderImage: UIImageView!
@IBOutlet weak var createFolderLabel: UILabel!
-
@IBOutlet weak var uploadView: UIView!
@IBOutlet weak var uploadImage: UIImageView!
@IBOutlet weak var uploadLabel: UILabel!
@@ -48,26 +53,25 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
var filesName: [String] = []
// -------------------------------------------------------------
- private var emptyDataSet: NCEmptyDataSet?
- private let keyLayout = NCGlobal.shared.layoutViewShareExtension
- private var metadataFolder: tableMetadata?
- private var networkInProgress = false
- private var dataSource = NCDataSource()
-
- private var layoutForView: NCGlobal.layoutForViewType?
-
- private var heightRowTableView: CGFloat = 50
- private var heightCommandView: CGFloat = 170
-
- private var autoUploadFileName = ""
- private var autoUploadDirectory = ""
-
- private let refreshControl = UIRefreshControl()
- private var activeAccount: tableAccount!
- private let chunckSize = CCUtility.getChunkSize() * 1000000
-
- private var numberFilesName: Int = 0
- private var counterUpload: Int = 0
+ var emptyDataSet: NCEmptyDataSet?
+ let keyLayout = NCGlobal.shared.layoutViewShareExtension
+ var metadataFolder: tableMetadata?
+ var networkInProgress = false
+ var dataSource = NCDataSource()
+ var layoutForView: NCGlobal.layoutForViewType?
+ let heightRowTableView: CGFloat = 50
+ let heightCommandView: CGFloat = 170
+ var autoUploadFileName = ""
+ var autoUploadDirectory = ""
+ let refreshControl = UIRefreshControl()
+ var activeAccount: tableAccount!
+ let chunckSize = CCUtility.getChunkSize() * 1000000
+ var progress: CGFloat = 0
+ var counterUploaded: Int = 0
+ var uploadErrors: [tableMetadata] = []
+ var uploadMetadata: [tableMetadata] = []
+ var uploadStarted = false
+ let hud = JGProgressHUD()
// MARK: - View Life Cycle
@@ -76,36 +80,31 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
self.navigationController?.navigationBar.prefersLargeTitles = false
- // Cell
collectionView.register(UINib(nibName: "NCListCell", bundle: nil), forCellWithReuseIdentifier: "listCell")
collectionView.collectionViewLayout = NCListLayout()
- // Add Refresh Control
collectionView.addSubview(refreshControl)
refreshControl.tintColor = NCBrandColor.shared.brandText
refreshControl.backgroundColor = NCBrandColor.shared.systemBackground
refreshControl.addTarget(self, action: #selector(reloadDatasource), for: .valueChanged)
- // Command view
commandView.backgroundColor = NCBrandColor.shared.secondarySystemBackground
separatorView.backgroundColor = NCBrandColor.shared.separator
separatorHeightConstraint.constant = 0.5
- // Table view
tableView.separatorColor = NCBrandColor.shared.separator
tableView.layer.cornerRadius = 10
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: 1)))
commandViewHeightConstraint.constant = heightCommandView
- // Create folder
createFolderView.layer.cornerRadius = 10
createFolderImage.image = NCUtility.shared.loadImage(named: "folder.badge.plus", color: NCBrandColor.shared.label)
createFolderLabel.text = NSLocalizedString("_create_folder_", comment: "")
let createFolderGesture = UITapGestureRecognizer(target: self, action: #selector(actionCreateFolder))
createFolderView.addGestureRecognizer(createFolderGesture)
- // Upload
uploadView.layer.cornerRadius = 10
+
// uploadImage.image = NCUtility.shared.loadImage(named: "square.and.arrow.up", color: NCBrandColor.shared.label)
uploadLabel.text = NSLocalizedString("_upload_", comment: "")
uploadLabel.textColor = .systemBlue
@@ -127,62 +126,37 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
NCCommunicationCommon.shared.writeLog("Start session with level \(levelLog) " + versionNextcloudiOS)
}
- // HUD
- IHProgressHUD.set(viewForExtension: self.view)
- IHProgressHUD.set(defaultMaskType: .clear)
- IHProgressHUD.set(minimumDismiss: 0)
-
+ hud.indicatorView = JGProgressHUDRingIndicatorView()
+ if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView {
+ indicatorView.ringWidth = 1.5
+ }
+
NotificationCenter.default.addObserver(self, selector: #selector(triggerProgressTask(_:)), name: NSNotification.Name(rawValue: NCGlobal.shared.notificationCenterProgressTask), object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
+ guard serverUrl.isEmpty else { return }
- if serverUrl == "" {
-
- if let activeAccount = NCManageDatabase.shared.getActiveAccount() {
-
- setAccount(account: activeAccount.account)
- getFilesExtensionContext { filesName in
-
- self.filesName = filesName
- DispatchQueue.main.async {
-
- var saveHtml: [String] = []
- var saveOther: [String] = []
-
- for fileName in self.filesName {
- if (fileName as NSString).pathExtension.lowercased() == "html" {
- saveHtml.append(fileName)
- } else {
- saveOther.append(fileName)
- }
- }
-
- if saveOther.count > 0 && saveHtml.count > 0 {
- for file in saveHtml {
- self.filesName = self.filesName.filter {$0 != file}
- }
- }
-
- self.setCommandView()
- }
- }
-
- } else {
-
- let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_no_active_account_", comment: ""), preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in
- self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
- }))
- self.present(alertController, animated: true)
+ guard let activeAccount = NCManageDatabase.shared.getActiveAccount() else {
+ return showAlert(description: "_no_active_account_") {
+ self.cancel(with: .noAccount)
}
}
+
+ accountRequestChangeAccount(account: activeAccount.account)
+ guard let inputItems = extensionContext?.inputItems as? [NSExtensionItem] else {
+ cancel(with: .noFiles)
+ return
+ }
+ NCFilesExtensionHandler(items: inputItems) { fileNames in
+ self.filesName = fileNames
+ DispatchQueue.main.async { self.setCommandView() }
+ }
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
-
coordinator.animate(alongsideTransition: nil) { _ in
self.collectionView?.collectionViewLayout.invalidateLayout()
}
@@ -190,84 +164,62 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
-
collectionView.reloadData()
tableView.reloadData()
}
// MARK: -
- @objc func triggerProgressTask(_ notification: NSNotification) {
-
- if let userInfo = notification.userInfo as NSDictionary?, let progressNumber = userInfo["progress"] as? NSNumber {
-
- let progress = CGFloat(progressNumber.floatValue)
- let status = NSLocalizedString("_upload_file_", comment: "") + " \(self.counterUpload) " + NSLocalizedString("_of_", comment: "") + " \(self.numberFilesName)"
- IHProgressHUD.show(progress: progress, status: status)
- }
+ func cancel(with error: NCShareExtensionError) {
+ // make sure no uploads are continued
+ uploadStarted = false
+ extensionContext?.cancelRequest(withError: error)
}
- // MARK: -
-
- func setAccount(account: String) {
-
- guard let activeAccount = NCManageDatabase.shared.getAccount(predicate: NSPredicate(format: "account == %@", account)) else {
- extensionContext?.completeRequest(returningItems: extensionContext?.inputItems, completionHandler: nil)
- return
- }
- self.activeAccount = activeAccount
-
- // NETWORKING
- NCCommunicationCommon.shared.setup(account: activeAccount.account, user: activeAccount.user, userId: activeAccount.userId, password: CCUtility.getPassword(activeAccount.account), urlBase: activeAccount.urlBase, userAgent: CCUtility.getUserAgent(), webDav: NCUtilityFileSystem.shared.getWebDAV(account: activeAccount.account), nextcloudVersion: 0, delegate: NCNetworking.shared)
-
- // get auto upload folder
- autoUploadFileName = NCManageDatabase.shared.getAccountAutoUploadFileName()
- autoUploadDirectory = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: activeAccount.urlBase, account: activeAccount.account)
-
- serverUrl = NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account)
-
- layoutForView = NCUtility.shared.getLayoutForView(key: keyLayout, serverUrl: serverUrl)
-
- reloadDatasource(withLoadFolder: true)
- setNavigationBar(navigationTitle: NCBrandOptions.shared.brand)
+ func showAlert(title: String = "_error_", description: String, onDismiss: (() -> Void)? = nil) {
+ let alertController = UIAlertController(title: NSLocalizedString(title, comment: ""), message: NSLocalizedString(description, comment: ""), preferredStyle: .alert)
+ alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in
+ onDismiss?()
+ }))
+ self.present(alertController, animated: true)
}
+ @objc func triggerProgressTask(_ notification: NSNotification) {
+ guard let progress = notification.userInfo?["progress"] as? Float else { return }
+ hud.progress = progress
+ }
+
func setNavigationBar(navigationTitle: String) {
navigationItem.title = navigationTitle
cancelButton.title = NSLocalizedString("_cancel_", comment: "")
// BACK BUTTON
-
let backButton = UIButton(type: .custom)
backButton.setImage(UIImage(named: "back"), for: .normal)
backButton.tintColor = .systemBlue
backButton.semanticContentAttribute = .forceLeftToRight
- backButton.setTitle(" "+NSLocalizedString("_back_", comment: ""), for: .normal)
+ backButton.setTitle(" " + NSLocalizedString("_back_", comment: ""), for: .normal)
backButton.setTitleColor(.systemBlue, for: .normal)
backButton.action(for: .touchUpInside) { _ in
-
- while self.serverUrl.last != "/" {
+ if !self.uploadStarted {
+ while self.serverUrl.last != "/" { self.serverUrl.removeLast() }
self.serverUrl.removeLast()
- }
- self.serverUrl.removeLast()
- self.reloadDatasource(withLoadFolder: true)
+ self.reloadDatasource(withLoadFolder: true)
- var navigationTitle = (self.serverUrl as NSString).lastPathComponent
- if NCUtilityFileSystem.shared.getHomeServer(account: self.activeAccount.account) == self.serverUrl {
- navigationTitle = NCBrandOptions.shared.brand
+ var navigationTitle = (self.serverUrl as NSString).lastPathComponent
+ if NCUtilityFileSystem.shared.getHomeServer(account: self.activeAccount.account) == self.serverUrl {
+ navigationTitle = NCBrandOptions.shared.brand
+ }
+ self.setNavigationBar(navigationTitle: navigationTitle)
}
- self.setNavigationBar(navigationTitle: navigationTitle)
}
- // PROFILE BUTTON
-
let image = NCUtility.shared.loadUserImage(
for: activeAccount.user,
displayName: activeAccount.displayName,
userBaseUrl: activeAccount)
-
let profileButton = UIButton(type: .custom)
profileButton.setImage(image, for: .normal)
@@ -287,100 +239,41 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
profileButton.semanticContentAttribute = .forceLeftToRight
profileButton.sizeToFit()
profileButton.action(for: .touchUpInside) { _ in
-
- let accounts = NCManageDatabase.shared.getAllAccountOrderAlias()
- if accounts.count > 1 {
-
- if let vcAccountRequest = UIStoryboard(name: "NCAccountRequest", bundle: nil).instantiateInitialViewController() as? NCAccountRequest {
-
- // Only here change the active account
- for account in accounts {
- if account.account == self.activeAccount.account {
- account.active = true
- } else {
- account.active = false
- }
- }
-
- vcAccountRequest.activeAccount = self.activeAccount
- vcAccountRequest.accounts = accounts.sorted { sorg, dest -> Bool in
- return sorg.active && !dest.active
- }
- vcAccountRequest.enableTimerProgress = false
- vcAccountRequest.enableAddAccount = false
- vcAccountRequest.delegate = self
- vcAccountRequest.dismissDidEnterBackground = true
-
- let screenHeighMax = UIScreen.main.bounds.height - (UIScreen.main.bounds.height/5)
- let numberCell = accounts.count
- let height = min(CGFloat(numberCell * Int(vcAccountRequest.heightCell) + 45), screenHeighMax)
-
- let popup = NCPopupViewController(contentController: vcAccountRequest, popupWidth: 300, popupHeight: height+20)
-
- self.present(popup, animated: true)
- }
+ if !self.uploadStarted {
+ self.showAccountPicker()
}
}
-
- if serverUrl == NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account) {
-
- navigationItem.setLeftBarButtonItems([UIBarButtonItem(customView: profileButton)], animated: true)
-
- } else {
-
+ var navItems = [UIBarButtonItem(customView: profileButton)]
+ if serverUrl != NCUtilityFileSystem.shared.getHomeServer(account: activeAccount.account) {
let space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
space.width = 20
-
- navigationItem.setLeftBarButtonItems([UIBarButtonItem(customView: backButton), space, UIBarButtonItem(customView: profileButton)], animated: true)
+ navItems.append(contentsOf: [UIBarButtonItem(customView: backButton), space])
}
+ navigationItem.setLeftBarButtonItems(navItems, animated: true)
}
func setCommandView() {
-
- var counter: CGFloat = 0
-
- if filesName.count == 0 {
- self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
+ guard !filesName.isEmpty else {
+ cancel(with: .noFiles)
return
- } else {
- if filesName.count < 3 {
- counter = CGFloat(filesName.count)
- self.commandViewHeightConstraint.constant = heightCommandView + (self.heightRowTableView * counter)
- } else {
- counter = 3
- self.commandViewHeightConstraint.constant = heightCommandView + (self.heightRowTableView * counter)
- }
- if filesName.count <= 3 {
- self.tableView.isScrollEnabled = false
- }
- // Label upload button
- numberFilesName = filesName.count
- uploadLabel.text = NSLocalizedString("_upload_", comment: "") + " \(numberFilesName) " + NSLocalizedString("_files_", comment: "")
- // Empty
- emptyDataSet = NCEmptyDataSet(view: collectionView, offset: -50*counter, delegate: self)
- self.tableView.reloadData()
}
- }
-
- // MARK: - Empty
-
- func emptyDataSetView(_ view: NCEmptyView) {
+ let counter = min(CGFloat(filesName.count), 3)
+ self.commandViewHeightConstraint.constant = heightCommandView + (self.heightRowTableView * counter)
- if networkInProgress {
- view.emptyImage.image = UIImage(named: "networkInProgress")?.image(color: .gray, size: UIScreen.main.bounds.width)
- view.emptyTitle.text = NSLocalizedString("_request_in_progress_", comment: "")
- view.emptyDescription.text = ""
- } else {
- view.emptyImage.image = UIImage(named: "folder")?.image(color: NCBrandColor.shared.brandElement, size: UIScreen.main.bounds.width)
- view.emptyTitle.text = NSLocalizedString("_files_no_folders_", comment: "")
- view.emptyDescription.text = ""
+ if filesName.count <= 3 {
+ self.tableView.isScrollEnabled = false
}
+ // Label upload button
+ uploadLabel.text = NSLocalizedString("_upload_", comment: "") + " \(filesName.count) " + NSLocalizedString("_files_", comment: "")
+ // Empty
+ emptyDataSet = NCEmptyDataSet(view: collectionView, offset: -50 * counter, delegate: self)
+ self.tableView.reloadData()
}
// MARK: ACTION
@IBAction func actionCancel(_ sender: UIBarButtonItem) {
- extensionContext?.completeRequest(returningItems: extensionContext?.inputItems, completionHandler: nil)
+ cancel(with: .cancel)
}
@objc func actionCreateFolder() {
@@ -391,609 +284,107 @@ class NCShareExtension: UIViewController, NCListCellDelegate, NCEmptyDataSetDele
textField.autocapitalizationType = UITextAutocapitalizationType.words
}
- let actionSave = UIAlertAction(title: NSLocalizedString("_save_", comment: ""), style: .default) { (_: UIAlertAction) in
+ let actionSave = UIAlertAction(title: NSLocalizedString("_save_", comment: ""), style: .default) { _ in
if let fileName = alertController.textFields?.first?.text {
self.createFolder(with: fileName)
}
}
- let actionCancel = UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel) { (_: UIAlertAction) in
- print("You've pressed cancel button")
- }
+ let actionCancel = UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel)
alertController.addAction(actionSave)
alertController.addAction(actionCancel)
self.present(alertController, animated: true, completion: nil)
}
+}
+// MARK: - Upload
+extension NCShareExtension {
@objc func actionUpload() {
+ guard !uploadStarted else { return }
+ guard !filesName.isEmpty else { return showAlert(description: "_files_no_files_") }
- if let fileName = filesName.first {
+ counterUploaded = 0
+ uploadStarted = true
+ uploadErrors = []
- counterUpload += 1
- filesName.removeFirst()
+ var conflicts: [tableMetadata] = []
+ for fileName in filesName {
let ocId = NSUUID().uuidString
- let filePath = CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName)!
-
- if NCUtilityFileSystem.shared.moveFile(atPath: (NSTemporaryDirectory() + fileName), toPath: filePath) {
-
- let metadata = NCManageDatabase.shared.createMetadata(account: activeAccount.account, user: activeAccount.user, userId: activeAccount.userId, fileName: fileName, fileNameView: fileName, ocId: ocId, serverUrl: serverUrl, urlBase: activeAccount.urlBase, url: "", contentType: "", livePhoto: false)
-
- metadata.session = NCCommunicationCommon.shared.sessionIdentifierUpload
- metadata.sessionSelector = NCGlobal.shared.selectorUploadFile
- metadata.size = NCUtilityFileSystem.shared.getFileSize(filePath: filePath)
- metadata.status = NCGlobal.shared.metadataStatusWaitUpload
-
- // E2EE
- if CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase) {
- metadata.e2eEncrypted = true
- }
-
- // CHUNCK
- if chunckSize != 0 && metadata.size > chunckSize {
- metadata.chunk = true
- }
-
- NCNetworking.shared.upload(metadata: metadata) {
-
- } completion: { errorCode, errorDescription in
-
- if errorCode == 0 {
-
- self.actionUpload()
-
- } else {
-
- IHProgressHUD.dismiss()
-
- NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", ocId))
- NCManageDatabase.shared.deleteChunks(account: self.activeAccount.account, ocId: ocId)
-
- let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: errorDescription, preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in
- self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
- }))
- self.present(alertController, animated: true)
- }
- }
- }
- } else {
-
- IHProgressHUD.showSuccesswithStatus(NSLocalizedString("_success_", comment: ""))
-
- DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
- self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
- }
- }
- }
-
- func rename(fileName: String, fileNameNew: String) {
-
- if let row = self.filesName.firstIndex(where: {$0 == fileName}) {
-
- if NCUtilityFileSystem.shared.moveFile(atPath: (NSTemporaryDirectory() + fileName), toPath: (NSTemporaryDirectory() + fileNameNew)) {
- filesName[row] = fileNameNew
- tableView.reloadData()
- }
- }
- }
-
- func accountRequestChangeAccount(account: String) {
- setAccount(account: account)
- }
-}
-
-// MARK: - Collection View
-
-extension NCShareExtension: UICollectionViewDelegate {
-
- func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-
- if let metadata = dataSource.cellForItemAt(indexPath: indexPath) {
- if let serverUrl = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName) {
-
- if metadata.e2eEncrypted && !CCUtility.isEnd(toEndEnabled: activeAccount.account) {
- let alertController = UIAlertController(title: NSLocalizedString("_info_", comment: ""), message: NSLocalizedString("_e2e_goto_settings_for_enable_", comment: ""), preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in }))
- self.present(alertController, animated: true)
- return
- }
-
- self.serverUrl = serverUrl
- reloadDatasource(withLoadFolder: true)
- setNavigationBar(navigationTitle: metadata.fileNameView)
- }
- }
- }
-}
-
-extension NCShareExtension: UICollectionViewDataSource {
-
- func numberOfSections(in collectionView: UICollectionView) -> Int {
- return 1
- }
-
- func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
- let numberOfItems = dataSource.numberOfItems()
- emptyDataSet?.numberOfItemsInSection(numberOfItems, section: section)
- return numberOfItems
- }
-
- func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-
- guard let metadata = dataSource.cellForItemAt(indexPath: indexPath) else {
- return collectionView.dequeueReusableCell(withReuseIdentifier: "listCell", for: indexPath) as! NCListCell
- }
-
- var tableShare: tableShare?
- var isShare = false
- var isMounted = false
-
- if let metadataFolder = metadataFolder {
- isShare = metadata.permissions.contains(NCGlobal.shared.permissionShared) && !metadataFolder.permissions.contains(NCGlobal.shared.permissionShared)
- isMounted = metadata.permissions.contains(NCGlobal.shared.permissionMounted) && !metadataFolder.permissions.contains(NCGlobal.shared.permissionMounted)
- }
-
- if dataSource.metadataShare[metadata.ocId] != nil {
- tableShare = dataSource.metadataShare[metadata.ocId]
- }
-
- let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "listCell", for: indexPath) as! NCListCell
- cell.delegate = self
-
- cell.fileObjectId = metadata.ocId
- cell.fileUser = metadata.ownerId
- cell.labelTitle.text = metadata.fileNameView
- cell.labelTitle.textColor = NCBrandColor.shared.label
-
- cell.imageSelect.image = nil
- cell.imageStatus.image = nil
- cell.imageLocal.image = nil
- cell.imageFavorite.image = nil
- cell.imageShared.image = nil
- cell.imageMore.image = nil
-
- cell.imageItem.image = nil
- cell.imageItem.backgroundColor = nil
-
- cell.progressView.progress = 0.0
-
- if metadata.directory {
-
- if metadata.e2eEncrypted {
- cell.imageItem.image = NCBrandColor.cacheImages.folderEncrypted
- } else if isShare {
- cell.imageItem.image = NCBrandColor.cacheImages.folderSharedWithMe
- } else if tableShare != nil && tableShare?.shareType != 3 {
- cell.imageItem.image = NCBrandColor.cacheImages.folderSharedWithMe
- } else if tableShare != nil && tableShare?.shareType == 3 {
- cell.imageItem.image = NCBrandColor.cacheImages.folderPublic
- } else if metadata.mountType == "group" {
- cell.imageItem.image = NCBrandColor.cacheImages.folderGroup
- } else if isMounted {
- cell.imageItem.image = NCBrandColor.cacheImages.folderExternal
- } else if metadata.fileName == autoUploadFileName && metadata.serverUrl == autoUploadDirectory {
- cell.imageItem.image = NCBrandColor.cacheImages.folderAutomaticUpload
+ let toPath = CCUtility.getDirectoryProviderStorageOcId(ocId, fileNameView: fileName)!
+ guard NCUtilityFileSystem.shared.copyFile(atPath: (NSTemporaryDirectory() + fileName), toPath: toPath) else { continue }
+ let metadata = NCManageDatabase.shared.createMetadata(
+ account: activeAccount.account, user: activeAccount.user, userId: activeAccount.userId,
+ fileName: fileName, fileNameView: fileName,
+ ocId: ocId,
+ serverUrl: serverUrl, urlBase: activeAccount.urlBase, url: "",
+ contentType: "",
+ livePhoto: false)
+ metadata.session = NCCommunicationCommon.shared.sessionIdentifierUpload
+ metadata.sessionSelector = NCGlobal.shared.selectorUploadFileShareExtension
+ metadata.size = NCUtilityFileSystem.shared.getFileSize(filePath: toPath)
+ metadata.status = NCGlobal.shared.metadataStatusWaitUpload
+ if NCManageDatabase.shared.getMetadataConflict(account: activeAccount.account, serverUrl: serverUrl, fileName: fileName) != nil {
+ conflicts.append(metadata)
} else {
- cell.imageItem.image = NCBrandColor.cacheImages.folder
+ uploadMetadata.append(metadata)
}
-
- cell.labelInfo.text = CCUtility.dateDiff(metadata.date as Date)
-
- let lockServerUrl = CCUtility.stringAppendServerUrl(metadata.serverUrl, addFileName: metadata.fileName)!
- let tableDirectory = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", activeAccount.account, lockServerUrl))
-
- // Local image: offline
- if tableDirectory != nil && tableDirectory!.offline {
- cell.imageLocal.image = NCBrandColor.cacheImages.offlineFlag
- }
-
- }
-
- // image Favorite
- if metadata.favorite {
- cell.imageFavorite.image = NCBrandColor.cacheImages.favorite
}
- cell.imageSelect.isHidden = true
- cell.backgroundView = nil
- cell.hideButtonMore(true)
- cell.hideButtonShare(true)
- cell.selectMode(false)
-
- // Live Photo
- if metadata.livePhoto {
- cell.imageStatus.image = NCBrandColor.cacheImages.livePhoto
- }
-
- // Remove last separator
- if collectionView.numberOfItems(inSection: indexPath.section) == indexPath.row + 1 {
- cell.separator.isHidden = true
+ if !conflicts.isEmpty {
+ guard let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict
+ else { return }
+ conflict.serverUrl = self.serverUrl
+ conflict.metadatasUploadInConflict = conflicts
+ conflict.delegate = self
+ self.present(conflict, animated: true, completion: nil)
} else {
- cell.separator.isHidden = false
+ upload()
}
-
- return cell
- }
-}
-
-// MARK: - Table View
-
-extension NCShareExtension: UITableViewDelegate {
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return heightRowTableView
}
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- }
-}
-
-extension NCShareExtension: UITableViewDataSource {
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- filesName.count
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-
- let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
- cell.backgroundColor = NCBrandColor.shared.systemBackground
-
- let imageCell = cell.viewWithTag(10) as? UIImageView
- let fileNameCell = cell.viewWithTag(20) as? UILabel
- let moreButton = cell.viewWithTag(30) as? NCShareExtensionButtonWithIndexPath
- let sizeCell = cell.viewWithTag(40) as? UILabel
-
- imageCell?.layer.cornerRadius = 6
- imageCell?.layer.masksToBounds = true
+ func upload() {
+ guard uploadStarted else { return }
+ guard uploadMetadata.count > counterUploaded else { return finishedUploading() }
+ let metadata = uploadMetadata[counterUploaded]
- let fileName = filesName[indexPath.row]
- let resultInternalType = NCCommunicationCommon.shared.getInternalType(fileName: fileName, mimeType: "", directory: false)
+ // E2EE
+ metadata.e2eEncrypted = CCUtility.isFolderEncrypted(metadata.serverUrl, e2eEncrypted: metadata.e2eEncrypted, account: metadata.account, urlBase: metadata.urlBase)
+ // CHUNCK
+ metadata.chunk = chunckSize != 0 && metadata.size > chunckSize
- if let image = UIImage(contentsOfFile: (NSTemporaryDirectory() + fileName)) {
- imageCell?.image = image.resizeImage(size: CGSize(width: 80, height: 80), isAspectRation: true)
- } else {
- if resultInternalType.iconName.count > 0 {
- imageCell?.image = UIImage(named: resultInternalType.iconName)
+ hud.textLabel.text = NSLocalizedString("_upload_file_", comment: "") + " \(counterUploaded + 1) " + NSLocalizedString("_of_", comment: "") + " \(filesName.count)"
+ hud.progress = 0
+ hud.show(in: self.view)
+
+ NCNetworking.shared.upload(metadata: metadata) { } completion: { errorCode, _ in
+ if errorCode == 0 {
+ self.counterUploaded += 1
+ self.upload()
} else {
- imageCell?.image = NCBrandColor.cacheImages.file
+ let path = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId)!
+ NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+ NCManageDatabase.shared.deleteChunks(account: metadata.account, ocId: metadata.ocId)
+ NCUtilityFileSystem.shared.deleteFile(filePath: path)
+ self.uploadErrors.append(metadata)
}
}
-
- fileNameCell?.text = fileName
-
- let fileSize = NCUtilityFileSystem.shared.getFileSize(filePath: (NSTemporaryDirectory() + fileName))
- sizeCell?.text = CCUtility.transformedSize(fileSize)
-
- moreButton?.setImage(NCUtility.shared.loadImage(named: "more").image(color: NCBrandColor.shared.label, size: 15), for: .normal)
- moreButton?.indexPath = indexPath
- moreButton?.fileName = fileName
- moreButton?.image = imageCell?.image
- moreButton?.action(for: .touchUpInside, { sender in
-
- if let fileName = (sender as! NCShareExtensionButtonWithIndexPath).fileName {
- let alertController = UIAlertController(title: "", message: fileName, preferredStyle: .alert)
-
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_delete_file_", comment: ""), style: .default) { (_: UIAlertAction) in
- if let index = self.filesName.firstIndex(of: fileName) {
-
- self.filesName.remove(at: index)
- if self.filesName.count == 0 {
- self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
- } else {
- self.setCommandView()
- }
- }
- })
-
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_rename_file_", comment: ""), style: .default) { (_: UIAlertAction) in
-
- if let vcRename = UIStoryboard(name: "NCRenameFile", bundle: nil).instantiateInitialViewController() as? NCRenameFile {
-
- vcRename.delegate = self
- vcRename.fileName = fileName
- vcRename.imagePreview = (sender as! NCShareExtensionButtonWithIndexPath).image
-
- let popup = NCPopupViewController(contentController: vcRename, popupWidth: vcRename.width, popupHeight: vcRename.height)
-
- self.present(popup, animated: true)
- }
- })
-
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_cancel_", comment: ""), style: .cancel) { (_: UIAlertAction) in })
-
- self.present(alertController, animated: true, completion: nil)
- }
- })
-
- return cell
}
-}
-// MARK: - NC API & Algorithm
-
-extension NCShareExtension {
-
- @objc func reloadDatasource(withLoadFolder: Bool) {
-
- layoutForView = NCUtility.shared.getLayoutForView(key: keyLayout, serverUrl: serverUrl)
-
- let metadatasSource = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND directory == true", activeAccount.account, serverUrl))
- self.dataSource = NCDataSource(metadatasSource: metadatasSource, sort: layoutForView?.sort, ascending: layoutForView?.ascending, directoryOnTop: layoutForView?.directoryOnTop, favoriteOnTop: true, filterLivePhoto: true)
-
- if withLoadFolder {
- loadFolder()
- } else {
- self.refreshControl.endRefreshing()
- }
-
- collectionView.reloadData()
- }
-
- func createFolder(with fileName: String) {
-
- NCNetworking.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: activeAccount.account, urlBase: activeAccount.urlBase) { errorCode, errorDescription in
-
- DispatchQueue.main.async {
- if errorCode == 0 {
-
- self.serverUrl += "/" + fileName
- self.reloadDatasource(withLoadFolder: true)
- self.setNavigationBar(navigationTitle: fileName)
-
- } else {
-
- let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: errorDescription, preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in }))
- self.present(alertController, animated: true)
- }
+ func finishedUploading() {
+ uploadStarted = false
+ if !uploadErrors.isEmpty {
+ let fileList = "- " + uploadErrors.map({ $0.fileName }).joined(separator: "\n - ")
+ showAlert(title: "_error_files_upload_", description: fileList) {
+ self.extensionContext?.cancelRequest(withError: NCShareExtensionError.fileUpload)
}
- }
- }
-
- func loadFolder() {
-
- networkInProgress = true
- collectionView.reloadData()
-
- NCNetworking.shared.readFolder(serverUrl: serverUrl, account: activeAccount.account) { _, metadataFolder, _, _, _, _, errorCode, errorDescription in
-
- DispatchQueue.main.async {
- if errorCode != 0 {
- let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: errorDescription, preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_ok_", comment: ""), style: .default, handler: { _ in }))
- self.present(alertController, animated: true)
- }
- self.networkInProgress = false
- self.metadataFolder = metadataFolder
- self.reloadDatasource(withLoadFolder: false)
- }
- }
- }
-
- func getFilesExtensionContext(completion: @escaping (_ filesName: [String]) -> Void) {
-
- var itemsProvider: [NSItemProvider] = []
- var filesName: [String] = []
- var conuter = 0
- let dateFormatter = DateFormatter()
-
- // ----------------------------------------------------------------------------------------
-
- // Image
- func getItem(image: UIImage, fileNameOriginal: String?) {
-
- var fileName: String = ""
-
- if let pngImageData = image.pngData() {
-
- if fileNameOriginal != nil {
- fileName = fileNameOriginal!
- } else {
- fileName = "\(dateFormatter.string(from: Date()))\(conuter).png"
- }
-
- let filenamePath = NSTemporaryDirectory() + fileName
-
- if (try? pngImageData.write(to: URL(fileURLWithPath: filenamePath), options: [.atomic])) != nil {
- filesName.append(fileName)
- }
- }
- }
-
- // URL
- func getItem(url: NSURL, fileNameOriginal: String?) {
-
- guard let path = url.path else { return }
-
- var fileName: String = ""
-
- if fileNameOriginal != nil {
- fileName = fileNameOriginal!
- } else {
- if let ext = url.pathExtension {
- fileName = "\(dateFormatter.string(from: Date()))\(conuter)." + ext
- }
- }
-
- let filenamePath = NSTemporaryDirectory() + fileName
-
- do {
- try FileManager.default.removeItem(atPath: filenamePath)
- } catch { }
-
- do {
- try FileManager.default.copyItem(atPath: path, toPath: filenamePath)
-
- do {
- let attr: NSDictionary? = try FileManager.default.attributesOfItem(atPath: filenamePath) as NSDictionary?
-
- if let _attr = attr {
- if _attr.fileSize() > 0 {
- filesName.append(fileName)
- }
- }
-
- } catch { }
- } catch { }
- }
-
- // Data
- func getItem(data: Data, fileNameOriginal: String?, description: String) {
-
- var fileName: String = ""
-
- if data.count > 0 {
-
- if fileNameOriginal != nil {
- fileName = fileNameOriginal!
- } else {
- let fullNameArr = description.components(separatedBy: "\"")
- let fileExtArr = fullNameArr[1].components(separatedBy: ".")
- let pathExtention = (fileExtArr[fileExtArr.count-1]).uppercased()
- fileName = "\(dateFormatter.string(from: Date()))\(conuter).\(pathExtention)"
- }
-
- let filenamePath = NSTemporaryDirectory() + fileName
- FileManager.default.createFile(atPath: filenamePath, contents: data, attributes: nil)
- filesName.append(fileName)
- }
- }
-
- // String
- func getItem(string: NSString, fileNameOriginal: String?) {
-
- var fileName: String = ""
-
- if string.length > 0 {
-
- fileName = "\(dateFormatter.string(from: Date()))\(conuter).txt"
- let filenamePath = NSTemporaryDirectory() + "\(dateFormatter.string(from: Date()))\(conuter).txt"
- FileManager.default.createFile(atPath: filenamePath, contents: string.data(using: String.Encoding.utf8.rawValue), attributes: nil)
- filesName.append(fileName)
- }
- }
-
- // ----------------------------------------------------------------------------------------
-
- guard let inputItems: [NSExtensionItem] = extensionContext?.inputItems as? [NSExtensionItem] else {
- return completion(filesName)
- }
-
- for item: NSExtensionItem in inputItems {
- if let attachments = item.attachments {
- if attachments.isEmpty { continue }
- for (_, itemProvider) in (attachments.enumerated()) {
- if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeItem as String) || itemProvider.hasItemConformingToTypeIdentifier("public.url") {
- itemsProvider.append(itemProvider)
- }
- }
- }
- }
-
- CCUtility.emptyTemporaryDirectory()
- dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss-"
-
- for itemProvider in itemsProvider {
-
- var typeIdentifier = ""
- if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeItem as String) { typeIdentifier = kUTTypeItem as String }
- if itemProvider.hasItemConformingToTypeIdentifier("public.url") { typeIdentifier = "public.url" }
-
- itemProvider.loadItem(forTypeIdentifier: typeIdentifier, options: nil, completionHandler: {item, error -> Void in
-
- if error == nil {
-
- var fileNameOriginal: String?
-
- if let url = item as? NSURL {
- if FileManager.default.fileExists(atPath: url.path ?? "") {
- fileNameOriginal = url.lastPathComponent!
- } else if url.scheme?.lowercased().contains("http") == true {
- fileNameOriginal = "\(dateFormatter.string(from: Date()))\(conuter).html"
- } else {
- fileNameOriginal = "\(dateFormatter.string(from: Date()))\(conuter)"
- }
- }
-
- if let image = item as? UIImage {
- getItem(image: image, fileNameOriginal: fileNameOriginal)
- }
-
- if let url = item as? URL {
- getItem(url: url as NSURL, fileNameOriginal: fileNameOriginal)
- }
-
- if let data = item as? Data {
- getItem(data: data, fileNameOriginal: fileNameOriginal, description: itemProvider.description)
- }
-
- if let string = item as? NSString {
- getItem(string: string, fileNameOriginal: fileNameOriginal)
- }
- }
-
- conuter += 1
- if conuter == itemsProvider.count {
- completion(filesName)
- }
- })
- }
- }
-}
-
-/*
-let task = URLSession.shared.downloadTask(with: urlitem) { localURL, urlResponse, error in
-
- if let localURL = localURL {
-
- if fileNameOriginal != nil {
- fileName = fileNameOriginal!
} else {
- let ext = url.pathExtension
- fileName = "\(dateFormatter.string(from: Date()))\(conuter)." + ext
- }
-
- let filenamePath = NSTemporaryDirectory() + fileName
-
- do {
- try FileManager.default.removeItem(atPath: filenamePath)
- }
- catch { }
-
- do {
- try FileManager.default.copyItem(atPath: localURL.path, toPath:filenamePath)
-
- do {
- let attr : NSDictionary? = try FileManager.default.attributesOfItem(atPath: filenamePath) as NSDictionary?
-
- if let _attr = attr {
- if _attr.fileSize() > 0 {
-
- filesName.append(fileName)
- }
- }
-
- } catch let error {
- outError = error
+ hud.indicatorView = JGProgressHUDSuccessIndicatorView()
+ hud.textLabel.text = NSLocalizedString("_success_", comment: "")
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
+ self.extensionContext?.completeRequest(returningItems: self.extensionContext?.inputItems, completionHandler: nil)
}
-
- } catch let error {
- outError = error
}
}
-
- if index + 1 == attachments.count {
- completion(filesName, outError)
- }
-}
-task.resume()
-*/
-
-class NCShareExtensionButtonWithIndexPath: UIButton {
- var indexPath: IndexPath?
- var fileName: String?
- var image: UIImage?
}
diff --git a/iOSClient/AppDelegate.swift b/iOSClient/AppDelegate.swift
index 452f63e46..a790747e3 100644
--- a/iOSClient/AppDelegate.swift
+++ b/iOSClient/AppDelegate.swift
@@ -27,7 +27,6 @@ import NCCommunication
import TOPasscodeViewController
import LocalAuthentication
import Firebase
-import IHProgressHUD
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, TOPasscodeViewControllerDelegate, NCAccountRequestDelegate, NCViewCertificateDetailsDelegate, NCUserBaseUrl {
@@ -211,9 +210,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
if account == "" { return }
guard let activeAccount = NCManageDatabase.shared.getActiveAccount() else { return }
- // close HUD
- IHProgressHUD.dismiss()
-
// Account changed ??
if activeAccount.account != account {
settingAccount(activeAccount.account, urlBase: activeAccount.urlBase, user: activeAccount.user, userId: activeAccount.userId, password: CCUtility.getPassword(activeAccount.account))
@@ -890,3 +886,10 @@ extension AppDelegate: NCAudioRecorderViewControllerDelegate {
func didFinishWithoutRecording(_ viewController: NCAudioRecorderViewController, fileName: String) {
}
}
+
+extension AppDelegate: NCCreateFormUploadConflictDelegate {
+ func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) {
+ guard let metadatas = metadatas, !metadatas.isEmpty else { return }
+ networkingProcessUpload?.createProcessUploads(metadatas: metadatas)
+ }
+}
diff --git a/iOSClient/Brand/NCBrand.swift b/iOSClient/Brand/NCBrand.swift
index 08d1d23a6..f393126b4 100755
--- a/iOSClient/Brand/NCBrand.swift
+++ b/iOSClient/Brand/NCBrand.swift
@@ -92,7 +92,6 @@ import UIKit
@objc public var disable_background_color: Bool = true
@objc public var disable_background_image: Bool = true
- @objc public var disable_ff: Bool = true
override init() {
diff --git a/iOSClient/Data/NCDatabase.swift b/iOSClient/Data/NCDatabase.swift
index 2f7ac4789..b5a6ca5eb 100644
--- a/iOSClient/Data/NCDatabase.swift
+++ b/iOSClient/Data/NCDatabase.swift
@@ -526,6 +526,13 @@ class tableVideo: Object {
@objc dynamic var duration: Int64 = 0
@objc dynamic var ocId = ""
@objc dynamic var time: Int64 = 0
+ @objc dynamic var codecNameVideo: String?
+ @objc dynamic var codecNameAudio: String?
+ @objc dynamic var codecAudioChannelLayout: String?
+ @objc dynamic var codecAudioLanguage: String?
+ @objc dynamic var codecSubtitleLanguage: String?
+ @objc dynamic var codecMaxCompatibility: Bool = false
+ @objc dynamic var codecQuality: String?
override static func primaryKey() -> String {
return "ocId"
diff --git a/iOSClient/Data/NCManageDatabase.swift b/iOSClient/Data/NCManageDatabase.swift
index efc5cac1b..858d709bd 100644
--- a/iOSClient/Data/NCManageDatabase.swift
+++ b/iOSClient/Data/NCManageDatabase.swift
@@ -1721,6 +1721,51 @@ class NCManageDatabase: NSObject {
NCCommunicationCommon.shared.writeLog("Could not write to database: \(error)")
}
}
+
+ func addVideoCodec(metadata: tableMetadata, codecNameVideo: String?, codecNameAudio: String?, codecAudioChannelLayout: String?, codecAudioLanguage: String?, codecSubtitleLanguage: String?, codecMaxCompatibility: Bool, codecQuality: String?) {
+
+ let realm = try! Realm()
+
+ do {
+ try realm.safeWrite {
+ if let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first {
+ if let codecNameVideo = codecNameVideo { result.codecNameVideo = codecNameVideo }
+ if let codecNameAudio = codecNameAudio { result.codecNameAudio = codecNameAudio }
+ if let codecAudioChannelLayout = codecAudioChannelLayout { result.codecAudioChannelLayout = codecAudioChannelLayout }
+ if let codecAudioLanguage = codecAudioLanguage { result.codecAudioLanguage = codecAudioLanguage }
+ if let codecSubtitleLanguage = codecSubtitleLanguage { result.codecSubtitleLanguage = codecSubtitleLanguage }
+ result.codecMaxCompatibility = codecMaxCompatibility
+ if let codecQuality = codecQuality { result.codecQuality = codecQuality }
+ realm.add(result, update: .all)
+ } else {
+ let addObject = tableVideo()
+ addObject.account = metadata.account
+ addObject.ocId = metadata.ocId
+ addObject.codecNameVideo = codecNameVideo
+ addObject.codecNameAudio = codecNameAudio
+ addObject.codecAudioChannelLayout = codecAudioChannelLayout
+ addObject.codecAudioLanguage = codecAudioLanguage
+ addObject.codecSubtitleLanguage = codecSubtitleLanguage
+ addObject.codecMaxCompatibility = codecMaxCompatibility
+ addObject.codecQuality = codecQuality
+ realm.add(addObject, update: .all)
+ }
+ }
+ } catch let error {
+ NCCommunicationCommon.shared.writeLog("Could not write to database: \(error)")
+ }
+ }
+
+ func getVideo(metadata: tableMetadata?) -> tableVideo? {
+ guard let metadata = metadata else { return nil }
+
+ let realm = try! Realm()
+ guard let result = realm.objects(tableVideo.self).filter("account == %@ AND ocId == %@", metadata.account, metadata.ocId).first else {
+ return nil
+ }
+
+ return tableVideo.init(value: result)
+ }
func getVideoDurationTime(metadata: tableMetadata?) -> CMTime? {
guard let metadata = metadata else { return nil }
diff --git a/iOSClient/Extensions/UIImage+Extensions.swift b/iOSClient/Extensions/UIImage+Extensions.swift
index 0211ca167..2bc191ed4 100644
--- a/iOSClient/Extensions/UIImage+Extensions.swift
+++ b/iOSClient/Extensions/UIImage+Extensions.swift
@@ -173,4 +173,35 @@ extension UIImage {
UIGraphicsEndImageContext()
return newImage
}
+
+ /// Downsamles a image using ImageIO. Has better memory perfomance than redrawing using UIKit
+ ///
+ /// - [Source](https://swiftsenpai.com/development/reduce-uiimage-memory-footprint/)
+ /// - [Original Source, WWDC18](https://developer.apple.com/videos/play/wwdc2018/416/?time=1352)
+ /// - Parameters:
+ /// - imageURL: The URL path of the image
+ /// - pointSize: The target point size
+ /// - scale: The point to pixel scale (Pixeld per point)
+ /// - Returns: The downsampled image, if successful
+ static func downsample(imageAt imageURL: URL, to pointSize: CGSize, scale: CGFloat = UIScreen.main.scale) -> UIImage? {
+
+ // Create an CGImageSource that represent an image
+ let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary
+ guard let imageSource = CGImageSourceCreateWithURL(imageURL as CFURL, imageSourceOptions) else { return nil }
+
+ // Calculate the desired dimension
+ let maxDimensionInPixels = max(pointSize.width, pointSize.height) * scale
+
+ // Perform downsampling
+ let downsampleOptions = [
+ kCGImageSourceCreateThumbnailFromImageAlways: true,
+ kCGImageSourceShouldCacheImmediately: true,
+ kCGImageSourceCreateThumbnailWithTransform: true,
+ kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels
+ ] as CFDictionary
+ guard let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions) else { return nil }
+
+ // Return the downsampled image as UIImage
+ return UIImage(cgImage: downsampledImage)
+ }
}
diff --git a/iOSClient/Main/Create cloud/NCCreateFormUploadAssets.swift b/iOSClient/Main/Create cloud/NCCreateFormUploadAssets.swift
index 287f3fcfc..686abeefa 100644
--- a/iOSClient/Main/Create cloud/NCCreateFormUploadAssets.swift
+++ b/iOSClient/Main/Create cloud/NCCreateFormUploadAssets.swift
@@ -463,6 +463,7 @@ class NCCreateFormUploadAssets: XLFormViewController, NCSelectDelegate {
conflict.metadatasNOConflict = metadatasNOConflict
conflict.metadatasMOV = metadatasMOV
conflict.metadatasUploadInConflict = metadatasUploadInConflict
+ conflict.delegate = self.appDelegate
self.appDelegate.window?.rootViewController?.present(conflict, animated: true, completion: nil)
}
diff --git a/iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift b/iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift
index b354b3b80..0816812c5 100644
--- a/iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift
+++ b/iOSClient/Main/Create cloud/NCCreateFormUploadConflict.swift
@@ -58,7 +58,6 @@ extension NCCreateFormUploadConflictDelegate {
@objc var alwaysNewFileNameNumber: Bool = false
@objc var textLabelDetailNewFile: String?
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
var metadatasConflictNewFiles: [String] = []
var metadatasConflictAlreadyExistingFiles: [String] = []
var fileNamesPath: [String: String] = [:]
@@ -179,7 +178,9 @@ extension NCCreateFormUploadConflictDelegate {
}))
conflictAlert.addAction(UIAlertAction(title: NSLocalizedString("_cancel_keep_existing_action_title_", comment: ""), style: .cancel, handler: { _ in
- self.dismiss(animated: true, completion: nil)
+ self.dismiss(animated: true) {
+ self.delegate?.dismissCreateFormUploadConflict(metadatas: nil)
+ }
}))
conflictAlert.addAction(UIAlertAction(title: NSLocalizedString("_more_action_title_", comment: ""), style: .default, handler: { _ in
@@ -237,9 +238,9 @@ extension NCCreateFormUploadConflictDelegate {
}
@IBAction func buttonCancelTouch(_ sender: Any) {
-
- delegate?.dismissCreateFormUploadConflict(metadatas: nil)
- dismiss(animated: true)
+ dismiss(animated: true) {
+ self.delegate?.dismissCreateFormUploadConflict(metadatas: nil)
+ }
}
@IBAction func buttonContinueTouch(_ sender: Any) {
@@ -305,19 +306,15 @@ extension NCCreateFormUploadConflictDelegate {
}
} else {
- print("error")
+ // used UIAlert (replace all)
}
}
metadatasNOConflict.append(contentsOf: metadatasMOV)
- if delegate != nil {
- delegate?.dismissCreateFormUploadConflict(metadatas: metadatasNOConflict)
- } else {
- appDelegate.networkingProcessUpload?.createProcessUploads(metadatas: metadatasNOConflict)
+ dismiss(animated: true) {
+ self.delegate?.dismissCreateFormUploadConflict(metadatas: self.metadatasNOConflict)
}
-
- dismiss(animated: true)
}
}
@@ -458,8 +455,8 @@ extension NCCreateFormUploadConflict: UITableViewDataSource {
do {
if metadataNewFile.classFile == NCCommunicationCommon.typeClassFile.image.rawValue {
- let data = try Data(contentsOf: URL(fileURLWithPath: filePathNewFile))
- if let image = UIImage(data: data) {
+ // preserver memory especially for very large files in Share extension
+ if let image = UIImage.downsample(imageAt: URL(fileURLWithPath: filePathNewFile), to: cell.imageNewFile.frame.size) {
cell.imageNewFile.image = image
}
}
diff --git a/iOSClient/Main/NCFunctionCenter.swift b/iOSClient/Main/NCFunctionCenter.swift
index 5ec47ed59..fca6d01f8 100644
--- a/iOSClient/Main/NCFunctionCenter.swift
+++ b/iOSClient/Main/NCFunctionCenter.swift
@@ -24,7 +24,7 @@
import UIKit
import NCCommunication
import Queuer
-import IHProgressHUD
+import JGProgressHUD
@objc class NCFunctionCenter: NSObject, UIDocumentInteractionControllerDelegate, NCSelectDelegate {
@objc public static let shared: NCFunctionCenter = {
@@ -361,26 +361,38 @@ import IHProgressHUD
let fileNameImage = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!)
let fileNameMov = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadataMov.ocId, fileNameView: metadataMov.fileNameView)!)
-
- IHProgressHUD.set(defaultMaskType: .clear)
- IHProgressHUD.set(minimumDismiss: 2)
-
+ let hud = JGProgressHUD()
+
+ hud.indicatorView = JGProgressHUDRingIndicatorView()
+ if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView {
+ indicatorView.ringWidth = 1.5
+ }
+ hud.show(in: (appDelegate.window?.rootViewController?.view)!)
+ hud.textLabel.text = NSLocalizedString("_saving_", comment: "")
+
NCLivePhoto.generate(from: fileNameImage, videoURL: fileNameMov, progress: { progress in
-
- IHProgressHUD.show(progress: CGFloat(progress))
+
+ hud.progress = Float(progress)
}, completion: { _, resources in
if resources != nil {
NCLivePhoto.saveToLibrary(resources!) { result in
- if !result {
- IHProgressHUD.showError(withStatus: NSLocalizedString("_livephoto_save_error_", comment: ""))
- } else {
- IHProgressHUD.showSuccesswithStatus(NSLocalizedString("_success_", comment: ""))
+ DispatchQueue.main.async {
+ if !result {
+ hud.indicatorView = JGProgressHUDErrorIndicatorView()
+ hud.textLabel.text = NSLocalizedString("_livephoto_save_error_", comment: "")
+ } else {
+ hud.indicatorView = JGProgressHUDSuccessIndicatorView()
+ hud.textLabel.text = NSLocalizedString("_success_", comment: "")
+ }
+ hud.dismiss(afterDelay: 1)
}
}
} else {
- IHProgressHUD.showError(withStatus: NSLocalizedString("_livephoto_save_error_", comment: ""))
+ hud.indicatorView = JGProgressHUDErrorIndicatorView()
+ hud.textLabel.text = NSLocalizedString("_livephoto_save_error_", comment: "")
+ hud.dismiss(afterDelay: 1)
}
})
}
@@ -457,25 +469,31 @@ import IHProgressHUD
let ocIdUpload = UUID().uuidString
let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(ocIdUpload, fileNameView: fileName)!
try data.write(to: URL(fileURLWithPath: fileNameLocalPath))
-
- IHProgressHUD.set(defaultMaskType: .clear)
- IHProgressHUD.set(minimumDismiss: 2)
+ let hud = JGProgressHUD()
+
+ hud.indicatorView = JGProgressHUDRingIndicatorView()
+ if let indicatorView = hud.indicatorView as? JGProgressHUDRingIndicatorView {
+ indicatorView.ringWidth = 1.5
+ }
+ hud.show(in: (appDelegate.window?.rootViewController?.view)!)
+ hud.textLabel.text = fileName
NCCommunication.shared.upload(serverUrlFileName: serverUrlFileName, fileNameLocalPath: fileNameLocalPath) { _ in
} progressHandler: { progress in
-
- IHProgressHUD.show(progress: CGFloat(progress.fractionCompleted), status: fileName)
-
+ hud.progress = Float(progress.fractionCompleted)
} completionHandler: { account, ocId, etag, _, _, _, errorCode, errorDescription in
if errorCode == 0 && etag != nil && ocId != nil {
let toPath = CCUtility.getDirectoryProviderStorageOcId(ocId!, fileNameView: fileName)!
NCUtilityFileSystem.shared.moveFile(atPath: fileNameLocalPath, toPath: toPath)
NCManageDatabase.shared.addLocalFile(account: account, etag: etag!, ocId: ocId!, fileName: fileName)
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSourceNetworkForced, userInfo: ["serverUrl": serverUrl])
- IHProgressHUD.showSuccesswithStatus(NSLocalizedString("_success_", comment: ""))
+ hud.indicatorView = JGProgressHUDSuccessIndicatorView()
+ hud.textLabel.text = NSLocalizedString("_success_", comment: "")
} else {
- IHProgressHUD.showError(withStatus: NSLocalizedString(errorDescription, comment: ""))
+ hud.indicatorView = JGProgressHUDErrorIndicatorView()
+ hud.textLabel.text = NSLocalizedString(errorDescription, comment: "")
}
+ hud.dismiss(afterDelay: 1)
}
} catch {
return false
diff --git a/iOSClient/Main/NCPickerViewController.swift b/iOSClient/Main/NCPickerViewController.swift
index e005aa5ec..a4fddfa01 100644
--- a/iOSClient/Main/NCPickerViewController.swift
+++ b/iOSClient/Main/NCPickerViewController.swift
@@ -160,7 +160,7 @@ class NCDocumentPickerViewController: NSObject, UIDocumentPickerDelegate {
if NCManageDatabase.shared.getMetadataConflict(account: appDelegate.account, serverUrl: serverUrl, fileName: fileName) != nil {
if let conflict = UIStoryboard(name: "NCCreateFormUploadConflict", bundle: nil).instantiateInitialViewController() as? NCCreateFormUploadConflict {
-
+ conflict.delegate = appDelegate
conflict.serverUrl = serverUrl
conflict.metadatasUploadInConflict = [metadataForUpload]
diff --git a/iOSClient/Menu/NCViewer+Menu.swift b/iOSClient/Menu/NCViewer+Menu.swift
index 8f87ec463..6a23fb6d9 100644
--- a/iOSClient/Menu/NCViewer+Menu.swift
+++ b/iOSClient/Menu/NCViewer+Menu.swift
@@ -133,7 +133,27 @@ extension NCViewer {
)
)
}
-
+
+ //
+ // CONVERSION VIDEO TO MPEG4 (MFFF Lib)
+ //
+ #if MFFFLIB
+ if metadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue {
+
+ actions.append(
+ NCMenuAction(
+ title: NSLocalizedString("_video_conversion_", comment: ""),
+ icon: NCUtility.shared.loadImage(named: "film"),
+ action: { menuAction in
+ if let ncplayer = (viewController as? NCViewerMediaPage)?.currentViewController.ncplayer {
+ ncplayer.convertVideo()
+ }
+ }
+ )
+ )
+ }
+ #endif
+
//
// SAVE IMAGE / VIDEO
//
diff --git a/iOSClient/NCGlobal.swift b/iOSClient/NCGlobal.swift
index 3c3a1b274..0decbce5f 100644
--- a/iOSClient/NCGlobal.swift
+++ b/iOSClient/NCGlobal.swift
@@ -112,7 +112,7 @@ class NCGlobal: NSObject {
// Database Realm
//
let databaseDefault = "nextcloud.realm"
- let databaseSchemaVersion: UInt64 = 213
+ let databaseSchemaVersion: UInt64 = 215
// Intro selector
//
@@ -279,6 +279,7 @@ class NCGlobal: NSObject {
let selectorUploadAutoUpload = "uploadAutoUpload"
let selectorUploadAutoUploadAll = "uploadAutoUploadAll"
let selectorUploadFile = "uploadFile"
+ let selectorUploadFileShareExtension = "uploadFileShareExtension"
let selectorSaveAlbum = "saveAlbum"
let selectorSaveBackground = "saveBackground"
let selectorSaveAlbumLivePhotoIMG = "saveAlbumLivePhotoIMG"
diff --git a/iOSClient/Networking/NCNetworking.swift b/iOSClient/Networking/NCNetworking.swift
index 35a8356be..4ffd96360 100644
--- a/iOSClient/Networking/NCNetworking.swift
+++ b/iOSClient/Networking/NCNetworking.swift
@@ -411,12 +411,46 @@ import Queuer
// MARK: - Upload
@objc func upload(metadata: tableMetadata, start: @escaping () -> Void, completion: @escaping (_ errorCode: Int, _ errorDescription: String) -> Void) {
-
- var metadata = tableMetadata.init(value: metadata)
- var fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
+
+ func uploadMetadata(_ metadata: tableMetadata) {
+
+ NCManageDatabase.shared.addMetadata(metadata)
+ let metadata = tableMetadata.init(value: metadata)
+
+ if metadata.e2eEncrypted {
+#if !EXTENSION_FILE_PROVIDER_EXTENSION
+ NCNetworkingE2EE.shared.upload(metadata: metadata, start: start) { errorCode, errorDescription in
+ DispatchQueue.main.async {
+ completion(errorCode, errorDescription)
+ }
+ }
+#endif
+ } else if metadata.chunk {
+ uploadChunkedFile(metadata: metadata, start: start) { errorCode, errorDescription in
+ DispatchQueue.main.async {
+ completion(errorCode, errorDescription)
+ }
+ }
+ } else if metadata.session == NCCommunicationCommon.shared.sessionIdentifierUpload {
+ uploadFile(metadata: metadata, start: start) { errorCode, errorDescription in
+ DispatchQueue.main.async {
+ completion(errorCode, errorDescription)
+ }
+ }
+ } else {
+ uploadFileInBackground(metadata: metadata, start: start) { errorCode, errorDescription in
+ DispatchQueue.main.async {
+ completion(errorCode, errorDescription)
+ }
+ }
+ }
+ }
+
+ let metadata = tableMetadata.init(value: metadata)
if CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+ let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
let results = NCCommunicationCommon.shared.getInternalType(fileName: metadata.fileNameView, mimeType: metadata.contentType, directory: false)
metadata.contentType = results.mimeType
metadata.iconName = results.iconName
@@ -429,47 +463,21 @@ import Queuer
}
metadata.size = NCUtilityFileSystem.shared.getFileSize(filePath: fileNameLocalPath)
- NCManageDatabase.shared.addMetadata(metadata)
- metadata = tableMetadata.init(value: metadata)
-
- if metadata.e2eEncrypted {
-#if !EXTENSION_FILE_PROVIDER_EXTENSION
- NCNetworkingE2EE.shared.upload(metadata: tableMetadata.init(value: metadata), start: { start() }, completion: completion)
-#endif
- } else if metadata.chunk {
- uploadChunkedFile(metadata: metadata, start: { start() }, completion: completion)
- } else if metadata.session == NCCommunicationCommon.shared.sessionIdentifierUpload {
- uploadFile(metadata: metadata, start: { start() }, completion: completion)
- } else {
- uploadFileInBackground(metadata: metadata, start: { start() }, completion: completion)
- }
+ uploadMetadata(metadata)
} else {
CCUtility.extractImageVideoFromAssetLocalIdentifier(forUpload: metadata, notification: true) { extractMetadata, fileNamePath in
- guard let extractMetadata = extractMetadata else {
+ guard let metadata = extractMetadata else {
NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
return completion(NCGlobal.shared.errorInternalError, "Internal error")
}
- let metadata = tableMetadata.init(value: extractMetadata)
- fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(extractMetadata.ocId, fileNameView: extractMetadata.fileNameView)
+ let fileNameLocalPath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
NCUtilityFileSystem.shared.moveFileInBackground(atPath: fileNamePath!, toPath: fileNameLocalPath)
- NCManageDatabase.shared.addMetadata(extractMetadata)
-
- if metadata.e2eEncrypted {
- #if !EXTENSION_FILE_PROVIDER_EXTENSION
- NCNetworkingE2EE.shared.upload(metadata: extractMetadata, start: { start() }, completion: completion)
- #endif
- } else if metadata.chunk {
- self.uploadChunkedFile(metadata: metadata, start: { start() }, completion: completion)
- } else if metadata.session == NCCommunicationCommon.shared.sessionIdentifierUpload {
- self.uploadFile(metadata: metadata, start: { start() }, completion: completion)
- } else {
- self.uploadFileInBackground(metadata: metadata, start: { start() }, completion: completion)
- }
+ uploadMetadata(metadata)
}
}
}
diff --git a/iOSClient/Networking/NCNetworkingE2EE.swift b/iOSClient/Networking/NCNetworkingE2EE.swift
index ae1789216..0d738164c 100644
--- a/iOSClient/Networking/NCNetworkingE2EE.swift
+++ b/iOSClient/Networking/NCNetworkingE2EE.swift
@@ -86,7 +86,7 @@ import Alamofire
object.serverUrl = serverUrl
object.version = 1
- _ = NCManageDatabase.shared.addE2eEncryption(object)
+ NCManageDatabase.shared.addE2eEncryption(object)
self.sendE2EMetadata(account: account, serverUrl: serverUrl, fileNameRename: nil, fileNameNewRename: nil, deleteE2eEncryption: nil, urlBase: urlBase) { e2eToken, errorCode, errorDescription in
// unlock
diff --git a/iOSClient/Networking/NCNetworkingProcessUpload.swift b/iOSClient/Networking/NCNetworkingProcessUpload.swift
index 018295a4a..5b7bb01e5 100644
--- a/iOSClient/Networking/NCNetworkingProcessUpload.swift
+++ b/iOSClient/Networking/NCNetworkingProcessUpload.swift
@@ -242,6 +242,15 @@ class NCNetworkingProcessUpload: NSObject {
var session: URLSession?
+ // remove leaning upload share extension
+ let metadatasUploadShareExtension = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "session == %@ AND sessionSelector == %@", NCCommunicationCommon.shared.sessionIdentifierUpload, NCGlobal.shared.selectorUploadFileShareExtension))
+ for metadata in metadatasUploadShareExtension {
+ let path = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId)!
+ NCManageDatabase.shared.deleteMetadata(predicate: NSPredicate(format: "ocId == %@", metadata.ocId))
+ NCManageDatabase.shared.deleteChunks(account: metadata.account, ocId: metadata.ocId)
+ NCUtilityFileSystem.shared.deleteFile(filePath: path)
+ }
+
// verify metadataStatusInUpload (BACKGROUND)
let metadatasInUploadBackground = NCManageDatabase.shared.getMetadatas(
predicate: NSPredicate(
diff --git a/iOSClient/Rename file/NCRenameFile.swift b/iOSClient/Rename file/NCRenameFile.swift
index 017c15d3c..c96085ef0 100644
--- a/iOSClient/Rename file/NCRenameFile.swift
+++ b/iOSClient/Rename file/NCRenameFile.swift
@@ -219,8 +219,9 @@ class NCRenameFile: UIViewController, UITextFieldDelegate {
}
fileNameNew = (fileNameWithoutExt.text ?? "") + "." + (ext.text ?? "")
- self.delegate?.rename(fileName: fileName, fileNameNew: fileNameNew)
- self.dismiss(animated: true)
+ self.dismiss(animated: true) {
+ self.delegate?.rename(fileName: fileName, fileNameNew: fileNameNew)
+ }
}
}
diff --git a/iOSClient/Security/NCEndToEndEncryption.m b/iOSClient/Security/NCEndToEndEncryption.m
index f3252ace8..8ff38430f 100644
--- a/iOSClient/Security/NCEndToEndEncryption.m
+++ b/iOSClient/Security/NCEndToEndEncryption.m
@@ -78,16 +78,21 @@
{
OPENSSL_init();
+ int ret;
EVP_PKEY * pkey;
pkey = EVP_PKEY_new();
-
RSA * rsa;
- rsa = RSA_generate_key(
- 2048, /* number of bits for the key - 2048 is a sensible value */
- RSA_F4, /* exponent - RSA_F4 is defined as 0x10001L */
- NULL, /* callback - can be NULL if we aren't displaying progress */
- NULL /* callback argument - not needed in this case */
- );
+ BIGNUM *bignum = BN_new();
+ ret = BN_set_word(bignum, RSA_F4);
+ if (ret != 1) {
+ return NO;
+ }
+
+ rsa = RSA_new();
+ ret = RSA_generate_key_ex(rsa, 2048, bignum, NULL);
+ if (ret != 1) {
+ return NO;
+ }
EVP_PKEY_assign_RSA(pkey, rsa);
@@ -581,7 +586,6 @@
- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey
{
- ENGINE *eng = ENGINE_get_default_RSA();
EVP_PKEY *key = NULL;
int status = 0;
@@ -616,7 +620,7 @@
return nil;
}
- EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, eng);
+ EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, NULL);
if (!ctx)
return nil;
@@ -658,7 +662,6 @@
- (NSString *)decryptAsymmetricData:(NSData *)cipherData privateKey:(NSString *)privateKey
{
unsigned char *pKey = (unsigned char *)[privateKey UTF8String];
- ENGINE *eng = ENGINE_get_default_RSA();
int status = 0;
BIO *bio = BIO_new_mem_buf(pKey, -1);
@@ -669,7 +672,7 @@
if (!key)
return nil;
- EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, eng);
+ EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, NULL);
if (!ctx)
return nil;
diff --git a/iOSClient/Settings/Acknowledgements.rtf b/iOSClient/Settings/Acknowledgements.rtf
index c2f32cf70..57bd9041d 100644
--- a/iOSClient/Settings/Acknowledgements.rtf
+++ b/iOSClient/Settings/Acknowledgements.rtf
@@ -1,8 +1,8 @@
-{\rtf1\ansi\ansicpg1252\cocoartf2580
+{\rtf1\ansi\ansicpg1252\cocoartf2636
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
-\paperw12240\paperh15840\margl1440\margr1440\vieww34680\viewh19260\viewkind0
+\margl1440\margr1440\vieww34680\viewh19260\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
\f0\fs24 \cf0 \
@@ -199,11 +199,11 @@ Copyright (c) Tim Oliver\
____________________________________________\
\
-\f1\b IHProgressHUD
+\f1\b JGProgressHUD
\f0\b0 \
\
MIT License\
\
-Copyright (c) Md Ibrahim Hassan\
+Copyright (c) Jonas Gessner\
____________________________________________\
} \ No newline at end of file
diff --git a/iOSClient/Settings/CCAdvanced.h b/iOSClient/Settings/CCAdvanced.h
index 1c22e8fb2..7f9845888 100755
--- a/iOSClient/Settings/CCAdvanced.h
+++ b/iOSClient/Settings/CCAdvanced.h
@@ -22,7 +22,7 @@
//
#import <MessageUI/MFMailComposeViewController.h>
-#import <XLForm/XLForm.h>
+#import <XLForm.h>
@interface CCAdvanced : XLFormViewController <MFMailComposeViewControllerDelegate>
diff --git a/iOSClient/Settings/CCManageAccount.h b/iOSClient/Settings/CCManageAccount.h
index 6eea2af27..48a072c44 100644
--- a/iOSClient/Settings/CCManageAccount.h
+++ b/iOSClient/Settings/CCManageAccount.h
@@ -21,7 +21,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#import <XLForm/XLForm.h>
+#import <XLForm.h>
@interface CCManageAccount : XLFormViewController
diff --git a/iOSClient/Settings/CCManageAutoUpload.h b/iOSClient/Settings/CCManageAutoUpload.h
index 168b7f883..1e6b701cf 100644
--- a/iOSClient/Settings/CCManageAutoUpload.h
+++ b/iOSClient/Settings/CCManageAutoUpload.h
@@ -21,7 +21,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#import <XLForm/XLForm.h>
+#import <XLForm.h>
@interface CCManageAutoUpload : XLFormViewController
diff --git a/iOSClient/Settings/NCManageEndToEndEncryption.h b/iOSClient/Settings/NCManageEndToEndEncryption.h
index a35a3208d..41add2021 100644
--- a/iOSClient/Settings/NCManageEndToEndEncryption.h
+++ b/iOSClient/Settings/NCManageEndToEndEncryption.h
@@ -21,7 +21,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#import <XLForm/XLForm.h>
+#import <XLForm.h>
@class NCEndToEndInitialize;
diff --git a/iOSClient/Settings/NCSettings.h b/iOSClient/Settings/NCSettings.h
index 05ebabe0c..e06a29f1a 100644
--- a/iOSClient/Settings/NCSettings.h
+++ b/iOSClient/Settings/NCSettings.h
@@ -23,7 +23,7 @@
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
-#import <XLForm/XLForm.h>
+#import <XLForm.h>
#import "CCUtility.h"
@interface NCSettings : XLFormViewController
diff --git a/iOSClient/Supporting Files/af.lproj/Localizable.strings b/iOSClient/Supporting Files/af.lproj/Localizable.strings
index 3efb91c30..21e263093 100644
--- a/iOSClient/Supporting Files/af.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/af.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ar.lproj/Localizable.strings b/iOSClient/Supporting Files/ar.lproj/Localizable.strings
index 47d88f81e..df9a3d9d9 100644
--- a/iOSClient/Supporting Files/ar.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ar.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ast.lproj/Localizable.strings b/iOSClient/Supporting Files/ast.lproj/Localizable.strings
index 976711c3f..69b463bb3 100644
--- a/iOSClient/Supporting Files/ast.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ast.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/az.lproj/Localizable.strings b/iOSClient/Supporting Files/az.lproj/Localizable.strings
index 49c6f8050..7468c2f81 100644
--- a/iOSClient/Supporting Files/az.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/az.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings b/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings
index bc062b616..5098e4369 100644
--- a/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/bn_BD.lproj/Localizable.strings b/iOSClient/Supporting Files/bn_BD.lproj/Localizable.strings
index c3a5ad2d8..66318496e 100644
--- a/iOSClient/Supporting Files/bn_BD.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/bn_BD.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/br.lproj/Localizable.strings b/iOSClient/Supporting Files/br.lproj/Localizable.strings
index 516956454..4c277bd66 100644
--- a/iOSClient/Supporting Files/br.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/br.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/bs.lproj/Localizable.strings b/iOSClient/Supporting Files/bs.lproj/Localizable.strings
index b2d172074..0b70741f9 100644
--- a/iOSClient/Supporting Files/bs.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/bs.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ca.lproj/Localizable.strings b/iOSClient/Supporting Files/ca.lproj/Localizable.strings
index 1f2cdd384..7f8aea723 100644
--- a/iOSClient/Supporting Files/ca.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ca.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/cs-CZ.lproj/Localizable.strings b/iOSClient/Supporting Files/cs-CZ.lproj/Localizable.strings
index 42ae9e102..dbd35be77 100644
--- a/iOSClient/Supporting Files/cs-CZ.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/cs-CZ.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings b/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings
index 66fc24ba2..cb306e884 100644
--- a/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/da.lproj/Localizable.strings b/iOSClient/Supporting Files/da.lproj/Localizable.strings
index 6b20c7433..ed9f65cb9 100644
--- a/iOSClient/Supporting Files/da.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/da.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/de.lproj/Localizable.strings b/iOSClient/Supporting Files/de.lproj/Localizable.strings
index 0eb8af558..f14fb07d8 100644
--- a/iOSClient/Supporting Files/de.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/de.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/el.lproj/Localizable.strings b/iOSClient/Supporting Files/el.lproj/Localizable.strings
index 1e7228d0e..b75187879 100644
--- a/iOSClient/Supporting Files/el.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/el.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings b/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings
index 2a35fa58e..104bf8157 100644
--- a/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/en.lproj/Localizable.strings b/iOSClient/Supporting Files/en.lproj/Localizable.strings
index 43a3941f8..e08d82840 100644
--- a/iOSClient/Supporting Files/en.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/en.lproj/Localizable.strings
@@ -25,7 +25,7 @@
"_accessibility_add_upload_" = "Add and upload";
"_download_file_" = "Download file";
"_loading_" = "Loading";
-"_loading_with_points_" = "Loading…";
+"_loading_with_points_" = "Loading …";
"_loading_num_" = "Loading file %i";
"_loading_autoupload_" = "Auto uploading";
"_uploading_" = "Uploading";
@@ -71,7 +71,7 @@
"_save_exit_" = "Do you want to exit without saving?";
"_video_" = "Video";
"_overwrite_" = "Overwrite";
-"_transfers_in_queue_" = "Tranfers in progress, please wait…";
+"_transfers_in_queue_" = "Transfers in progress, please wait …";
"_too_errors_upload_" = "Too many errors, please verify the problem";
"_create_folder_" = "Create folder";
"_create_folder_on_" = "Create folder on";
@@ -115,7 +115,7 @@
"_dark_mode_detect_" = "Detect iOS dark mode";
"_screen_" = "Screen";
"_wipe_account_" = "Account wiped from server";
-"_appconfig_view_title_" = "Account configuration in progress…";
+"_appconfig_view_title_" = "Account configuration in progress …";
"_no_permission_add_file_" = "You don't have permission to add files";
"_no_permission_delete_file_" = "You don't have permission to delete files";
"_no_permission_modify_file_" = "You don't have permission to modify files";
@@ -143,6 +143,11 @@
"_recent_" = "Recent";
"_view_in_folder_" = "View in folder";
"_leave_share_" = "Leave this share";
+
+/* Remove a file from a list, don't delete it entirely */
+"_remove_file_" = "Remove file";
+
+/* Delete file and put it into the trash */
"_delete_file_" = "Delete file";
"_delete_folder_" = "Delete folder";
"_delete_photo_" = "Delete photo";
@@ -298,7 +303,7 @@
"_want_delete_" = "Do you really want to delete?";
"_no_delete_" = "No, do not delete";
"_yes_delete_" = "Yes, delete";
-"_remove_cache_" = "Please wait, deleting cache…";
+"_remove_cache_" = "Deleting cache, please wait …";
"_optimizations_" = "Optimizations";
"_synchronizations_" = "Synchronized folders";
"_version_server_" = "Server version";
@@ -386,7 +391,7 @@
"_connection_error_" = "Connection error";
"_serverstatus_error_" = "Connection to server failure, verify your server address or network status";
"_add_your_nextcloud_" = "Add your Nextcloud account";
-"_login_url_" = "Server address https://…";
+"_login_url_" = "Server address https:// …";
"_login_bottom_label_" = "Don't have a server yet?\nChoose one of the providers.";
"_error_multidomain_" = "Address not allowed, only the following domains are valid:";
"_account_already_exists_" = "The account %@ already exists";
@@ -417,7 +422,7 @@
"_access_photo_location_not_enabled_" = "Access to Photos and Location not enabled";
"_access_photo_location_not_enabled_msg_" = "Please go to \"Settings\" and turn on \"Photo Access\" and \"Location Services\"";
"_tutorial_photo_view_" = "No photos or videos uploaded yet";
-"_create_full_upload_" = "Creating archive… May take a long time. During this process, keep the application active during the transfer as well.";
+"_create_full_upload_" = "Creating archive … May take a long time. During this process, keep the application active during the transfer as well.";
"_error_createsubfolders_upload_" = "Error creating subfolders";
"_activate_autoupload_" = "Enable auto upload";
"_remove_photo_CameraRoll_" = "Remove from camera roll";
@@ -433,13 +438,13 @@
"_over_30_days_" = "over 30 days";
"_connection_internet_offline_" = "The internet connection appears to be offline or Wi-Fi is required";
"_insert_password_" = "Enter password";
-"_update_in_progress_" = "Version upgrade, please wait…";
+"_update_in_progress_" = "Version upgrade, please wait …";
"_forbidden_characters_" = "The file or folder name contains invalid characters";
"_cannot_send_mail_error_" = "No account set up, or wrong email address entered";
"_open_url_error_" = "Cannot open the URL for this action";
"_photo_camera_" = "Photos";
"_media_" = "Media";
-"_unzip_in_progress_" = "Extraction in progress on local storage…";
+"_unzip_in_progress_" = "Extraction in progress on local storage …";
"_file_unpacked_" = "File unpacked on local storage";
"_file_saved_local_" = "File saved on local storage.";
"_file_not_present_" = "Error: File not present, please reload.";
@@ -473,8 +478,8 @@
"_protect_passcode_" = "Protect with password";
"_share_" = "Share";
"_reload_" = "Reload";
-"_open_in_" = "Open in…";
-"_open_" = "Open…";
+"_open_in_" = "Open in …";
+"_open_" = "Open …";
"_remove_local_file_" = "Remove from cache";
"_add_local_" = "Add to local storage";
"_comm_erro_pull_down_" = "Attention: Communication error with the server. Pull down to refresh.";
@@ -485,7 +490,7 @@
"_files_" = "files";
"_file_" = "file";
"_folder_blocked_" = "Folder blocked";
-"_downloading_progress_" = "Initiating download of files…";
+"_downloading_progress_" = "Initiating download of files …";
"_no_file_pull_down_" = "Upload a file or pull down to refresh";
"_browse_images_" = "Browse images";
"_synchronized_folder_" = "Keep the folder synchronized";
@@ -515,11 +520,11 @@
"_directory_on_top_no_" = "Folders on top";
"_folder_automatic_upload_" = "Folder for \"Auto upload\"";
"_search_no_record_found_" = "No result";
-"_search_in_progress_" = "Search in progress…";
+"_search_in_progress_" = "Search in progress …";
"_search_instruction_" = "Search for file (minimum 2 characters)";
"_files_no_files_" = "No files in here";
"_files_no_folders_" = "No folders in here";
-"_request_in_progress_" = "Request to server in progress…";
+"_request_in_progress_" = "Request to server in progress …";
"audio" = "AUDIO";
"compress" = "COMPRESS";
@@ -558,7 +563,7 @@
"_password_pdf_error_" = "Wrong password";
"_error_download_photobrowser_" = "Error: Unable to download photo";
"_share_link_" = "Share link";
-"_share_link_button_" = "Send link to…";
+"_share_link_button_" = "Send link to …";
"_Link_name_" = "Link name";
"_password_" = "Password";
"_share_password_" = "Password protected link";
@@ -568,12 +573,12 @@
"_add_sharee_" = "Add users or groups";
"_add_sharee_footer_" = "You can share this resource by adding users or groups. To remove a share, remove all users and groups";
"_find_sharee_title_" = "Search";
-"_find_sharee_" = "Search for user or group…";
+"_find_sharee_" = "Search for user or group …";
"_find_sharee_footer_" = "Enter part of the name of the user or group to search for (at least 2 characters) followed by \"Return\", select the users that should be allowed to access the share followed by \"Done\" to confirm";
"_user_is_group_" = "(Group)";
"_direct_sharee_title_" = "Share";
"_direct_sharee_footer_" = "If you already know the name, enter it, then select the share type and press \"Done\" to confirm";
-"_direct_sharee_" = "Enter the username…";
+"_direct_sharee_" = "Enter the username …";
"_user_sharee_footer_" = "Tap to change permissions";
"_share_type_title_" = "Type of share";
"_share_type_user_" = "User";
@@ -583,7 +588,7 @@
"_password_obligatory_" = "Enforce password protection enabled, password obligatory";
"_shared_with_you_by_" = "Shared with you by";
"_shareLinksearch_placeholder_" = "Type a name and press Enter";
-"_new_comment_" = "New comment…";
+"_new_comment_" = "New comment …";
"_edit_comment_" = "Edit comment";
"_delete_comment_" = "Delete comment";
"_share_allow_editing_" = "Allow editing";
@@ -763,6 +768,7 @@
"_request_entity_too_large_" = "The file is too large";
"_not_possible_download_" = "It is not possible to download the file";
"_not_possible_upload_" = "It is not possible to upload the file";
+"_error_files_upload_" = "Error uploading files";
"_method_not_allowed_" = "The requested method is not supported";
"_invalid_url_" = "Invalid server URL";
"_invalid_literal_" = "Invalid search string";
@@ -822,4 +828,16 @@
"_copy_path_" = "Copy path";
"_certificates_" = "Certificates";
"_privacy_screen_" = "Splash screen when app inactive";
-
+"_saving_" = "Saving …";
+// Video
+"_video_processing_" = "Video processing";
+"_video_being_processed_" = "Video being processed …";
+"_downloading_" = "Downloading";
+"_download_error_" = "Download error";
+"_subtitle_" = "Subtitle";
+"_dts_to_ac3_" = "The DTS is not supported, it requires a conversion to Dolby Digital";
+"_reuired_conversion_" = "This video takes a long time to convert.";
+"_stay_app_foreground_" = "Keep the app in the foreground …";
+"_conversion_available_" = "The conversion is always available on menu";
+"_video_format_not_recognized_" = "This video needs to be processed to be played, do you want to do it now?";
+"_conversion_max_compatibility_" = "Max compatibility, the conversion can take much longer";
diff --git a/iOSClient/Supporting Files/eo.lproj/Localizable.strings b/iOSClient/Supporting Files/eo.lproj/Localizable.strings
index 6ef9c3dcd..a37cd5521 100644
--- a/iOSClient/Supporting Files/eo.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/eo.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-419.lproj/Localizable.strings b/iOSClient/Supporting Files/es-419.lproj/Localizable.strings
index 292250b74..87e431b7d 100644
--- a/iOSClient/Supporting Files/es-419.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-419.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-AR.lproj/Localizable.strings b/iOSClient/Supporting Files/es-AR.lproj/Localizable.strings
index bd6992ffc..f5a0f7e59 100644
--- a/iOSClient/Supporting Files/es-AR.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-AR.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-CL.lproj/Localizable.strings b/iOSClient/Supporting Files/es-CL.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-CL.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-CL.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-CO.lproj/Localizable.strings b/iOSClient/Supporting Files/es-CO.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-CO.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-CO.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-CR.lproj/Localizable.strings b/iOSClient/Supporting Files/es-CR.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-CR.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-CR.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings b/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings b/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings
index e7f49175f..51311efc0 100644
--- a/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings b/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-HN.lproj/Localizable.strings b/iOSClient/Supporting Files/es-HN.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-HN.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-HN.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings b/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings
index e59a07f1a..5af7133a6 100644
--- a/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-NI.lproj/Localizable.strings b/iOSClient/Supporting Files/es-NI.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-NI.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-NI.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-PE.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PE.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-PE.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-PE.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-PR.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PR.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-PR.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-PR.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings
index b0d7b02ea..9db190576 100644
--- a/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings b/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings
index 9755b0a9f..1d765f7b9 100644
--- a/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es-UY.lproj/Localizable.strings b/iOSClient/Supporting Files/es-UY.lproj/Localizable.strings
index 96ae36764..63e8fc6b6 100644
--- a/iOSClient/Supporting Files/es-UY.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es-UY.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/es.lproj/Localizable.strings b/iOSClient/Supporting Files/es.lproj/Localizable.strings
index 067cf5a49..a66685a43 100644
--- a/iOSClient/Supporting Files/es.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/es.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings b/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings
index 3c5ca9b97..a75c94f67 100644
--- a/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/eu.lproj/Localizable.strings b/iOSClient/Supporting Files/eu.lproj/Localizable.strings
index 0ad96afa1..2b341dbe9 100644
--- a/iOSClient/Supporting Files/eu.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/eu.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/fa.lproj/Localizable.strings b/iOSClient/Supporting Files/fa.lproj/Localizable.strings
index cf44b0c48..a7e04a24e 100644
--- a/iOSClient/Supporting Files/fa.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/fa.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings b/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings
index 5fe4efd52..264e87450 100644
--- a/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/fr.lproj/Localizable.strings b/iOSClient/Supporting Files/fr.lproj/Localizable.strings
index 474800104..376e187a9 100644
--- a/iOSClient/Supporting Files/fr.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/fr.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/gl.lproj/Localizable.strings b/iOSClient/Supporting Files/gl.lproj/Localizable.strings
index bb9f2958e..6cd87ef3c 100644
--- a/iOSClient/Supporting Files/gl.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/gl.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/he.lproj/Localizable.strings b/iOSClient/Supporting Files/he.lproj/Localizable.strings
index c018f0daf..ce6a9c74f 100644
--- a/iOSClient/Supporting Files/he.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/he.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/hr.lproj/Localizable.strings b/iOSClient/Supporting Files/hr.lproj/Localizable.strings
index f0e5e87ed..93aa635c5 100644
--- a/iOSClient/Supporting Files/hr.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/hr.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/hu.lproj/Localizable.strings b/iOSClient/Supporting Files/hu.lproj/Localizable.strings
index f5c74bad9..863dfa382 100644
--- a/iOSClient/Supporting Files/hu.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/hu.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ia.lproj/Localizable.strings b/iOSClient/Supporting Files/ia.lproj/Localizable.strings
index 90f8beb84..512a9744d 100644
--- a/iOSClient/Supporting Files/ia.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ia.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/id.lproj/Localizable.strings b/iOSClient/Supporting Files/id.lproj/Localizable.strings
index df99eb24c..e65a18559 100644
--- a/iOSClient/Supporting Files/id.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/id.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/is.lproj/Localizable.strings b/iOSClient/Supporting Files/is.lproj/Localizable.strings
index 37a72f17d..77ce1282a 100644
--- a/iOSClient/Supporting Files/is.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/is.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/it.lproj/Localizable.strings b/iOSClient/Supporting Files/it.lproj/Localizable.strings
index 55186b2f7..7e76dcf01 100644
--- a/iOSClient/Supporting Files/it.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/it.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings b/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings
index fa64bf6cb..547f85a4a 100644
--- a/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ka-GE.lproj/Localizable.strings b/iOSClient/Supporting Files/ka-GE.lproj/Localizable.strings
index a51cbe7f2..980dd2284 100644
--- a/iOSClient/Supporting Files/ka-GE.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ka-GE.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ko.lproj/Localizable.strings b/iOSClient/Supporting Files/ko.lproj/Localizable.strings
index a92f4615d..aafb05b37 100644
--- a/iOSClient/Supporting Files/ko.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ko.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/lb.lproj/Localizable.strings b/iOSClient/Supporting Files/lb.lproj/Localizable.strings
index ed5772bd7..fae4465b7 100644
--- a/iOSClient/Supporting Files/lb.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/lb.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/lo.lproj/Localizable.strings b/iOSClient/Supporting Files/lo.lproj/Localizable.strings
index dab2b2b9f..264f74f32 100644
--- a/iOSClient/Supporting Files/lo.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/lo.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/lt_LT.lproj/Localizable.strings b/iOSClient/Supporting Files/lt_LT.lproj/Localizable.strings
index 1f31b8079..f88b4f87d 100644
--- a/iOSClient/Supporting Files/lt_LT.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/lt_LT.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/lv.lproj/Localizable.strings b/iOSClient/Supporting Files/lv.lproj/Localizable.strings
index 26f2e7cf5..ac1da0780 100644
--- a/iOSClient/Supporting Files/lv.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/lv.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/mk.lproj/Localizable.strings b/iOSClient/Supporting Files/mk.lproj/Localizable.strings
index f61ad8027..9dd9b4609 100644
--- a/iOSClient/Supporting Files/mk.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/mk.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/mn.lproj/Localizable.strings b/iOSClient/Supporting Files/mn.lproj/Localizable.strings
index 65807c359..fd792c77b 100644
--- a/iOSClient/Supporting Files/mn.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/mn.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings b/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings
index 2b11487af..a5e04176a 100644
--- a/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/nl.lproj/Localizable.strings b/iOSClient/Supporting Files/nl.lproj/Localizable.strings
index fdfb0f35a..823702989 100644
--- a/iOSClient/Supporting Files/nl.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/nl.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings b/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings
index da2a2b1a0..c34e8715f 100644
--- a/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/oc.lproj/Localizable.strings b/iOSClient/Supporting Files/oc.lproj/Localizable.strings
index 8090f99c0..77ecdf6f8 100644
--- a/iOSClient/Supporting Files/oc.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/oc.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/pl.lproj/Localizable.strings b/iOSClient/Supporting Files/pl.lproj/Localizable.strings
index c49bda67c..6dec5b026 100644
--- a/iOSClient/Supporting Files/pl.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/pl.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings b/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings
index 6054f4672..934bfad15 100644
--- a/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings b/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings
index 3a0b0a2fc..f6e2514e1 100644
--- a/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ro.lproj/Localizable.strings b/iOSClient/Supporting Files/ro.lproj/Localizable.strings
index 386fad178..2ed82520d 100644
--- a/iOSClient/Supporting Files/ro.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ro.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/ru.lproj/Localizable.strings b/iOSClient/Supporting Files/ru.lproj/Localizable.strings
index 85698c41b..ca1a3f56b 100644
--- a/iOSClient/Supporting Files/ru.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/ru.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sc.lproj/Localizable.strings b/iOSClient/Supporting Files/sc.lproj/Localizable.strings
index e3c7eda7b..54b9c1777 100644
--- a/iOSClient/Supporting Files/sc.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sc.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/si.lproj/Localizable.strings b/iOSClient/Supporting Files/si.lproj/Localizable.strings
index 27e552922..21cd9ca0c 100644
--- a/iOSClient/Supporting Files/si.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/si.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sk-SK.lproj/Localizable.strings b/iOSClient/Supporting Files/sk-SK.lproj/Localizable.strings
index e06764a5c..21b2589f1 100644
--- a/iOSClient/Supporting Files/sk-SK.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sk-SK.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sl.lproj/Localizable.strings b/iOSClient/Supporting Files/sl.lproj/Localizable.strings
index d20393a1e..6524d21f6 100644
--- a/iOSClient/Supporting Files/sl.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sl.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sq.lproj/Localizable.strings b/iOSClient/Supporting Files/sq.lproj/Localizable.strings
index 37225fe73..2d3efbb22 100644
--- a/iOSClient/Supporting Files/sq.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sq.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sr.lproj/Localizable.strings b/iOSClient/Supporting Files/sr.lproj/Localizable.strings
index f16069e25..1d79879fd 100644
--- a/iOSClient/Supporting Files/sr.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sr.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings b/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings
index c0a4bc668..7b1f593d3 100644
--- a/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/sv.lproj/Localizable.strings b/iOSClient/Supporting Files/sv.lproj/Localizable.strings
index eba3a29dd..804e59180 100644
--- a/iOSClient/Supporting Files/sv.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/sv.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/th_TH.lproj/Localizable.strings b/iOSClient/Supporting Files/th_TH.lproj/Localizable.strings
index 7b654608a..5e11e4de5 100644
--- a/iOSClient/Supporting Files/th_TH.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/th_TH.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/tr.lproj/Localizable.strings b/iOSClient/Supporting Files/tr.lproj/Localizable.strings
index 58f6c0895..7d12c0f38 100644
--- a/iOSClient/Supporting Files/tr.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/tr.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/uk.lproj/Localizable.strings b/iOSClient/Supporting Files/uk.lproj/Localizable.strings
index 69af5cc02..ca5b942fe 100644
--- a/iOSClient/Supporting Files/uk.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/uk.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/vi.lproj/Localizable.strings b/iOSClient/Supporting Files/vi.lproj/Localizable.strings
index 1ddc5eca7..a390b61f0 100644
--- a/iOSClient/Supporting Files/vi.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/vi.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/zh-Hans.lproj/Localizable.strings b/iOSClient/Supporting Files/zh-Hans.lproj/Localizable.strings
index 5185e2eb5..4e59a0f48 100644
--- a/iOSClient/Supporting Files/zh-Hans.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/zh-Hans.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings b/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings
index 49fed5d3b..4e1076bc4 100644
--- a/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Supporting Files/zh_HK.lproj/Localizable.strings b/iOSClient/Supporting Files/zh_HK.lproj/Localizable.strings
index e38510ffb..d2fe23210 100644
--- a/iOSClient/Supporting Files/zh_HK.lproj/Localizable.strings
+++ b/iOSClient/Supporting Files/zh_HK.lproj/Localizable.strings
Binary files differ
diff --git a/iOSClient/Utility/CCUtility.h b/iOSClient/Utility/CCUtility.h
index db9593127..360056a67 100644
--- a/iOSClient/Utility/CCUtility.h
+++ b/iOSClient/Utility/CCUtility.h
@@ -27,7 +27,7 @@
#import <sys/sysctl.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <MessageUI/MessageUI.h>
-#import <UICKeyChainStore/UICKeyChainStore.h>
+#import <UICKeyChainStore.h>
#import <Photos/Photos.h>
#import <PDFKit/PDFKit.h>
diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift
index a04eb68b0..05548d089 100644
--- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift
+++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayer.swift
@@ -29,10 +29,10 @@ import MediaPlayer
class NCPlayer: NSObject {
- private let appDelegate = UIApplication.shared.delegate as! AppDelegate
+ internal let appDelegate = UIApplication.shared.delegate as! AppDelegate
+ internal var url: URL
+ internal var playerToolBar: NCPlayerToolBar?
- private var url: URL
- private var playerToolBar: NCPlayerToolBar?
private var imageVideoContainer: imageVideoContainerView
private var detailView: NCViewerMediaDetailView?
private var viewController: UIViewController
@@ -69,7 +69,7 @@ class NCPlayer: NSObject {
if CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: NCGlobal.shared.fileNameVideoEncoded) {
self.url = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: NCGlobal.shared.fileNameVideoEncoded))
}
-
+
openAVPlayer() { status, error in
switch status {
@@ -79,41 +79,16 @@ class NCPlayer: NSObject {
}
break
case .failed:
- if error?.code == AVError.Code.fileFormatNotRecognized.rawValue && !CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: NCGlobal.shared.fileNameVideoEncoded) && !NCBrandOptions.shared.disable_ff {
- let alertController = UIAlertController(title: NSLocalizedString("_error_", comment: ""), message: NSLocalizedString("_video_format_not_recognized_", comment: ""), preferredStyle: .alert)
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_yes_", comment: ""), style: .default, handler: { action in
- /*
- ncFF.convertVideo { session, url in
- let returnCode = session?.getReturnCode()
-
- if returnCode?.isSuccess() ?? false {
- self.url = url
- self.openAVPlayer() { status, error in
- if let error = error {
- NCContentPresenter.shared.messageNotification(error.localizedDescription, description: error.localizedFailureReason, delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
- }
- }
- } else if returnCode?.isCancel() ?? false {
- // nothing
- } else {
- NCContentPresenter.shared.messageNotification("_error_", description: "_error_something_wrong_", delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
- }
- }
- */
- }))
- alertController.addAction(UIAlertAction(title: NSLocalizedString("_no_", comment: ""), style: .default, handler: { action in
- NCContentPresenter.shared.messageNotification("_info_", description: "_video_conversion_available_after_", delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.info, errorCode: NCGlobal.shared.errorNoError, priority: .max)
- }))
- self.appDelegate.window?.rootViewController?.present(alertController, animated: true)
+ #if MFFFLIB
+ self.convertVideo(error: error)
+ #else
+ if let title = error?.localizedDescription, let description = error?.localizedFailureReason {
+ NCContentPresenter.shared.messageNotification(title, description: description, delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
} else {
- if let title = error?.localizedDescription, let description = error?.localizedFailureReason {
- NCContentPresenter.shared.messageNotification(title, description: description, delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
- } else {
- NCContentPresenter.shared.messageNotification("_error_", description: "_error_something_wrong_", delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
- }
+ NCContentPresenter.shared.messageNotification("_error_", description: "_error_something_wrong_", delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorGeneric, priority: .max)
}
+ #endif
break
-
case .cancelled:
break
default:
@@ -126,6 +101,7 @@ class NCPlayer: NSObject {
print("Play URL: \(self.url)")
player = AVPlayer(url: self.url)
+ playerToolBar?.setMetadata(self.metadata)
if metadata.livePhoto {
player?.isMuted = false
@@ -162,7 +138,7 @@ class NCPlayer: NSObject {
self.imageVideoContainer.image = self.imageVideoContainer.image?.image(alpha: 0)
}
- self.playerToolBar?.setBarPlayer(ncplayer: self, metadata: self.metadata)
+ self.playerToolBar?.setBarPlayer(ncplayer: self)
self.generatorImagePreview()
if !(self.detailView?.isShow() ?? false) {
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterShowPlayerToolBar, userInfo: ["ocId":self.metadata.ocId, "enableTimerAutoHide": false])
@@ -256,7 +232,7 @@ class NCPlayer: NSObject {
playerToolBar?.updateToolBar()
}
-
+
// MARK: -
func isPlay() -> Bool {
@@ -303,9 +279,7 @@ class NCPlayer: NSObject {
@objc func generatorImagePreview() {
- guard let time = player?.currentTime() else { return }
- if metadata.livePhoto { return }
- if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue { return }
+ guard let time = player?.currentTime(), !metadata.livePhoto, metadata.classFile != NCCommunicationCommon.typeClassFile.audio.rawValue else { return }
var image: UIImage?
@@ -339,3 +313,4 @@ class NCPlayer: NSObject {
}
}
}
+
diff --git a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift
index cd3abadf2..f3a539597 100644
--- a/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift
+++ b/iOSClient/Viewer/NCViewerMedia/NCPlayer/NCPlayerToolBar.swift
@@ -39,7 +39,7 @@ class NCPlayerToolBar: UIView {
@IBOutlet weak var playbackSlider: UISlider!
@IBOutlet weak var labelLeftTime: UILabel!
@IBOutlet weak var labelCurrentTime: UILabel!
-
+
enum sliderEventType {
case began
case ended
@@ -121,11 +121,15 @@ class NCPlayerToolBar: UIView {
}
// MARK: -
-
- func setBarPlayer(ncplayer: NCPlayer, metadata: tableMetadata) {
+
+ func setMetadata(_ metadata: tableMetadata) {
+
+ self.metadata = metadata
+ }
+
+ func setBarPlayer(ncplayer: NCPlayer) {
self.ncplayer = ncplayer
- self.metadata = metadata
playbackSlider.value = 0
playbackSlider.minimumValue = 0
@@ -139,7 +143,7 @@ class NCPlayerToolBar: UIView {
}
public func updateToolBar() {
-
+
guard let ncplayer = self.ncplayer else { return }
// MUTE
@@ -205,6 +209,7 @@ class NCPlayerToolBar: UIView {
// MARK: Handle Notifications
@objc func handleRouteChange(notification: Notification) {
+
guard let userInfo = notification.userInfo, let reasonValue = userInfo[AVAudioSessionRouteChangeReasonKey] as? UInt, let reason = AVAudioSession.RouteChangeReason(rawValue: reasonValue) else { return }
switch reason {
@@ -257,16 +262,22 @@ class NCPlayerToolBar: UIView {
public func show(enableTimerAutoHide: Bool = false) {
- if metadata?.classFile != NCCommunicationCommon.typeClassFile.video.rawValue && metadata?.classFile != NCCommunicationCommon.typeClassFile.audio.rawValue { return }
- if let metadata = self.metadata, metadata.livePhoto { return }
-
+ guard let metadata = self.metadata, ncplayer != nil, !metadata.livePhoto, (metadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue || metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue) else
+ { return }
+
+ #if MFFFLIB
+ if MFFF.shared.existsMFFFSession(url: URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))) {
+ self.hide()
+ return
+ }
+ #endif
+
timerAutoHide?.invalidate()
if enableTimerAutoHide {
startTimerAutoHide()
}
-
if !self.isHidden { return }
-
+
UIView.animate(withDuration: 0.3, animations: {
self.alpha = 1
self.playerTopToolBarView.alpha = 1
@@ -316,8 +327,7 @@ class NCPlayerToolBar: UIView {
func skip(seconds: Float64) {
- guard let ncplayer = ncplayer else { return }
- guard let player = ncplayer.player else { return }
+ guard let ncplayer = ncplayer, let player = ncplayer.player else { return }
let currentTime = player.currentTime()
var newTime: CMTime = .zero
@@ -359,7 +369,7 @@ class NCPlayerToolBar: UIView {
timerAutoHide?.invalidate()
}
-
+
// MARK: - Event / Gesture
@objc func onSliderValChanged(slider: UISlider, event: UIEvent) {
@@ -487,7 +497,7 @@ class NCPlayerToolBar: UIView {
}
*/
}
-
+
func forward() {
var index: Int = 0
diff --git a/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift b/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift
index 997c53706..e43aca34a 100644
--- a/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift
+++ b/iOSClient/Viewer/NCViewerMedia/NCViewerMedia.swift
@@ -162,6 +162,13 @@ class NCViewerMedia: UIViewController {
if let ncplayer = self.ncplayer {
self.viewerMediaPage?.updateCommandCenter(ncplayer: ncplayer, metadata: self.metadata)
}
+
+ #if MFFFLIB
+ MFFF.shared.delegate = self.ncplayer
+// if !MFFF.shared.existsMFFFSession(url: URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))) {
+// self.playerToolBar.hideMessage()
+// }
+ #endif
} else if metadata.classFile == NCCommunicationCommon.typeClassFile.image.rawValue {
diff --git a/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.storyboard b/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.storyboard
index 7e2a01943..8e3d04ebb 100644
--- a/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.storyboard
+++ b/iOSClient/Viewer/NCViewerMedia/NCViewerMediaPage.storyboard
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ne8-hS-cp3">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="ne8-hS-cp3">
<device id="retina5_5" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<capability name="Image references" minToolsVersion="12.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>