From c6ec16ecaf1dcca36459bafa3f31f3fab1808cca Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Mon, 16 Dec 2024 14:37:24 +0100 Subject: [PATCH] Version 6.1.9 (#3242) --- Brand/NCBrand.swift | 2 +- .../FileProviderEnumerator.swift | 71 +++++++++++----- .../FileProviderExtension+Thumbnail.swift | 13 ++- Nextcloud.xcodeproj/project.pbxproj | 26 ++++-- .../NCAccountSettingsModel.swift | 18 ++-- .../NCAccountSettingsView.swift | 2 +- iOSClient/AppDelegate.swift | 9 +- iOSClient/Files/NCFiles.swift | 21 +++++ iOSClient/GUI/ComponentView.swift | 19 ----- iOSClient/Media/NCMedia.swift | 10 ++- iOSClient/NCAccount.swift | 4 +- iOSClient/NCGlobal.swift | 1 + .../Networking/NCNetworking+Download.swift | 2 +- iOSClient/Networking/NCService.swift | 11 ++- .../Scan document/NCUploadScanDocument.swift | 43 +++++----- .../af.lproj/Localizable.strings | Bin 137948 -> 138352 bytes .../an.lproj/Localizable.strings | Bin 137306 -> 137710 bytes .../ar.lproj/Localizable.strings | Bin 135560 -> 135906 bytes .../ast.lproj/Localizable.strings | Bin 138984 -> 139388 bytes .../az.lproj/Localizable.strings | Bin 137630 -> 138034 bytes .../be.lproj/Localizable.strings | Bin 137386 -> 137790 bytes .../bg_BG.lproj/Localizable.strings | Bin 144316 -> 144720 bytes .../bn_BD.lproj/Localizable.strings | Bin 137560 -> 137964 bytes .../br.lproj/Localizable.strings | Bin 141326 -> 141730 bytes .../bs.lproj/Localizable.strings | Bin 137622 -> 138026 bytes .../ca.lproj/Localizable.strings | Bin 144222 -> 144626 bytes .../cs-CZ.lproj/Localizable.strings | Bin 141180 -> 141584 bytes .../cy_GB.lproj/Localizable.strings | Bin 137556 -> 137960 bytes .../da.lproj/Localizable.strings | Bin 138550 -> 138954 bytes .../de.lproj/Localizable.strings | Bin 150156 -> 150644 bytes .../el.lproj/Localizable.strings | Bin 150608 -> 151012 bytes .../en-GB.lproj/Localizable.strings | Bin 137408 -> 137812 bytes .../en.lproj/Localizable.strings | 3 + .../eo.lproj/Localizable.strings | Bin 138012 -> 138416 bytes .../es-419.lproj/Localizable.strings | Bin 141432 -> 141836 bytes .../es-AR.lproj/Localizable.strings | Bin 140498 -> 140902 bytes .../es-CL.lproj/Localizable.strings | Bin 142150 -> 142554 bytes .../es-CO.lproj/Localizable.strings | Bin 141792 -> 142196 bytes .../es-CR.lproj/Localizable.strings | Bin 141794 -> 142198 bytes .../es-DO.lproj/Localizable.strings | Bin 141790 -> 142194 bytes .../es-EC.lproj/Localizable.strings | Bin 146592 -> 146996 bytes .../es-GT.lproj/Localizable.strings | Bin 141794 -> 142198 bytes .../es-HN.lproj/Localizable.strings | Bin 141416 -> 141820 bytes .../es-MX.lproj/Localizable.strings | Bin 142134 -> 142538 bytes .../es-NI.lproj/Localizable.strings | Bin 141406 -> 141810 bytes .../es-PA.lproj/Localizable.strings | Bin 141406 -> 141810 bytes .../es-PE.lproj/Localizable.strings | Bin 141396 -> 141800 bytes .../es-PR.lproj/Localizable.strings | Bin 141408 -> 141812 bytes .../es-PY.lproj/Localizable.strings | Bin 141432 -> 141836 bytes .../es-SV.lproj/Localizable.strings | Bin 141782 -> 142186 bytes .../es-UY.lproj/Localizable.strings | Bin 141430 -> 141834 bytes .../es.lproj/Localizable.strings | Bin 146828 -> 147232 bytes .../et_EE.lproj/Localizable.strings | Bin 137832 -> 138236 bytes .../eu.lproj/Localizable.strings | Bin 145080 -> 146046 bytes .../fa.lproj/Localizable.strings | Bin 138084 -> 138488 bytes .../fi-FI.lproj/Localizable.strings | Bin 140260 -> 140664 bytes .../fo.lproj/Localizable.strings | Bin 137316 -> 137720 bytes .../fr.lproj/Localizable.strings | Bin 152484 -> 153056 bytes .../ga.lproj/Localizable.strings | Bin 148848 -> 149270 bytes .../gd.lproj/Localizable.strings | Bin 138792 -> 139196 bytes .../gl.lproj/Localizable.strings | Bin 147616 -> 148024 bytes .../he.lproj/Localizable.strings | Bin 135440 -> 135844 bytes .../hi_IN.lproj/Localizable.strings | Bin 137290 -> 137694 bytes .../hr.lproj/Localizable.strings | Bin 141944 -> 142348 bytes .../hsb.lproj/Localizable.strings | Bin 137296 -> 137700 bytes .../hu.lproj/Localizable.strings | Bin 143218 -> 143622 bytes .../hy.lproj/Localizable.strings | Bin 137564 -> 137968 bytes .../ia.lproj/Localizable.strings | Bin 138036 -> 138440 bytes .../id.lproj/Localizable.strings | Bin 138182 -> 138586 bytes .../ig.lproj/Localizable.strings | Bin 137266 -> 137670 bytes .../is.lproj/Localizable.strings | Bin 139488 -> 139892 bytes .../it.lproj/Localizable.strings | Bin 146930 -> 147334 bytes .../ja-JP.lproj/Localizable.strings | Bin 117632 -> 113948 bytes .../ka-GE.lproj/Localizable.strings | Bin 139992 -> 140396 bytes .../ka.lproj/Localizable.strings | Bin 137294 -> 137698 bytes .../kab.lproj/Localizable.strings | Bin 137336 -> 137740 bytes .../km.lproj/Localizable.strings | Bin 137548 -> 137952 bytes .../kn.lproj/Localizable.strings | Bin 137776 -> 138180 bytes .../ko.lproj/Localizable.strings | Bin 116198 -> 116602 bytes .../la.lproj/Localizable.strings | Bin 137280 -> 137684 bytes .../lb.lproj/Localizable.strings | Bin 137758 -> 138162 bytes .../lo.lproj/Localizable.strings | Bin 136210 -> 136614 bytes .../lt_LT.lproj/Localizable.strings | Bin 140448 -> 140852 bytes .../lv.lproj/Localizable.strings | Bin 138484 -> 138888 bytes .../mk.lproj/Localizable.strings | Bin 138572 -> 138976 bytes .../mn.lproj/Localizable.strings | Bin 138056 -> 138460 bytes .../mr.lproj/Localizable.strings | Bin 137258 -> 137662 bytes .../ms_MY.lproj/Localizable.strings | Bin 137404 -> 137808 bytes .../my.lproj/Localizable.strings | Bin 137476 -> 137880 bytes .../nb-NO.lproj/Localizable.strings | Bin 139978 -> 140382 bytes .../ne.lproj/Localizable.strings | Bin 137310 -> 137714 bytes .../nl.lproj/Localizable.strings | Bin 142576 -> 142980 bytes .../nn_NO.lproj/Localizable.strings | Bin 137428 -> 137832 bytes .../oc.lproj/Localizable.strings | Bin 138434 -> 138838 bytes .../pl.lproj/Localizable.strings | Bin 141942 -> 142358 bytes .../ps.lproj/Localizable.strings | Bin 137304 -> 137708 bytes .../pt-BR.lproj/Localizable.strings | Bin 144864 -> 145268 bytes .../pt-PT.lproj/Localizable.strings | Bin 141064 -> 141468 bytes .../ro.lproj/Localizable.strings | Bin 140388 -> 140792 bytes .../ru.lproj/Localizable.strings | Bin 144730 -> 145134 bytes .../sc.lproj/Localizable.strings | Bin 146096 -> 146500 bytes .../si.lproj/Localizable.strings | Bin 138170 -> 138574 bytes .../sk-SK.lproj/Localizable.strings | Bin 142050 -> 142454 bytes .../sl.lproj/Localizable.strings | Bin 143002 -> 143406 bytes .../sq.lproj/Localizable.strings | Bin 139022 -> 139426 bytes .../sr.lproj/Localizable.strings | Bin 141666 -> 142248 bytes .../sr@latin.lproj/Localizable.strings | Bin 137598 -> 138002 bytes .../sv.lproj/Localizable.strings | Bin 139622 -> 140018 bytes .../sw.lproj/Localizable.strings | Bin 137290 -> 137694 bytes .../ta.lproj/Localizable.strings | Bin 137628 -> 138032 bytes .../th_TH.lproj/Localizable.strings | Bin 137200 -> 137604 bytes .../tk.lproj/Localizable.strings | Bin 137972 -> 138376 bytes .../tr.lproj/Localizable.strings | Bin 142436 -> 142840 bytes .../ug.lproj/Localizable.strings | Bin 141714 -> 142118 bytes .../uk.lproj/Localizable.strings | Bin 139790 -> 140194 bytes .../ur_PK.lproj/Localizable.strings | Bin 137338 -> 137742 bytes .../uz.lproj/Localizable.strings | Bin 137290 -> 137694 bytes .../vi.lproj/Localizable.strings | Bin 138668 -> 139072 bytes .../zh-Hans.lproj/Localizable.strings | Bin 100872 -> 101276 bytes .../zh-Hant-TW.lproj/Localizable.strings | Bin 107236 -> 107640 bytes .../zh_HK.lproj/Localizable.strings | Bin 101202 -> 101456 bytes .../zu_ZA.lproj/Localizable.strings | Bin 137290 -> 137694 bytes .../NCTermOfServiceModel.swift | 70 ++++++++++++++++ .../NCTermOfServiceView.swift | 79 ++++++++++++++++++ 124 files changed, 312 insertions(+), 92 deletions(-) create mode 100644 iOSClient/Terms of service/NCTermOfServiceModel.swift create mode 100644 iOSClient/Terms of service/NCTermOfServiceView.swift diff --git a/Brand/NCBrand.swift b/Brand/NCBrand.swift index b496e61340..3fac622ea9 100755 --- a/Brand/NCBrand.swift +++ b/Brand/NCBrand.swift @@ -39,7 +39,7 @@ let userAgent: String = { var textCopyrightNextcloudiOS: String = "Nextcloud Hydrogen for iOS %@ © 2024" var textCopyrightNextcloudServer: String = "Nextcloud Server %@" var loginBaseUrl: String = "https://cloud.nextcloud.com" - @objc var pushNotificationServerProxy: String = "https://push-notifications.nextcloud.com" + var pushNotificationServerProxy: String = "https://push-notifications.nextcloud.com" var linkLoginHost: String = "https://nextcloud.com/install" var linkloginPreferredProviders: String = "https://nextcloud.com/signup-ios" var webLoginAutenticationProtocol: String = "nc://" // example "abc://" diff --git a/File Provider Extension/FileProviderEnumerator.swift b/File Provider Extension/FileProviderEnumerator.swift index 671091d1ab..f9cdd88cde 100644 --- a/File Provider Extension/FileProviderEnumerator.swift +++ b/File Provider Extension/FileProviderEnumerator.swift @@ -31,8 +31,11 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { var serverUrl: String? let providerUtility = fileProviderUtility() let database = NCManageDatabase.shared - var recordsPerPage: Int = 20 var anchor: UInt64 = 0 + // X-NC-PAGINATE + var recordsPerPage: Int = 100 + var paginateToken: String? + var paginatedTotal: Int = 0 init(enumeratedItemIdentifier: NSFileProviderItemIdentifier) { self.enumeratedItemIdentifier = enumeratedItemIdentifier @@ -82,13 +85,13 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { observer.finishEnumerating(upTo: nil) return } - var pageNumber = 1 + var pageNumber = 0 if let stringPage = String(data: page.rawValue, encoding: .utf8), let intPage = Int(stringPage) { pageNumber = intPage } - self.fetchItemsForPage(serverUrl: serverUrl, pageNumber: pageNumber) { metadatas in + self.fetchItemsForPage(serverUrl: serverUrl, pageNumber: pageNumber) { metadatas, isPaginated in if let metadatas { for metadata in metadatas { if metadata.e2eEncrypted || (!metadata.session.isEmpty && metadata.session != NCNetworking.shared.sessionUploadBackgroundExt) { @@ -104,7 +107,8 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { observer.didEnumerate(items) if let metadatas, - metadatas.count == self.recordsPerPage { + isPaginated, + metadatas.count == self.recordsPerPage { pageNumber += 1 let providerPage = NSFileProviderPage("\(pageNumber)".data(using: .utf8)!) observer.finishEnumerating(upTo: providerPage) @@ -157,27 +161,56 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator { completionHandler(NSFileProviderSyncAnchor(data!)) } - func fetchItemsForPage(serverUrl: String, pageNumber: Int, completionHandler: @escaping (_ metadatas: Results?) -> Void) { - let predicate = NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.shared.session.account, serverUrl) + func fetchItemsForPage(serverUrl: String, pageNumber: Int, completion: @escaping (_ metadatas: [tableMetadata]?, _ isPaginated: Bool) -> Void) { + var useFirstAsMetadataFolder: Bool = false + var isPaginated: Bool = false + var paginateCount = recordsPerPage + if pageNumber == 0 { + paginateCount += 1 + } + var offset = pageNumber * recordsPerPage + if pageNumber > 0 { + offset += 1 + } + let options = NKRequestOptions(paginate: true, + paginateToken: self.paginateToken, + paginateOffset: offset, + paginateCount: paginateCount, + queue: NextcloudKit.shared.nkCommonInstance.backgroundQueue) + + print("PAGINATE OFFSET: \(offset) COUNT: \(paginateCount) TOTAL: \(self.paginatedTotal)") + + NextcloudKit.shared.readFileOrFolder(serverUrlFileName: serverUrl, depth: "1", showHiddenFiles: NCKeychain().showHiddenFiles, account: fileProviderData.shared.session.account, options: options) { _, files, responseData, error in + if let headers = responseData?.response?.allHeaderFields as? [String: String] { + let normalizedHeaders = Dictionary(uniqueKeysWithValues: headers.map { ($0.key.lowercased(), $0.value) }) + isPaginated = Bool(normalizedHeaders["x-nc-paginate"] ?? "false") ?? false + self.paginateToken = normalizedHeaders["x-nc-paginate-token"] + self.paginatedTotal = Int(normalizedHeaders["x-nc-paginate-total"] ?? "0") ?? 0 + } - if pageNumber == 1 { - NextcloudKit.shared.readFileOrFolder(serverUrlFileName: serverUrl, depth: "1", showHiddenFiles: NCKeychain().showHiddenFiles, account: fileProviderData.shared.session.account) { _, files, _, error in - if error == .success, let files { - self.database.convertFilesToMetadatas(files, useFirstAsMetadataFolder: true) { metadataFolder, metadatas in - /// FOLDER + if error == .success, let files { + if pageNumber == 0 { + self.database.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.shared.session.account, serverUrl)) + useFirstAsMetadataFolder = true + } + self.database.convertFilesToMetadatas(files, useFirstAsMetadataFolder: useFirstAsMetadataFolder) { metadataFolder, metadatas in + /// FOLDER + if useFirstAsMetadataFolder { self.database.addMetadata(metadataFolder) self.database.addDirectory(e2eEncrypted: metadataFolder.e2eEncrypted, favorite: metadataFolder.favorite, ocId: metadataFolder.ocId, fileId: metadataFolder.fileId, etag: metadataFolder.etag, permissions: metadataFolder.permissions, richWorkspace: metadataFolder.richWorkspace, serverUrl: serverUrl, account: metadataFolder.account) - /// FILES - self.database.deleteMetadata(predicate: predicate) - self.database.addMetadatas(metadatas) } + /// FILES + self.database.addMetadatas(metadatas) + completion(metadatas, isPaginated) + } + } else { + if isPaginated { + completion(nil, isPaginated) + } else { + let metadatas = self.database.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.shared.session.account, serverUrl)) + completion(metadatas, isPaginated) } - let resultsMetadata = self.database.fetchPagedResults(ofType: tableMetadata.self, primaryKey: "ocId", recordsPerPage: self.recordsPerPage, pageNumber: pageNumber, filter: predicate, sortedByKeyPath: "fileName") - completionHandler(resultsMetadata) } - } else { - let resultsMetadata = self.database.fetchPagedResults(ofType: tableMetadata.self, primaryKey: "ocId", recordsPerPage: recordsPerPage, pageNumber: pageNumber, filter: predicate, sortedByKeyPath: "fileName") - completionHandler(resultsMetadata) } } } diff --git a/File Provider Extension/FileProviderExtension+Thumbnail.swift b/File Provider Extension/FileProviderExtension+Thumbnail.swift index 0cffbb8515..e3d58c2e8b 100644 --- a/File Provider Extension/FileProviderExtension+Thumbnail.swift +++ b/File Provider Extension/FileProviderExtension+Thumbnail.swift @@ -32,15 +32,19 @@ extension FileProviderExtension { var counterProgress: Int64 = 0 for itemIdentifier in itemIdentifiers { - guard let metadata = providerUtility.getTableMetadataFromItemIdentifier(itemIdentifier), metadata.hasPreview else { + guard let metadata = providerUtility.getTableMetadataFromItemIdentifier(itemIdentifier), + metadata.hasPreview + else { counterProgress += 1 - if counterProgress == progress.totalUnitCount { completionHandler(nil) } + if counterProgress == progress.totalUnitCount { + completionHandler(nil) + } continue } NextcloudKit.shared.downloadPreview(fileId: metadata.fileId, - width: Int(size.width), - height: Int(size.height), + width: Int(NCGlobal.shared.size512.width), + height: Int(NCGlobal.shared.size512.height), etag: metadata.etag, account: metadata.account) { _ in } completion: { _, _, _, _, responseData, error in @@ -55,6 +59,7 @@ extension FileProviderExtension { } } } + return progress } } diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index 21629c71f1..8409f7a395 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -234,6 +234,8 @@ F711A4EB2AF9327D00095DD8 /* UIImage+animatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = F713FEFF2472764100214AF6 /* UIImage+animatedGIF.m */; }; F711A4EF2AF932B900095DD8 /* SVGKitSwift in Frameworks */ = {isa = PBXBuildFile; productRef = F711A4EE2AF932B900095DD8 /* SVGKitSwift */; }; F711D63128F44801003F43C8 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C9739428F17131002C43E2 /* IntentHandler.swift */; }; + F7132C722D085AD200B42D6A /* NCTermOfServiceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7132C6B2D085AD200B42D6A /* NCTermOfServiceModel.swift */; }; + F7132C732D085AD200B42D6A /* NCTermOfServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7132C6C2D085AD200B42D6A /* NCTermOfServiceView.swift */; }; F713FBE52C31645200F10760 /* NCNetworking+AsyncAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = F713FBE42C31645200F10760 /* NCNetworking+AsyncAwait.swift */; }; F713FBE62C31646400F10760 /* NCNetworking+AsyncAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = F713FBE42C31645200F10760 /* NCNetworking+AsyncAwait.swift */; }; F713FBE72C31646500F10760 /* NCNetworking+AsyncAwait.swift in Sources */ = {isa = PBXBuildFile; fileRef = F713FBE42C31645200F10760 /* NCNetworking+AsyncAwait.swift */; }; @@ -1258,6 +1260,8 @@ F710D1F42405770F00A6033D /* NCViewerPDF.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCViewerPDF.swift; sourceTree = ""; }; F710D2012405826100A6033D /* NCViewer+Menu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCViewer+Menu.swift"; sourceTree = ""; }; F711A4DB2AF92CAD00095DD8 /* NCUtility+Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NCUtility+Date.swift"; sourceTree = ""; }; + F7132C6B2D085AD200B42D6A /* NCTermOfServiceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceModel.swift; sourceTree = ""; }; + F7132C6C2D085AD200B42D6A /* NCTermOfServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCTermOfServiceView.swift; sourceTree = ""; }; F713FBE42C31645200F10760 /* NCNetworking+AsyncAwait.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCNetworking+AsyncAwait.swift"; sourceTree = ""; }; F713FEFE2472764000214AF6 /* UIImage+animatedGIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+animatedGIF.h"; sourceTree = ""; }; F713FEFF2472764100214AF6 /* UIImage+animatedGIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+animatedGIF.m"; sourceTree = ""; }; @@ -2095,6 +2099,15 @@ path = Color; sourceTree = ""; }; + F7132C6D2D085AD200B42D6A /* Terms of service */ = { + isa = PBXGroup; + children = ( + F7132C6B2D085AD200B42D6A /* NCTermOfServiceModel.swift */, + F7132C6C2D085AD200B42D6A /* NCTermOfServiceView.swift */, + ); + path = "Terms of service"; + sourceTree = ""; + }; F713418B2597513800768D21 /* PushNotification */ = { isa = PBXGroup; children = ( @@ -3091,6 +3104,7 @@ F79A65C12191D8DC00FF6DCC /* Select */, F728CE741BF6322C00E69702 /* Share */, F7169A161EE590930086BD69 /* Shares */, + F7132C6D2D085AD200B42D6A /* Terms of service */, F7E9C41320F4CA870040CF18 /* Transfers */, F78F74322163753B00C2ADAD /* Trash */, F7EFC0CB256BF89300461AAD /* UserStatus */, @@ -4367,6 +4381,8 @@ F7CBC1252BAC8B0000EC1D55 /* NCSectionFirstHeaderEmptyData.swift in Sources */, F7D4BF3D2CA2E8D800A5E746 /* TOPasscodeKeypadView.m in Sources */, F7D4BF3E2CA2E8D800A5E746 /* TOPasscodeSettingsKeypadView.m in Sources */, + F7132C722D085AD200B42D6A /* NCTermOfServiceModel.swift in Sources */, + F7132C732D085AD200B42D6A /* NCTermOfServiceView.swift in Sources */, F7D4BF3F2CA2E8D800A5E746 /* TOPasscodeFixedInputView.m in Sources */, F7D4BF402CA2E8D800A5E746 /* TOPasscodeButtonLabel.m in Sources */, F7D4BF412CA2E8D800A5E746 /* TOPasscodeViewControllerAnimatedTransitioning.m in Sources */, @@ -5487,7 +5503,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 4; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -5514,7 +5530,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 6.1.8; + MARKETING_VERSION = 6.1.9; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-v"; OTHER_LDFLAGS = ""; @@ -5553,7 +5569,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = NKUJUXUJ3B; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -5577,7 +5593,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 6.1.8; + MARKETING_VERSION = 6.1.9; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-v"; OTHER_LDFLAGS = ""; @@ -5852,7 +5868,7 @@ repositoryURL = "https://github.com/nextcloud/NextcloudKit"; requirement = { kind = exactVersion; - version = 5.0.1; + version = 5.0.2; }; }; F788ECC5263AAAF900ADC67F /* XCRemoteSwiftPackageReference "MarkdownKit" */ = { diff --git a/iOSClient/Account Settings/NCAccountSettingsModel.swift b/iOSClient/Account Settings/NCAccountSettingsModel.swift index 8eb33b49d8..ba7c01434f 100644 --- a/iOSClient/Account Settings/NCAccountSettingsModel.swift +++ b/iOSClient/Account Settings/NCAccountSettingsModel.swift @@ -160,7 +160,13 @@ class NCAccountSettingsModel: ObservableObject, ViewOnAppearHandling { } /// Function to change account after 1.5 sec of change - func setAccount(account: String) { + func setAccount(account: String?) { + guard let account + else { + self.tblAccount = nil + self.alias = "" + return + } if let tableAccount = database.getTableAccount(predicate: NSPredicate(format: "account == %@", account)) { self.tblAccount = tableAccount self.alias = tableAccount.alias @@ -170,14 +176,10 @@ class NCAccountSettingsModel: ObservableObject, ViewOnAppearHandling { /// Function to delete the current account func deleteAccount() { if let tblAccount { - NCAccount().deleteAccount(tblAccount.account) - if let account = database.getAllTableAccount().first?.account { - NCAccount().changeAccount(account, userProfile: nil, controller: self.controller) { - onViewAppear() - } - } else { + NCAccount().deleteAccount(tblAccount.account) { + let account = database.getAllTableAccount().first?.account + setAccount(account: account) dismissView = true - appDelegate.openLogin(selector: NCGlobal.shared.introLogin) } } } diff --git a/iOSClient/Account Settings/NCAccountSettingsView.swift b/iOSClient/Account Settings/NCAccountSettingsView.swift index 944a1dd7d7..4ba6ff8379 100644 --- a/iOSClient/Account Settings/NCAccountSettingsView.swift +++ b/iOSClient/Account Settings/NCAccountSettingsView.swift @@ -50,7 +50,7 @@ struct NCAccountSettingsView: View { Image(uiImage: avatar) .resizable() .scaledToFit() - .frame(width: UIScreen.main.bounds.width, height: 75) + .frame(width: UIScreen.main.bounds.width, height: 65) if let statusImage = status.statusImage { ZStack { Circle() diff --git a/iOSClient/AppDelegate.swift b/iOSClient/AppDelegate.swift index 9b502da283..8acd5d4f0c 100644 --- a/iOSClient/AppDelegate.swift +++ b/iOSClient/AppDelegate.swift @@ -279,14 +279,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD } func nextcloudPushNotificationAction(data: [String: AnyObject]) { - guard let data = NCApplicationHandle().nextcloudPushNotificationAction(data: data), - let account = data["account"] as? String + guard let data = NCApplicationHandle().nextcloudPushNotificationAction(data: data) else { return } + let account = data["account"] as? String ?? "unavailable" + let app = data["app"] as? String func openNotification(controller: NCMainTabBarController) { - if let viewController = UIStoryboard(name: "NCNotification", bundle: nil).instantiateInitialViewController() as? NCNotification { + if app == NCGlobal.shared.termsOfServiceName { + NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterGetServerData, second: 0.5) + } else if let viewController = UIStoryboard(name: "NCNotification", bundle: nil).instantiateInitialViewController() as? NCNotification { viewController.session = NCSession.shared.getSession(account: account) DispatchQueue.main.asyncAfter(deadline: .now() + 1) { let navigationController = UINavigationController(rootViewController: viewController) diff --git a/iOSClient/Files/NCFiles.swift b/iOSClient/Files/NCFiles.swift index f87039a2c1..0bb1dc3f75 100644 --- a/iOSClient/Files/NCFiles.swift +++ b/iOSClient/Files/NCFiles.swift @@ -24,12 +24,14 @@ import UIKit import NextcloudKit import RealmSwift +import SwiftUI class NCFiles: NCCollectionViewCommon { internal var isRoot: Bool = true internal var fileNameBlink: String? internal var fileNameOpen: String? internal var matadatasHash: String = "" + internal var semaphoreReloadDataSource = DispatchSemaphore(value: 1) required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) @@ -123,6 +125,7 @@ class NCFiles: NCCollectionViewCommon { guard !isSearchingMode else { return super.reloadDataSource() } + self.semaphoreReloadDataSource.wait() var predicate = self.defaultPredicate let predicateDirectory = NSPredicate(format: "account == %@ AND serverUrl == %@", session.account, self.serverUrl) @@ -140,10 +143,12 @@ class NCFiles: NCCollectionViewCommon { self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView) if metadatas.isEmpty { + self.semaphoreReloadDataSource.signal() return super.reloadDataSource() } self.dataSource.caching(metadatas: metadatas, dataSourceMetadatas: dataSourceMetadatas) { updated in + self.semaphoreReloadDataSource.signal() if updated || self.isNumberOfItemsInAllSectionsNull || self.numberOfItemsInAllSections != metadatas.count { super.reloadDataSource() } @@ -188,6 +193,19 @@ class NCFiles: NCCollectionViewCommon { NCNetworking.shared.downloadQueue.addOperation(NCOperationDownload(metadata: metadata, selector: NCGlobal.shared.selectorDownloadFile)) } } + } else if error.errorCode == self.global.errorForbidden { + DispatchQueue.main.async { + if self.presentedViewController == nil { + NextcloudKit.shared.getTermsOfService(account: self.session.account) { _, tos, _, error in + if error == .success, let tos { + let termOfServiceModel = NCTermOfServiceModel(controller: self.controller, tos: tos) + let termOfServiceView = NCTermOfServiceModelView(model: termOfServiceModel) + let termOfServiceController = UIHostingController(rootView: termOfServiceView) + self.present(termOfServiceController, animated: true, completion: nil) + } + } + } + } } } } @@ -324,6 +342,7 @@ class NCFiles: NCCollectionViewCommon { override func accountSettingsDidDismiss(tableAccount: tableAccount?, controller: NCMainTabBarController?) { let currentAccount = session.account + if database.getAllTableAccount().isEmpty { appDelegate.openLogin(selector: NCGlobal.shared.introLogin) } else if let account = tableAccount?.account, account != currentAccount { @@ -332,5 +351,7 @@ class NCFiles: NCCollectionViewCommon { titleCurrentFolder = getNavigationTitle() navigationItem.title = titleCurrentFolder } + + setNavigationLeftItems() } } diff --git a/iOSClient/GUI/ComponentView.swift b/iOSClient/GUI/ComponentView.swift index 4e2bd766d1..ac330f32fc 100644 --- a/iOSClient/GUI/ComponentView.swift +++ b/iOSClient/GUI/ComponentView.swift @@ -23,25 +23,6 @@ import SwiftUI -struct TextFieldClearButton: ViewModifier { - @Binding var text: String - - func body(content: Content) -> some View { - HStack { - content - if !text.isEmpty { - Button( - action: { self.text = "" }, - label: { - Image(systemName: "xmark.circle.fill") - .foregroundColor(Color(UIColor.placeholderText)) - } - ).buttonStyle(BorderlessButtonStyle()) - } - } - } -} - struct ButtonRounded: ButtonStyle { var disabled = false var account = "" diff --git a/iOSClient/Media/NCMedia.swift b/iOSClient/Media/NCMedia.swift index 8de4ed4684..1592201655 100644 --- a/iOSClient/Media/NCMedia.swift +++ b/iOSClient/Media/NCMedia.swift @@ -53,8 +53,8 @@ class NCMedia: UIViewController { var isTop: Bool = true var isEditMode = false var fileSelect: [String] = [] - var filesExists: [String] = [] - var ocIdDoNotExists: [String] = [] + var filesExists: ThreadSafeArray = ThreadSafeArray() + var ocIdDoNotExists: ThreadSafeArray = ThreadSafeArray() var hasRunSearchMedia: Bool = false var attributesZoomIn: UIMenuElement.Attributes = [] var attributesZoomOut: UIMenuElement.Attributes = [] @@ -292,10 +292,12 @@ class NCMedia: UIViewController { ocIdDoNotExists.append(ocId) } - if NCNetworking.shared.fileExistsQueue.operationCount == 0, !ocIdDoNotExists.isEmpty { + if NCNetworking.shared.fileExistsQueue.operationCount == 0, + !ocIdDoNotExists.isEmpty, + let ocIdDoNotExists = self.ocIdDoNotExists.getArray() { dataSource.removeMetadata(ocIdDoNotExists) database.deleteMetadataOcIds(ocIdDoNotExists) - ocIdDoNotExists.removeAll() + self.ocIdDoNotExists.removeAll() collectionViewReloadData() } } diff --git a/iOSClient/NCAccount.swift b/iOSClient/NCAccount.swift index ebb0de9013..9464120dd0 100644 --- a/iOSClient/NCAccount.swift +++ b/iOSClient/NCAccount.swift @@ -99,7 +99,7 @@ class NCAccount: NSObject { completion() } - func deleteAccount(_ account: String, wipe: Bool = true) { + func deleteAccount(_ account: String, wipe: Bool = true, completion: () -> Void = {}) { UIApplication.shared.allSceneSessionDestructionExceptFirst() /// Unsubscribing Push Notification @@ -129,6 +129,8 @@ class NCAccount: NSObject { NCKeychain().clearAllKeysPushNotification(account: account) /// Remove User Default Data NCNetworking.shared.removeAllKeyUserDefaultsData(account: account) + + completion() } func deleteAllAccounts() { diff --git a/iOSClient/NCGlobal.swift b/iOSClient/NCGlobal.swift index 80594ccaaa..dd577ebc9a 100644 --- a/iOSClient/NCGlobal.swift +++ b/iOSClient/NCGlobal.swift @@ -55,6 +55,7 @@ class NCGlobal: NSObject { let talkName = "talk-message" let spreedName = "spreed" let twoFactorNotificatioName = "twofactor_nextcloud_notification" + let termsOfServiceName = "terms_of_service" // Nextcloud version // diff --git a/iOSClient/Networking/NCNetworking+Download.swift b/iOSClient/Networking/NCNetworking+Download.swift index cb2218896e..fd90228b79 100644 --- a/iOSClient/Networking/NCNetworking+Download.swift +++ b/iOSClient/Networking/NCNetworking+Download.swift @@ -303,7 +303,7 @@ class NCOperationDownload: ConcurrentOperation, @unchecked Sendable { metadata.sessionTaskIdentifier = 0 metadata.status = NCGlobal.shared.metadataStatusWaitDownload - NCManageDatabase.shared.addMetadata(metadata) + let metadata = NCManageDatabase.shared.addMetadata(metadata) NCNetworking.shared.download(metadata: metadata, withNotificationProgressTask: true) { } completion: { _, _ in diff --git a/iOSClient/Networking/NCService.swift b/iOSClient/Networking/NCService.swift index e6ba678492..89f9e687df 100644 --- a/iOSClient/Networking/NCService.swift +++ b/iOSClient/Networking/NCService.swift @@ -149,13 +149,16 @@ class NCService: NSObject { avatarSizeRounded: NCGlobal.shared.avatarSizeRounded, etag: etag, account: account, - options: NKRequestOptions(queue: NextcloudKit.shared.nkCommonInstance.backgroundQueue)) { _, _, _, etag, _, error in - if let etag = etag, error == .success { - self.database.addAvatar(fileName: fileName, etag: etag) + options: NKRequestOptions(queue: NextcloudKit.shared.nkCommonInstance.backgroundQueue)) { _, _, _, newEtag, _, error in + if let newEtag, + etag != newEtag, + error == .success { + self.database.addAvatar(fileName: fileName, etag: newEtag) + + NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadAvatar, userInfo: ["error": error]) } else if error.errorCode == NCGlobal.shared.errorNotModified { self.database.setAvatarLoaded(fileName: fileName) } - NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadAvatar, userInfo: ["error": error]) } } diff --git a/iOSClient/Scan document/NCUploadScanDocument.swift b/iOSClient/Scan document/NCUploadScanDocument.swift index a43b8e1a43..f0e87bd2b6 100644 --- a/iOSClient/Scan document/NCUploadScanDocument.swift +++ b/iOSClient/Scan document/NCUploadScanDocument.swift @@ -373,7 +373,6 @@ struct UploadScanDocumentView: View { HStack { Text(NSLocalizedString("_filename_", comment: "")) TextField(NSLocalizedString("_enter_filename_", comment: ""), text: $fileName) - .modifier(TextFieldClearButton(text: $fileName)) .multilineTextAlignment(.trailing) .onChange(of: fileName) { _ in let controller = (UIApplication.shared.firstWindow?.rootViewController as? NCMainTabBarController) @@ -416,30 +415,32 @@ struct UploadScanDocumentView: View { view.listRowSeparator(.hidden) } - VStack(spacing: 20) { - Toggle(NSLocalizedString("_delete_all_scanned_images_", comment: ""), isOn: $removeAllFiles) - .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: model.session.account)))) - .onChange(of: removeAllFiles) { newValue in - NCKeychain().deleteAllScanImages = newValue - } - Button(NSLocalizedString("_save_", comment: "")) { - let fileName = model.fileName(fileName) - if !fileName.isEmpty { - model.showHUD.toggle() - model.save(fileName: fileName, password: password, isTextRecognition: isTextRecognition, removeAllFiles: removeAllFiles, quality: quality) { openConflictViewController, error in + Section { + VStack(spacing: 20) { + Toggle(NSLocalizedString("_delete_all_scanned_images_", comment: ""), isOn: $removeAllFiles) + .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.getElement(account: model.session.account)))) + .onChange(of: removeAllFiles) { newValue in + NCKeychain().deleteAllScanImages = newValue + } + Button(NSLocalizedString("_save_", comment: "")) { + let fileName = model.fileName(fileName) + if !fileName.isEmpty { model.showHUD.toggle() - if error { - print("error") - } else if openConflictViewController { - isPresentedUploadConflict = true - } else { - NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDismissScanDocument) + model.save(fileName: fileName, password: password, isTextRecognition: isTextRecognition, removeAllFiles: removeAllFiles, quality: quality) { openConflictViewController, error in + model.showHUD.toggle() + if error { + print("error") + } else if openConflictViewController { + isPresentedUploadConflict = true + } else { + NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterDismissScanDocument) + } } } } + .buttonStyle(ButtonRounded(disabled: fileName.isEmpty || !footer.isEmpty, account: model.session.account)) + .disabled(fileName.isEmpty || !footer.isEmpty) } - .buttonStyle(ButtonRounded(disabled: fileName.isEmpty || !footer.isEmpty, account: model.session.account)) - .disabled(fileName.isEmpty || !footer.isEmpty) } Section(header: Text(NSLocalizedString("_quality_image_title_", comment: ""))) { @@ -469,8 +470,6 @@ struct UploadScanDocumentView: View { } .sheet(isPresented: $isPresentedUploadConflict) { UploadConflictView(delegate: model, serverUrl: model.serverUrl, metadatasUploadInConflict: [model.metadata], metadatasNOConflict: []) - }.onTapGesture { - UIApplication.shared.connectedScenes.flatMap { ($0 as? UIWindowScene)?.windows ?? [] }.filter { $0.isKeyWindow }.first?.endEditing(true) } } } diff --git a/iOSClient/Supporting Files/af.lproj/Localizable.strings b/iOSClient/Supporting Files/af.lproj/Localizable.strings index 7ff710b4a47be9d4cb41bfa8cdf327996ae5a96b..bf7af0d72cd33bdb18789655f9a65c69243283d9 100644 GIT binary patch delta 245 zcmcb!mE*$>j)pCaBEKe|*dV~0&ydCt&rr;e%232mHhtnvM#)LS9FrHAvhn5uMHLu8 z@(K*alNC3LPd>AOhcl5O83x zKKayo9`;0rWFSnPTxcdaIYFO~)ssPiA#w8lVo_fOh7yJhhD0E#zyJ~jvCDvlDFBU2 z1+r5>DjD*ibUIiRBwNCe4<<9fY7-fffc&z_j7;JPTREY&G89ZVOkq?7I*ErLE(A0n Nl_6#O-0zHg6#%iKH<|zd delta 17 ZcmaF2nd8<5j)pCaOTKTn_{q3U0RU7A2+IHf diff --git a/iOSClient/Supporting Files/ar.lproj/Localizable.strings b/iOSClient/Supporting Files/ar.lproj/Localizable.strings index bd8d917f466cc63db82a433697b3708f741e9cfc..371b03de1856ec868db306c066d04d2bd5f85535 100644 GIT binary patch delta 247 zcmeBJ%<*U`N5dAzs*mzY4Dk#l45`1!Q@Eu{xV0n-iFC z$>zf52^2E{s_D0*1}?UAPoP4Oa5h68P+K`e4p2IUAst96 zFqAN40Od-6ERZS?y9_K|1SAuIsz5sPpmaLWHK|Zt`B1$eGZGn+faaD>W@HlQg}NEx iAaJFr+dRG2}871KIfuX+W|VEKpdU7z=8%MW6l56G PrC{%;Z2$b7ak~NlE~P+G delta 17 ZcmdnDg=5u5j)pCazrJtp`^mUL0RU2|2@?PS diff --git a/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings b/iOSClient/Supporting Files/bg_BG.lproj/Localizable.strings index 9ab2503b6221c8b5bad84de2b8fcc0cc5abe44f5..4d7db768b70e856607d943f05135beb7b4675b71 100644 GIT binary patch delta 300 zcmdn8A=#Z8HyNk8H$1Ie1JFr+dRG2}871KIfuX+W|VEK)X|aS5aN=Ym?ks%LCr-Ma7vL!$_LG*%ni3~|Ve%WM3CUI>N95mf92~e-2pkxX| zI*?QV+M5BCD*>`Rff&Rt1B({{$wZ(kkj^|Poep$iDpXfKR4>SkM1~}wxn+|XnZ!wS j;72vl$s5uIraSmBvWP>x4{<8k{op`J+3wEHbX)-deu_iO delta 19 bcmZ2JFr+dRG2}871KIfuX+W|VEK)W-{|2Mv$bOb~%h?mHa1mu@ZW@Hj4=z{5jb&T?p71nY{!aM}h R4|N{cn>(#4)Ht0p|%zXCjaVWHS^@-e{;g-GG^iB^e}?&5#GwQqGVAluBVp2a*a5 zB@7u1i9k|;!4rr<>@u);5s*v-s!{-wc~CkX=#o^Zu6(FokQs>#NkDVUCNnaL^FrN= c%`wyU^BGm8k=+k>C(r>vCv6vJV@g#700f~s2LJ#7 delta 19 bcmbPmiQ~^Xj)oS-ElhH3+c&W@#VG;+R09VM diff --git a/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings b/iOSClient/Supporting Files/cy_GB.lproj/Localizable.strings index 1fcb60905ec210af81a40a36b7632b781e568aae..bcd77f489cf15b6a2c44cae19c38738130b48fe7 100644 GIT binary patch delta 232 zcmcbziQ~mqj)pCa^L|Y3*dV~0&ydCt&rr;e%232mHl1+^qxj?va$J+oZ4hECp8Rlw z_~f1qJe-LP$v~LOP%xQMP=2~W7b8ci0s}}en<0-OpP`%~2Pm1skPajj7)ls2fN~{3 zmM0K{*kxexA|ROvR0YzR2c^@2wx&XLCr>O9^;KXfVaQ-e1d<92o#=7tq91hLr8*e;EHO003n4KQsUU delta 17 ZcmX@Lmt)&5j)pCac7L{C`pfu30RT~12^IhV diff --git a/iOSClient/Supporting Files/de.lproj/Localizable.strings b/iOSClient/Supporting Files/de.lproj/Localizable.strings index ef853129e33873373a94f30577ac8ec009eefd0a..70e2eb935f6d044cf887a50568b6f958d2fc36c0 100644 GIT binary patch delta 229 zcmeB~%K2pmXG06)7A6h#$sBtHc=H+37~&a<8B!UF7|Nyxo?;ZAt{}+BHF-f3%jBTF zI+J|iJXixe@WPG;OI jj<9>W-~vYZ=@+~hIVK0}RS{JHnuM;SWV@m|Q?@byZ}2)H delta 19 acmew|gR^HUXG06)7A6h#?E;!iDars##s)(G diff --git a/iOSClient/Supporting Files/el.lproj/Localizable.strings b/iOSClient/Supporting Files/el.lproj/Localizable.strings index 3af502a8021a6da75a65f9d67d62493232311272..0349bd0ed6c0b9206ed390f92095b28d263e74bc 100644 GIT binary patch delta 316 zcmcaGgY(I3&W0AoElk@qWtAA>8A=#Z8HyNk8H$1Ie1L;SkM1~}wxn+|XnZ&iB hJ|M<<(-TV>WhXbta!Dim67F_z@T6>CugSDf2>@R3K;r-a delta 19 bcmaDdoAbg9&W0AoElk@qw|i+b%~ApYRZItd diff --git a/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings b/iOSClient/Supporting Files/en-GB.lproj/Localizable.strings index de34f3bd927035e2f9dfb5ae01fc5d8d772a3313..df22923d5f11d76fdac112fabece8feba341897e 100644 GIT binary patch delta 210 zcmX@Gk>ko1j)pCa0zW2STQ4A(&ydCt&rr;e%232m#*oR7JlW7!cCyR{A;#j#`WwV2 z-&)VZnaGd~gsBV#lMgD$PhQZ>!Kg5~zgXN?fuV#UgCP+}Dlm8gF^F9TRHpzmD;3C2 z0kRSq@}P7&SQI2%!jKOpGr(#S8IpkfvdN50;s`t0p>|FW3}lp@yg`Nw=p-I~xI=(O Oq%x#z=lsFAT>$_q4>vgg delta 17 Zcmcbzh2y|Rj)pCa0zbAd`N_CJ0RT>T2y6fV diff --git a/iOSClient/Supporting Files/en.lproj/Localizable.strings b/iOSClient/Supporting Files/en.lproj/Localizable.strings index c7aecf1845..d180c2e608 100644 --- a/iOSClient/Supporting Files/en.lproj/Localizable.strings +++ b/iOSClient/Supporting Files/en.lproj/Localizable.strings @@ -1051,6 +1051,9 @@ "_offline_not_allowed_" = "This operation is not allowed in offline mode"; "_Upload_native_format_yes_"= "Upload in native format: yes"; "_Upload_native_format_no_" = "Upload in native format: no"; +"_terms_of_service_" = "Terms of service"; +"_terms_accept_" = "I acknowledge that I have read and agree to the above terms of service"; +"_terms_accepted_" = "Terms accepted"; // Tip "_tip_pdf_thumbnails_" = "Swipe left from the right edge of the screen to show the thumbnails."; diff --git a/iOSClient/Supporting Files/eo.lproj/Localizable.strings b/iOSClient/Supporting Files/eo.lproj/Localizable.strings index fe6aa6efaa13b11ef9685ea03ab2cbec220c1c85..c333b02189c867200ae78f69c7939e5c01ad4434 100644 GIT binary patch delta 273 zcmbQUjbp=3j)pCa5x-=W7~&a97*ZLE7;+hkf$V&SG$2_F7Ac#)aVewtab zbfJO_nGDH5X(a}01}-3psyz`X2a+wAyiq`Y@`tq?j0%$-OT>K@fR{j)pCa5x=&-`OSDl0RT>u2-W}q diff --git a/iOSClient/Supporting Files/es-419.lproj/Localizable.strings b/iOSClient/Supporting Files/es-419.lproj/Localizable.strings index ba66df61233d1d074f62fd255c59664b4b09622b..6054bcfc7327a8da813f1911ffe0dadfbafdb9c0 100644 GIT binary patch delta 227 zcmexyfurXNM?(wa7N!mClRLHw2<9`SF~l5JWGCm&lL=xg_vVj!G^tu8@4(?(G z1qP730z>iS`t9PAwYKwcCNd-gVJbtx^hPO0)pSpwBuFTmArGjuoFNA&mBNq?Bo!D+ z7&3rzB|sKP6^LC17B2#li9l5#oq13?9cXj_C&3j4YD{ zw(&6*PnO>%KKayE9`;0rWFSnP9B3gqy}*u{K_afSwW1? zw3tBwEUAEyWJm@oQ(~}Y-~y7U#v}sefU=VVEhHxwIP#@?0(FDLvKjJ#rj#?}0ClD? zqytF>p!FF*xe_1?qzc3?1B({{$wZ(kkj^|Poep$pDpXfKR4>SkM1~}wxn+|XnZ&i> ljwkHC>52)AvXc#7a7`B2#={SFG(!P6L{hf%b2434006zEKX?ED delta 19 bcmex%jpNZ}j)oS-ElgsZ+gEWholyV)TO0?) diff --git a/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings b/iOSClient/Supporting Files/es-DO.lproj/Localizable.strings index b9113994ce5f5dc80c2d3dbaca513405632e9754..b3e61dc1a40b0babdbb30743e5e388529ca11c28 100644 GIT binary patch delta 273 zcmcb2nd8$nj)oS-Elfh3@=6Tx3?&Sy3`GpN48=fpK0_LiEC!2|F=S4E_?A&}vVs`j zWPxp5tYG2k8_zHb3nS}EWJm_W)X9Msl9Sx{(mfdz7(hbV40%A~${BKihNUp114#v- zRT)6J5+Dnt3dAl0ix&aOM4&2=&O9ic4s=v1R98M!FUX8Uh9sc5Ws@11#F1Piip50? i1=BZ1Fse?UC(gtH^Z*M#)TImsU_Ym9=jLR(tN;K~Fh5KH delta 19 bcmex#jpN>Bj)oS-Elfh3+m~@MolyV)T3iRU diff --git a/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings b/iOSClient/Supporting Files/es-EC.lproj/Localizable.strings index c502232f384baa6336829d23e43f0ab5bcdd433d..48c918564142db613ea421ff863584f229ec6fb7 100644 GIT binary patch delta 247 zcmZ4RlVi&tj)oS-Elf<(ldtR+;Lm4BV~A%cW=LfyVkl$CoIddoqvYg-y&RJr#Ms1( z859^m3KS3u7?K%MC!gId&Y1{g0oe=%lLe*ZCl@GlFe*&`TP5zRz)-@F!H@_f6&O5$ z7{o3Es#5@3kP2j{09lC)c~CkXEDDk>0onx73*sd*BmwzllNp)BdEt)3w0ru*jf}#R d1>}V$+lg@qgPaR@7SO;{hLr8UrI?l~0sz`;JU##b delta 19 bcmdn;hhxD{j)oS-Elf<(+o#De%~J#bR$~WT diff --git a/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings b/iOSClient/Supporting Files/es-GT.lproj/Localizable.strings index 19dc46a2e1d60437c9ffb07baef5d59dfeb0ac1d..27cd6a2d0808c9b2dcfbf27f47e2f240ccd583ef 100644 GIT binary patch delta 271 zcmaEKnd93vj)oS-ElgsZib@Re3?&Sy3`GpN48=fpK0_LiEC!2|F=R3%PY>MBC_7nT zn-D8laQen2jKadmIuaR@fiQJ)poQe*2P%B&o(u{MAhB$QJfLai3^_ovQW(;Kqyo^U z44_;IkOfi&VwZu%i-2SzP!&jL9+XZ8x+xW^D<7&CWJV%G642bT$&5_mNKO*P;v|NG f>5RRM@{<+B_=JnWI>9bwC;NYCxgP|zop{73P77O7!rY` z0s~MC%q|0(q5!l#6)2tpWF<1>LFsg`C`h&h=qiX_5HFD-3CJ&-%*Z6JOM+_{3Z`Ey bVpIkDM7S7i4%n3p1z`WDY@f=`bXfraY(qbE delta 19 bcmex!nd8L;j)oS-ElhLRw;OOWolyV)T}KDh diff --git a/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings b/iOSClient/Supporting Files/es-MX.lproj/Localizable.strings index c19ae350d4e2592c5fbc5fc785b73f60748253a0..4ceefe5ba31b13972ad4a68dc35df7d5018befff 100644 GIT binary patch delta 229 zcmdmXjpNi!j)oS-Elhb_lRLHv2<9`SF~l64No%)iz4euWJm_WREC1-6D1f`(>)m!7(hbV40%A~${BKiQYj4SKvDr{ zRR&P51jquZ0TBV{y^+ iz<5U4$q!Vxrpt*jaR9x*!Vh;V*w-oByV;p8D*yn+JU}M^ delta 19 bcmex#nd9CCj)oS-EliWxx2th7olyV)TW1HX diff --git a/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PA.lproj/Localizable.strings index 5e0d16aa944a80ebf177c569059e73dfa88b0d9c..dad7cb3da4e5da736ff3ca14f0f2298b7dbc2cd5 100644 GIT binary patch delta 281 zcmcb2f#cIkO$OO&X5C?NnuC_k_tfk zGJtX=Ko&?9h+PI2F9MQ@Kvf`}c~CkX=(1F(u6(FokQs>#NkDVUCNnaLvw~dZ`dlt4|gHh?Y aAUjz>j8C{2tQG1ourE`#_p&oxRsaCa(mgH! delta 19 bcmexznd89)j)oS-Elg9`w`*`RolyV)TgL~q diff --git a/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings b/iOSClient/Supporting Files/es-PY.lproj/Localizable.strings index 946e6621f7c0a86995a7f1b7e238d9842dcd1526..5615c06361c230d11756871dfe0cb72348bdcd39 100644 GIT binary patch delta 259 zcmexyfurXNM?(wa7N#Zaib@Re3?&Sy3`GpN48=fpK0_LiEC!2|F=R3%PiItOl$~xM z#>6rC)>bZ7u*`JF#f-wD$l4Mal7TRlpR_GQZUx$I206#(9uI-mdm delta 19 bcmeCV!tvt*M?(wa7N#Za+buYmt|$NiR)GhN diff --git a/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings b/iOSClient/Supporting Files/es-SV.lproj/Localizable.strings index 005b91ef6557d9005d6d303fda1eda50fda58ea1..a055bbe0cb218b5adcb31fbd06007bd690ad6450 100644 GIT binary patch delta 288 zcmcb1nd8+pj)oS-ElgaTvPul`3?&Sy3`GpN48=fpK0_LiEC!2|O>ca`C^`9o9LIFN zd`6DReA~FRp)w4a49P$>N(|NvTtE`lj6|RuPl1yHjJAG0Te!eqxXabE?XO&JV{ zKvIDLC9PUPA3#L2TGs;i?pu~}?zyK1=X2=5?Q_heB zluThr2a*avXJi27N`Nd+AO^9^z~V(fG7+c>q%#jnrvn|F3e}Yl)eABsks%3aZrNl; nCUIS;Cx~?5!x@b7(;ciBIV53$0dXnV`QRW**{&$fl&u5+6pBMP delta 19 acmZ4RkE7=|M?(wa7A6hp?R#XHQj`EyWCu$C diff --git a/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings b/iOSClient/Supporting Files/et_EE.lproj/Localizable.strings index 1cb4981069997942133920a6862e4c9b734170de..8c7d0de0416ea20faeb3f742f45a357fcb668b3b 100644 GIT binary patch delta 220 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 QHwP1wGWoIRTFYns2kr*ZZU6uP delta 6784 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 diff --git a/iOSClient/Supporting Files/fa.lproj/Localizable.strings b/iOSClient/Supporting Files/fa.lproj/Localizable.strings index 09b581b0d27d28c2c005ca2416d6b1caddf61444..2c9e589eb2ecac7c6416383e601d0f72d963f7cf 100644 GIT binary patch delta 275 zcmaE|jpN5oj)pCa+kVL^F~l>JFr+dRG2}871KIfuX+W|VEK)Yz{uZO;piLP- zxe_4D6No|VGO&0NkW2)s0_n_y(&<1qr9yS(L-m5pNMuL?np-xRkx87Olcp;+Fv?FB Y*u)_T^C84-VE2Okow9xXFUGA30LAA*H~;_u delta 17 ZcmeydljF%Yj)pCa+kS2L`op+R0RUF%2@L=M diff --git a/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings b/iOSClient/Supporting Files/fi-FI.lproj/Localizable.strings index 5e50b5f4ea766cb66a79c5f069d9c64932dfa74f..2a70dfb0c25f77f1e73b88aa2d5c6c0fae05851b 100644 GIT binary patch delta 318 zcmaEIoa4tSj)oS-Elg_6vPul`3?&Sy3`GpN48=fpK0_LiEC!2|O<(_rQF3wu4~KmS zT!{i$i2_UsLncEqP)>=#nt=;Qq8gS6lmp2YOit95pMF4$kt0=s0VJ5skOwrToFNA& znZl3`Bo%JFr+dRG2}871KIfuX+W|VEK)Yz{yL-N17D=;KZK3FX3s{k}PgCP+}Dlm8gF^F9T zRH*>8EfvU40kRSq@}P7&SQI2%0(1pLFNl}OkObtHO=e^gC+vj6BFV`OiabE~^64^A!4ynD9u#E3l}JGm zW}pB$zJ821?^S$V@$pkP&FzPIa2aD9Q)uzm18j-f%9FyvS!tdJD%i%muhG=Mmhj<4 zQuiC8N-}~bMfu(q(jOl&!F~lTy`yp8D80mXvU*JYZXH)lDvw_drNQI(r`Q$sU|Oh; zU<`aI9^*GTj8m$wMelComP6$Ov)Pk`w8)*7=ZM`#wCVXXQ@{O!1&6LaNOG#)sEcN$ z|M%*M!VP&|Y%pxzXf!N7tTU3jTyGp-q0**xVFt!w^jz?S^jw?8gfmo~V5-Uxr2Lyn zQpD3IoAHP%NHAn+zSp5SJB*5c--!<>@y8cq1DE>c4RGLv5>1}qv>;d1*Un7!Z*W_X uscN-BCJZ^qeB}n!gg)1!B)?O38e>Vy>QKlbp8Rx*r8Vd delta 519 zcmZWlJxc>Y6nuL|;i48HSV)Rn6$=Siq!GkIOCg1bR#s=SmkTDja5)cBihn@3;(kC5 zENs%q3RV_c3jP6OWoP9Ni1XGDNMvF6@pfk3%zL}Bvuk_!+$c!ul1n|D8U<7*l@#`u zk_Eq_n&`Q7N-b(qhZ-a)BA*oADF!+%aBFmiidho)0BA-k3aO25grlG@q1eaW2jZN< z^yE`Gi(P;M@&Id*x*Yp@?2FO%%n|wNXdsric&GPl7uu3e!UPHVrBu&i*Lv7!S+k7oREs@Fvg0pz2 zjCGUm|90G;^lj`T!sJbG4mc`!?1MvvM#;sVS*xS>p2VY*46C_$2~}2bNhS|*G2O{T mUhlq($g!27W6|l$tW{d~fMVa%jwa^ol{ssptY0gZwe|(Org&!n diff --git a/iOSClient/Supporting Files/ga.lproj/Localizable.strings b/iOSClient/Supporting Files/ga.lproj/Localizable.strings index 7ce3a1ba9ee3876aec2b3a929714065166597490..78c253473506ee79700c6439aae5f9c0a6b1228c 100644 GIT binary patch delta 266 zcmey+#W}5yv!R7?3saraW8g82+-4Dk%b45 zNMv}+pa7Q71oD#@GJt%b>dB3J#5ofgl7TRlp>Qx_OrWk*AUlyE9f)%$pPwr(n#hpPkOve8xhWT{ jE|no4)g{vdn;2DPL(nWt2O0@-YzfG5+sl=hekuU~Ob$k) delta 19 acmbQ%$N8a)v!R7?3sarab`=$-Pf7qys|O(f diff --git a/iOSClient/Supporting Files/gd.lproj/Localizable.strings b/iOSClient/Supporting Files/gd.lproj/Localizable.strings index d286147e4930d046e195f649b0b221e2fe2e5903..f03a31aaedf4b9bcf3f82c6245056e02a12f4e37 100644 GIT binary patch delta 235 zcmZ3nhhxuvj)pCad4DIr*d)N4&ydCt&rr;e%232mHvQopM#lnEv8*CO}ES~JR zS$y)FO+1{549P&4%1|&lP*;9(LK{b_0s}}an<0-OpP`%~2Pl`qkPajj7)ls2fN~{3 zmM0K{*kxexA|ROvR0YzR2c^@2wx&XLQz7!6c`E_N`W#83^@#$40%8r#0IGc zss`EyR55)&2b1h%h1G16ZT9d@+9U>ahcyEi1G;Mvb}ST^hdDz?5MfjzLkiH~;_ZTR HO#Mm#bQ(4K delta 19 acmdnd!nvT4v!R7?3zLN0_6_n(9ZCR5eg=~O diff --git a/iOSClient/Supporting Files/he.lproj/Localizable.strings b/iOSClient/Supporting Files/he.lproj/Localizable.strings index 5fd82065b89c988c5e06d574f872d56d4d88e835..106c87aae965e1c538d6385c5e082ebc7e8d0b4a 100644 GIT binary patch delta 308 zcmbQRh-1l8j)pCaDIXM-7~&a97*ZLE7;+hkf$V&SG$2_F7Aa%MWJsROC@VfWfStn{ zrbYp*Mgdt3P_+_+H3JurL^UmuAsGl$Co7stPFCRNOZQ|@U;v3_GvonHDQCz5>P%rs z2a*avS7ZR?N`NeoDiFI2EM5d86M?EgI`g1(I?%nTP+j>@y&y9Z8IpkJmQ7}464yrZ m15hPi_f22u!zep>Lj~95gta{UP)9QqfCDCFd+Z0s%?bb?%|R*v delta 17 ZcmZ3olw-moj)pCaDId1~_{g|M0RT$b2!a3r diff --git a/iOSClient/Supporting Files/hi_IN.lproj/Localizable.strings b/iOSClient/Supporting Files/hi_IN.lproj/Localizable.strings index 8d2019fe8a07c314665e083425d80963c167bce2..0145ef24a859d37294b0c9440c131a3c99ea101c 100644 GIT binary patch delta 210 zcmX@Lf#cq0j)pCav%XJ0wq8ImpCOGQo}ri_m7$2Cj3JXDd9tFf>|~w|LX5?eqS)K`I_gdu|=5lAX9fJ8y;GN4%sK+{rz z>=cknhCC>p4i*K;mN4Xl$qcaCM1~|FzicuilQ_awPN=O61=9^v7*&Bz;^Bu20S!oH MNZCI5JL7f*0OE2seExKP*#b-nt=;QqUug$NCv`GhJwkA9rBYecyTZ)Ox|BE?yCT_BZDCkNGdRR0x^hP z22`g2v^N#VP64tK8SJFr+dRG2}871KIfuX+W|VEKR*^@zGa(%J5uL97L42DD?slWgf1GCG3 zrYHa{P6djm09lC)c~CkXEDDk>0Xhhx7sN|sNCNW9CNnaL>yqFahJxveUW}?hPw?rx(gH%1%z0 z%wi2uq5xK+fUE?lSc$=!feT2Y8kWeA41}o+1(QF%P)+w_P+$OwWHaOe%_wKc0m`H> zqytF>pc68HawR|(NEL`(1{N;@l8Hc7Af0(oIvwcPRH&|es9um6i3~|VbIT?(GKp&= kc>t&quj{7wCjvd_kj@42q&UozaHoSqCuMs(FVky902us3@Bjb+ delta 19 acmZpB#PR7KM?(wa7N$Pl?MnPiPZR-G!Uv83 diff --git a/iOSClient/Supporting Files/hy.lproj/Localizable.strings b/iOSClient/Supporting Files/hy.lproj/Localizable.strings index cbda3ab1f17723f90d0ecb4984d0cde60fb9f631..0f8e66282929984dcc0b9bce6ee5a2c52116e1f9 100644 GIT binary patch delta 221 zcmcb!iQ~goj)pCaD}GEa+aSQ3&ydCt&rr;e%232mHeGNDqxj?xW?a)R#4xfD=;KZwl5L&RbVJ#$Y4kWk_rr-Kn!A+ z0aYph%}fQdQ-G{QhCC>p4i*K;mN4Xl$qcaCM1~|FzicuilQ=e8rz?6hs>0mG!4G#0 Q(3Dh$l^W?k^GbRREft!H@_f6&OIGAa)th zWCfsYsX%rLNF_raluieWf@Dj8u7KzT@e&!5fc&z_j7;K4P7uZ71crji6UF2we{kiH Xgn0<09qc@Y0JFr+dRG2}871KIfuX+W|VEK zV6o|elNp7Dku@YTBm-gUj_`NiVC3P58s7!rY`0s~MC%q{~Os{phr z6)2tpWF<1>LFsg`C`h&h=mdyf5HFD-3CJ&-%*Z5;W4b{K zBg^C)oB3G5GSe3xW)v1h)|SYS41}o+1(O*C<)?qJW#nK~nCxFF?yCSaJ%b?;NGdRR z0x^hP22`j3v@sRPP64tK8S5V~*s$d6; VLp%l24s{*at0~+6|7U!t007lcKa2nX delta 18 acmexzgyX?Mj)oS-DNJnJXE8F}QUCx^A_rLj diff --git a/iOSClient/Supporting Files/it.lproj/Localizable.strings b/iOSClient/Supporting Files/it.lproj/Localizable.strings index 73b465f98c5b1067d53ff05d2a12645c6fe5df07..5d1d0e17a635ce959a6c33013dd0a58355bc3615 100644 GIT binary patch delta 261 zcmezLo1^VNM?(wa7N#ue$tQLR@aHq6F~lyGC^^|+4v%CmP*8yZ zB&~puW=Lj8oqTYYIAx}kOP!UVMqs(3JfI- z89=!bAj=boLF_WHcoC3H1gZk*%!AVDKxd>vb>&0#g3L%{NCKK$Hkpx0oEPp`m}}Uf ju9^NZgHd*}0}t0^zTF(cAm_uK3A7&QpzX=hO#Mm#xS2jT delta 19 acmZqs&++LuM?(wa7N#ue?f+z$I+OriiU>de diff --git a/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings b/iOSClient/Supporting Files/ja-JP.lproj/Localizable.strings index 8070e396d4d7033a709f785e2c5b2c43f9fbe6fe..9d663bb5c124a1a487da49903f3f9a59d1b17386 100644 GIT binary patch delta 4608 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 delta 19 bcmaEJg5$JFr+dRG2}871KIfuX+W|VEK7 zB?@3A3J4_($w0+Q4Au->KoZrkM4%i2#obQ=z)@p?X1PBr+rc%`KbE$Rw@{ f_XAN5yjTNtAkd$Z2!Fy|4-TM|?bE+AZdU*RJr_kT delta 17 ZcmaE~nd96Bj)pCa^S*C4`pLLK0RU1w2%!J~ diff --git a/iOSClient/Supporting Files/kab.lproj/Localizable.strings b/iOSClient/Supporting Files/kab.lproj/Localizable.strings index 7f56f993f1d4e906e08dbd0b0a45c930d1a814b8..c1f5dc6157fb7adb932dfb3e8d575371de5c2e18 100644 GIT binary patch delta 289 zcmeydfum;&N5dAz6W`^P7~&a97*ZLE7;+hkf$V&SG$2_F7Aa%MoWAf5qvW)DMh;2Kz`X|MkaAxxRVLHhoNA4 bU<#w^WP=Sn{7@${6o5k^W&6SJjN26eUx7hi delta 17 ZcmeC#!trARN5dAz6W_PT{AApq002=02+9Be diff --git a/iOSClient/Supporting Files/km.lproj/Localizable.strings b/iOSClient/Supporting Files/km.lproj/Localizable.strings index e40fb1183e55a1d1933660760a0feb12e633e799..b0254242478db89685ed2a935af6f29f6f850985 100644 GIT binary patch delta 230 zcmX@JiQ~amj)pCabAC*A+aSQ3&ydCt&rr;e%232mHr?@u);5s*v-ssicEgVO0hTT`LB@}YV`W+XBs0nII&%*Z5;a0WZn8Pgqu7{wE|h75*8AgRCr5(Tl#fa(;0hNS}8 zDIk>$c~CkXEDDk>VaNxQ8DO=E3`szK*p diff --git a/iOSClient/Supporting Files/ko.lproj/Localizable.strings b/iOSClient/Supporting Files/ko.lproj/Localizable.strings index f15d3967e7273810bfc1b70e56ddcc268c48f191..c6efb99dcd903012bbc91f5097b6e664aa94a561 100644 GIT binary patch delta 250 zcmaFX&Hk&8yP1wxqqrSXCgx~5T-H|Ouoo3KluYY8?z^a!equ|abE?75{3+hL?Efa02BkW z%YZ5sfM%uw#Z!Q+M20*loemZS$(8`^g6IYD5*d$NsFFyxKKayo9`;0rWFSnPTxcdaxgdj&)ssPiA#w8lVo_fOh7yJhhD0E#zyJ~jvCDu4 zDgcd41+r5>DjD*ibUIiRBwNCe4<<9fY7-fffc&z_j7;JPTREY&G89Y~^kP(nxr>7z RE)Fy$l_6z&=Xb{K3IKv>Inn?C delta 17 Zcmcbznd86)j)pCa6TWX(`N_CJ0RT_b2x$NS diff --git a/iOSClient/Supporting Files/lb.lproj/Localizable.strings b/iOSClient/Supporting Files/lb.lproj/Localizable.strings index fc8179a96d89a365e2b1575a8866adaeeb03d3fe..f6750cf1057f8bcdadc08d6e668d94751b270863 100644 GIT binary patch delta 228 zcmbQYg=5opj)pCaVLvCcZ4?m9XGmj+XDDV!Whi1OW5{Gkp8QZ!eDa0~9FzSv3NRK= zj^8LgnQJ2tXCgx~5T-H|Om=*zn(oPqytF>h7yJhpj-)% z1yTiKmx0BLfMg<26-Z|uluifQnhMpG57i4YBatBqXl~hLMkaA=ZkYZsl~HxF&qf}8 RxU+y30-dnk|0m;l1pp}{Im7?} delta 17 ZcmdnAonzh>j)pCaVL!LO`o(xc0RT>V2-E-o diff --git a/iOSClient/Supporting Files/lo.lproj/Localizable.strings b/iOSClient/Supporting Files/lo.lproj/Localizable.strings index ee7cfb8e7d5f71d92768a243c22b789c501b4ff5..5be68fdb25bf48fc6bd665c06524bb99fce3f82f 100644 GIT binary patch delta 290 zcmbQVf@9fgj)pCaA)jTH7~&a97*ZLE7;+hkf$V&SG$2_F7Ac$l@Diis^b2u}9Fq;! z3F$&b88R7?f$~ZW)(l)g5>@y&y9Z8IpkJmQ7}45+}`d(=R44 WsscU5!w+{bI2cm4`+jCTssI4%d_Y(L delta 17 ZcmZ3snq$%mj)pCaA)mLu_`8A=#Z8HyNk8H$1Ie1f()4q$v|l(25SZ`Ac?9y5hw?eEtt-DpHVg4lR<$2B$UmN2Q;~yAqOax!jKLm z6@a#80Od-6ERZS?y9_K|1SAuIsz5sPpmaLWeW_4g`B1$eGZGn+faaD>W@HlAC&_sX fC6gCA%1#!T!XXLsJH(}6$Ad#8W&31iCSFAV{&7GL delta 19 bcmdmThGW4=j)oS-EljhRx9hPou_*!oP`3tU diff --git a/iOSClient/Supporting Files/lv.lproj/Localizable.strings b/iOSClient/Supporting Files/lv.lproj/Localizable.strings index 05ab70a3eb2c9229498e9a63dd4e8be17ec9e2e9..973b3768a8292ccce868bd5d1bc5f368968027c8 100644 GIT binary patch delta 256 zcmeyelcQrVN5d9IjX#P?4Dk#l450}}9E=K+6HCQ?6@aE@FeCy=1qM$b2C>V4$`pV$ zr2^S0Kvp6{9+XZ8i-KfJfG&XO1@RIYl7RfO$&5_mNcIb3v447ED5Lmv2O&lQ=@78v VLEZrw0CgSMlPTL3|1e%w008FMJW2on delta 17 ZcmeC!%kgC=N5d9IjX&G>{AE0&002(d2)O_N diff --git a/iOSClient/Supporting Files/mk.lproj/Localizable.strings b/iOSClient/Supporting Files/mk.lproj/Localizable.strings index fbb883ae61c43a5767ee1fc11f7019daf03efe72..fc159eeeed3c62881f3d1c89e177cbc0b06fa843 100644 GIT binary patch delta 264 zcmX@Ji{rswj)pCa4Sy7s7~&a97*ZLE7;+hkf$V&SG$2_F7Aa%MWJsQ__>WO`^0Q4s ztYE?EiU$~lMUizRG9&|GDnr3!M?v|?3F|ph6&OHb*$jC=)5;lgfO07e=|EBeXj2AI zt^~;P1Y!`o3@ly*Bol$EKsxiFbUM&YsZd?{P`w~C5*d*zrT?Q5}0+NY9RUn;tP&yrGYbsP%K2$Hrj6{Ycpt)s}8JWZp&R~Z+WBSBkpbI}p XZ~kP^j)pCad_NSG7~&a97*ZLE7;+hkf$V&SG$2_F7Aa%MWJsRu=qo!pVuO%2 zk{D1{iNTtI3rM2sPGm?1!qmwV%_JvJ$lzo3WKdv8oczC7)K>v$O9n$CkW^p*iGtW= zKyws;Hm3sFDIk>$c~CkXEDDk>0lEmH7sN|sNCNW9CNnaL>yqFehJxu6Qy5i&-r(Vf SI+39O?Cq58>^~T{DgXfVTs<=Y delta 17 Zcmcbxg=5b~j)pCad_T4?`pLLX0RTzB1tZ5~ zvkd~eaB+rYpb8}hYX&YLiE2V3P!1$pFnuF0qiVV*g8~CcD4QVe{%9Q|FAXOlC8CbjsNG1YRfpq3U>2#nIQ=z)@p?X1PBr+rc%`KbE$Rtjp^B$%! as!E3djfD6e;!Lp1!6A~e-Sr3Kegyz|Q$U&k delta 17 ZcmbQSm7`@7N5d9IpC8*F{AApr002sD2zCGf diff --git a/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings b/iOSClient/Supporting Files/nb-NO.lproj/Localizable.strings index 07858b84b9d9a1a59b3b98a1a72fe577072d5c95..a8498df64f7aa86fb52b324d789fd87f84fb450c 100644 GIT binary patch delta 316 zcmX?gl;hqBj)oS-Elk@O6_ps`8A=#Z8HyNk8H$1Ie1E&X5DtnZl3` zBo%;8$N%V%LDuv0i{bpCOGQo}ri_m7$2Cj3IOS#zl;h(*-OTIVKBi5MV5x zthhmZ@|pEKoQVv{K$yxJ)(H zr2^S0Ae9VxP&yqf3X&~h$On@dV6}-1NkD$tWJV@&Y<5l;oXjXZxqy!c<}xmRxO;#m Or81;!U;dqOy8-~1&^dkp delta 17 Zcmeygnd9CDj)pCa>%MPy`pLLK0RU9|2;l$# diff --git a/iOSClient/Supporting Files/nl.lproj/Localizable.strings b/iOSClient/Supporting Files/nl.lproj/Localizable.strings index a5a9333a0175ccdd1ca64b1514522ab2d3603c24..c9046dc3cfb02033a4a4b089a402626b6b868661 100644 GIT binary patch delta 267 zcmexxlcVJ>M?(wa7A6Ir$tl|f1oIiv7~&a<8B!UF7|Iwj8Iq?TTKnaGd~gsBV#(-WUFs-}Aa6@i4Z8S;Qy${BKiQYj4SKvIFBgdqbc zR{~^#RDsxKVDTa#nFv$`(wPUP(}6BYh3d+O>IIpR$dCjyw`?*alQ=Jud(j;;`JkBm bWCvjmNsx~q9)LR(=mMadwoCFbT~`1A%Wpfu delta 19 bcmZp<%kkkRM?(wa7A6Ir?OS-6E+_y1RS5@- diff --git a/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings b/iOSClient/Supporting Files/nn_NO.lproj/Localizable.strings index 53086c348c0dc9c84465428c2980b6f9a3afd960..9e4eed9d6ed0d66fd3130dae8e1962c44eb02523 100644 GIT binary patch delta 215 zcmcbzk>kY{j)pCa3O^>RZ4eO5XGmj+XDDV!Whi1OW5{Gkp8heEQGRmX1_8$6$@Lq= zCu?os;Y?&m2EtT^g2{@u@{=!!b1*9~Bu-{55%pDIC}GH8NCc7!44yy?VwV9`Dgcd3 z1+r6stVD)9D4h-#1<95$0+a-T6?p6Q*W`Z`d delta 17 ZcmaE{h2zRbj)pCa3O}}Q`N_CN0RU0F2)FJFr+dRG2}871KIfuX+W|VEKNQ)3Xqk^kO!sH!J;795}<1!dO^HIh9n@rY%(L0IB9N~zOa!|e)xB;LT@9V~A%cW=LfyVknzF@dcygC7G zff5P~ASDVgB@CGi$qcEJ?{5|7Oa!ukY=(l#4@>1IA7E!o_XMf~iDon80dqxj?p2L(W$5QljJ?pUA`fR5T8$;q@?Xz~X$mgy@Z82P5BbujX6 KSCC-};{yOX14zyQ delta 31 ncmbPsgX7y3j)oS-EldfV+rMxztr22%WXNI2*}hShDU}ZZ%2NvZ diff --git a/iOSClient/Supporting Files/ps.lproj/Localizable.strings b/iOSClient/Supporting Files/ps.lproj/Localizable.strings index a498f5c03ea40387204bf370b939918001be8921..4ef23dff4172c71934cfa901cc88fe37d4370279 100644 GIT binary patch delta 296 zcmcbyf#c0)j)pCaE56GrF~l>JFr+dRG2}871KIfuX+W|VEK)XIa51C!WQAW`lYgui z(uE2#WHKZJrIi@08MuHXs`f;n97wic@9H|NnAi->gJfPX-3^_o_6ozyl zsQ|P$11MJlWO)KHh+PI2F9MQ@Kvf`}c~CkX=)zQ}u6(FokQs>#NkDVUCNnaLljuN4 dG5P5aq8Yg+|5?w$4|g{>FjBTJ{LZ*t0RXb~L-zmx delta 17 ZcmaE}nd8O=j)pCaE52{H`N_CJ0RU6<2+05d diff --git a/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings b/iOSClient/Supporting Files/pt-BR.lproj/Localizable.strings index 6c90f773e83de4b23c287c7479d5d740ed718053..f9cb6b1bd6b0374a228fc656dad2d6f81fddc4ec 100644 GIT binary patch delta 266 zcmaFxn&Znmj)oS-Eldre8dgdJ?+ z#S97zAQcM8Di~5H3+@o-Ok_v~!c>NW$rB~zCohQPNL63}iDfh70riwK@=%nqH!c6H(0Q~_!JOBUy delta 19 acmezJj^n{=j)oS-Eldr<+eJi~5|jX4><4fF diff --git a/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings b/iOSClient/Supporting Files/pt-PT.lproj/Localizable.strings index 4aa4af87e9c873ab10af61e4a53041bdc6f46cd9..89ae56b6890f69ddb443081b55808edf0722fd6c 100644 GIT binary patch delta 245 zcmeA;$1&$3M?(wa7A6O_$q`!x1oIiv7~&a<8B!UF7|Iwj8Iq?LmN3drKX8qag};a) z7bv5^08*pCP&|3#R`JO(TX{GW8Ipl8m7!qr#b>JNoW@Hj)#O4M? darwytJ2@sV*viEZcNx%5pewdpvN4@k001+sJVgKi delta 19 bcmbPpk)z`rM?(wa7A6O_?N`{DPAC8XP$CCW diff --git a/iOSClient/Supporting Files/ro.lproj/Localizable.strings b/iOSClient/Supporting Files/ro.lproj/Localizable.strings index ea0c23a35f66557f9f346f7911852193376b6daf..24bf6b7809ea5b1cfbb701cecd827f32ea223fa2 100644 GIT binary patch delta 301 zcmaEIg5$?&j)oS-ElhKm<&_xX8A=#Z8HyNk8H$1Ie1B5B>l7R}87_1q%fF!B`i9k7!Y{7KH`;4mTo(u{MAfarAJfPX-3^_ol6ozyl zsQ|P$11MJlWPwzH*kxexA|ROvR0YzR2c^@2E=+~$%7^L&nUTnl1T?p7G9!~XY0jJc bQA{4>F>#2`A+7{F92_1g+ov)!omT(=jt@e+ delta 19 bcmexyn&Zg{j)oS-ElhKmw;QlBolpP(TYm?z diff --git a/iOSClient/Supporting Files/ru.lproj/Localizable.strings b/iOSClient/Supporting Files/ru.lproj/Localizable.strings index ba48653cf77f275c0218f5ec1424f22bab199c99..fa3560f72dd8f44be6797832e8962f29231f2f30 100644 GIT binary patch delta 314 zcmcchisRi|j)oS-ElefC@=6Tx3?&Sy3`GpN48=fpK0_LiEC!2|F=S3x{LUyjUEvQS zhb>Hv0$7a#LJdPQP_+_+H3JurL^UlDC@y&y9Z8IpkJmQ7}464!8A=#Z8HyNk8H$1Ie1mB|mw=PL5Os29Q`bLmtrRa)unBTna-v zkW>I#n*o$70kS-S7{o3Eix&aOM4&2=&O9ic4s>8DR98M!FUX8Uh9sc5Ws@11#7T4C ZbjC(TRiL+c_~A|lheOKtvyx1Y6#&iULBIe2 delta 19 bcmX@|gJZ*2j)oS-ElgJ=w`WK*-BADlULpum diff --git a/iOSClient/Supporting Files/si.lproj/Localizable.strings b/iOSClient/Supporting Files/si.lproj/Localizable.strings index d499c373f0e18c7cf15bfeccbc54ac3ee78faa9a..d527ee6115c0e5b8ac9f09db7e5964b94c087a18 100644 GIT binary patch delta 296 zcmdnBo#Wgtj)pCa-+sv}F~l>JFr+dRG2}871KIfuX+W|VEK zpa52&fUE$hREfcwfeT2Y8kNY941}o+1(O|hSkM1~}wxn+|XnZ$LG zyZ}^5z=hKViy2j?3urU4h(iJb;!d#Z!NHTV{U#^VZkb6(IHn6|FtKc3pvL6H0sxx8 BMBxAc delta 27 jcmex%gX7Uvj)oS-EldwMx0i4;ZINM2-L9#@rPINpAlVY2%@DmHULr#hkY6^Lkx5(^$+3jo!cZ{zqPYC@ cfbEQ2;t(H$i~>88p#U5XDccwFGW}El0Iz;Nr2qf` delta 19 bcmZ4YfMeEOj)oS-ElewTx7+YDeNq4bRdffO diff --git a/iOSClient/Supporting Files/sq.lproj/Localizable.strings b/iOSClient/Supporting Files/sq.lproj/Localizable.strings index f3b12dc2c17caab9dba35d667a1dc7f4c9186ce1..f64cc8bc78dea2f07cfdf4dff1b45f6d7a626635 100644 GIT binary patch delta 232 zcmeC%$Fb-jN5d9IkAIWPHVN?NGo&%ZGZZtVG88eCO>bPuC_cI2H`nAnn}isPC!gOW zKDlZW4`(7nG7zRR6iil>l%Jf?%8{zT020e)$YaQ7C}+q4%B3)*14#vj5{3+*TnUin z3B(|F8CbjsNG1YRfpq3U>2#o_sZd?{P`w~C5*d{bis=XI80DvbNM_`i Wyl)d1KiqXdTY>J_?)Z=KtO5YZXg-Pn delta 17 ZcmZ2=Ht4v`H$Zl0%oc(UO>L+E5yL5WUqO)U8xO(XLiJsHoVR zhgve=pcg%ODC!{x%i={#yjPH*c+v*Mvm(-4o%d=)MV5WMH}lQRH}g&BZEX2{ta;VP z>vt2qqp~VTzO&7ej;zzGHOSMq7m&6Ux+D)Xev;7z z_8vih(#EyhQE=#U8wM7FnJ}0EvxrLJa95iK?ksJTBufnSTj-a*w9yNmn|wiO@&6MabasFJ}1TF|5Y1dM1i5 z4@Ql;JSvN_LYq&aFKjoVZsF=1Gw$ltx?l3wp_iuaGo|`#=-GkyZtaR^M1>2N7*!#^ z1H0+bM{vV;pCA~-_LGEN`%S9K7*|oHLkPA}5*eX5fe|Sh7sQ-6A##|tQc2ZNw~@bN z@+zjnEOVkPOp)V|%VJhs66eJ{-{-_>KIgUN3Vm%t3WIAsIJh#D{1fJjQ~b?}0N1Pi zxOC3EIn5muv_{jMd_PxbVtlHRs+St7r}Z0Wi^mqFdlysG$TEBO{)*m`VnpuaZXND< zYeoh3y8NrHQCVv&S(&pHqT1l#@Jhe^AEJ~!2B}6XF*MK(&}%owE7cv-gkCJIAN#@$ IBXTzT6GRc8Bme*a delta 650 zcmb7CJxc>Y5S>jGl0t~VG*MO%D+v}sB!!I;6oN`HorRmrU5qAo;c^CIW8qIoabO`f zLQ1Vx(%Oing|=#u-{G4{Bf&-%_U7Zwn>VvJ`bd7iB_A%$(l(uvA)lJ$lBO=~9*#o+ zH4quz?PP~fX8o#6Erbo#sSS(anj)0`RiuFlKyeNXS83n_pqbvKkUEG)I4)XfFb;4J zfVe^44lSGhH2_Tchh8rE;Uv+Cmfrz+axFV$V$tU)n9nvuP+E`BswJvPe9J!JXm aI97r`kk)Z3nJ91kznXstyOm0uE&l-V;f#?0 diff --git a/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings b/iOSClient/Supporting Files/sr@latin.lproj/Localizable.strings index 6f1fdba5673227fa0ae84f577bb47e82aebf7276..0f743833e483516594787c62feddcb3112add691 100644 GIT binary patch delta 296 zcmeyjiDS|>j)pCaJATM3F~l>JFr+dRG2}871KIfuX+W|VEK&0#g3L%{NCKK$Hkpx0T$=<3 fPQMt)C_7m|kZbae4LtmCSAzp1W&6e-jAs=9mZL*i delta 17 ZcmbQVjpN@Yj)pCaJAQ2U`Neol0RT~72+{xm diff --git a/iOSClient/Supporting Files/sv.lproj/Localizable.strings b/iOSClient/Supporting Files/sv.lproj/Localizable.strings index b389b70722ff2385099572f7744befa8c816628b..275b1173af015ae953b93e3bd1524dc65f35fc85 100644 GIT binary patch delta 254 zcmaEMh~v{yj)oS-DNK5kO*RVf<};)*#4{8#q%ssSluiG5pHXtUfDWU?;RGSA@^%Q7w9#A$FsIH75lOYEPvw`Z17?c>S y8MqjfCYx^LXNS6Kx?u#P>|}voT$2w-aL7WGfgA#LGSG04w-Q0dZB=KoR|Ei{;XWP! delta 18 acmex#l;hbUj)oS-DNK6XcQG<0z_ diff --git a/iOSClient/Supporting Files/sw.lproj/Localizable.strings b/iOSClient/Supporting Files/sw.lproj/Localizable.strings index 8d2019fe8a07c314665e083425d80963c167bce2..0145ef24a859d37294b0c9440c131a3c99ea101c 100644 GIT binary patch delta 210 zcmX@Lf#cq0j)pCav%XJ0wq8ImpCOGQo}ri_m7$2Cj3JXDd9tFf>|~w|LX5?eqS)K`I_gdu|=5lAX9fJ8y;GN4%sK+{rz z>=cknhCC>p4i*K;mN4Xl$qcaCM1~|FzicuilQ_awPN=O61=9^v7*&Bz;^Bu20S!oH MNZCI5JL7f*0OE2seEJFr+dRG2}871KIfuX+W|VEK)YzehH)a`If9H|NnAi->gJfPX-3^_o_6ozyl zsQ|P$11MJlWO)KHh+PI2F9MQ@Kvf`}c~CkX=)zQ}u6(FokQs>#NkDVUCNnaLYm?x> i>Hh;6WhZ|~;gSvk8Vd0|#Gzoh|%9Q|Fo!*zrT?Q5}0+NY9RUn;tP&yrGb1GC@uKA1)xh(f$S6@E0G}&N~eQGL9!)4+aY>EyhMg1Air!fBa^r;)Xl`X ZXS!h#qpCErr{GQn2S>_wdv>N^B><4vK34z$ delta 19 bcmZ2>jbqYfj)oS-Elh6g+i!6&`6vMZQHTcv diff --git a/iOSClient/Supporting Files/uk.lproj/Localizable.strings b/iOSClient/Supporting Files/uk.lproj/Localizable.strings index b4cb84480a2a46ddc6269efd56df878e540cd3a6..44142d39d7b212d6467f7e5363ab8455a97aad47 100644 GIT binary patch delta 227 zcmeA>!m;Q$M?(wa7A70U$zQez@a8k5F~lq%#jnrvt4_h3d+O>IIpR$dCjyw`?*alQ=dvOm_@oR0TSahac`N PpoKsuY&T_Ox~TvF^ddN% delta 19 bcmZ2SkM1~}wxn+|XnZyyU;Dow@p~c diff --git a/iOSClient/Supporting Files/uz.lproj/Localizable.strings b/iOSClient/Supporting Files/uz.lproj/Localizable.strings index 8d2019fe8a07c314665e083425d80963c167bce2..0145ef24a859d37294b0c9440c131a3c99ea101c 100644 GIT binary patch delta 210 zcmX@Lf#cq0j)pCav%XJ0wq8ImpCOGQo}ri_m7$2Cj3JXDd9tFf>|~w|LX5?eqS)K`I_gdu|=5lAX9fJ8y;GN4%sK+{rz z>=cknhCC>p4i*K;mN4Xl$qcaCM1~|FzicuilQ_awPN=O61=9^v7*&Bz;^Bu20S!oH MNZCI5JL7f*0OE2seEVa)6R44Cz2pfuV#U z11MJlWO)KHh+PI2F9MQ@Kvf`}c~CkX=$=%lu6(FokQs>#NkDVUCNnaL^C7t!s1nUR Y8-J?GAbSDsQlJAsPTI~^$jBrK0O>?KTL1t6 delta 17 ZcmbO;ovmXETf-Jcp2F=5iWvV$002I~2J8R; diff --git a/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings b/iOSClient/Supporting Files/zh-Hant-TW.lproj/Localizable.strings index 9e521f4032a38ec085ef617fe5e2493dd9de605f..ad717e5862b1db8e877c2f2e2cf29c16f3cfc6cd 100644 GIT binary patch delta 252 zcmaEIla%NSpbz8IB@^~ delta 17 Ycmexyg6+vswuUW?b* zFlkpsZz{P-W8_bZ2|79mHQ0C(L S6uUI}dN4@+_Ld^Xa}odpJwZqS delta 47 zcmV+~0MP%?m|~w|LX5?eqS)K`I_gdu|=5lAX9fJ8y;GN4%sK+{rz z>=cknhCC>p4i*K;mN4Xl$qcaCM1~|FzicuilQ_awPN=O61=9^v7*&Bz;^Bu20S!oH MNZCI5JL7f*0OE2seE