Browse Source

Merge pull request #2336 from nextcloud/GUI

GUI
Marino Faggiana 2 năm trước cách đây
mục cha
commit
c5bdb357d6

+ 2 - 2
Nextcloud.xcodeproj/project.pbxproj

@@ -3810,7 +3810,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 10;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
@@ -3873,7 +3873,7 @@
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 10;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = NKUJUXUJ3B;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;

+ 1 - 1
iOSClient/Extensions/UIAlertController+Extension.swift

@@ -44,7 +44,7 @@ extension UIAlertController {
                     }
                 }
             } else {
-                NCNetworking.shared.createFolder(fileName: fileNameFolder, serverUrl: serverUrl, account: urlBase.account, urlBase: urlBase.urlBase, userId: urlBase.userId, overwrite: false) { error in
+                NCNetworking.shared.createFolder(fileName: fileNameFolder, serverUrl: serverUrl, account: urlBase.account, urlBase: urlBase.urlBase, userId: urlBase.userId, overwrite: false, withPush: true) { error in
                     if let completion = completion {
                         completion(error)
                     } else if error != .success {

+ 5 - 2
iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

@@ -435,14 +435,17 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
               serverUrl == self.serverUrl,
               let account = userInfo["account"] as? String,
               account == appDelegate.account,
-              let e2ee = userInfo["e2ee"] as? Bool
+              let e2ee = userInfo["e2ee"] as? Bool,
+              let withPush = userInfo["withPush"] as? Bool
         else { return }
 
         if e2ee {
             reloadDataSourceNetwork(forced: true)
         } else if let metadata = NCManageDatabase.shared.getMetadataFromOcId(ocId)  {
             reloadDataSource()
-            pushMetadata(metadata)
+            if withPush {
+                pushMetadata(metadata)
+            }
         }
     }
 

+ 160 - 72
iOSClient/Main/Create cloud/NCUploadAssets.swift

@@ -53,7 +53,11 @@ class NCUploadAssets: NSObject, ObservableObject, NCCreateFormUploadConflictDele
     @Published var assets: [TLPHAsset]
     @Published var userBaseUrl: NCUserBaseUrl
     @Published var dismiss = false
+    @Published var isUseAutoUploadFolder: Bool = false
+    @Published var isUseAutoUploadSubFolder: Bool = false
     @Published var previewStore: [PreviewStore] = []
+    @Published var showHUD: Bool = false
+    @Published var uploadInProgress: Bool = false
 
     var metadatasNOConflict: [tableMetadata] = []
     var metadatasUploadInConflict: [tableMetadata] = []
@@ -67,10 +71,14 @@ class NCUploadAssets: NSObject, ObservableObject, NCCreateFormUploadConflictDele
     }
 
     func loadImages() {
+        var previewStore: [PreviewStore] = []
         DispatchQueue.global().async {
             for asset in self.assets {
                 guard let image = asset.fullResolutionImage?.resizeImage(size: CGSize(width: 300, height: 300), isAspectRation: true), let localIdentifier = asset.phAsset?.localIdentifier else { continue }
-                self.previewStore.append(PreviewStore(id: localIdentifier, image: image, asset: asset))
+                previewStore.append(PreviewStore(id: localIdentifier, image: image, asset: asset))
+            }
+            DispatchQueue.main.async {
+                self.previewStore = previewStore
             }
         }
     }
@@ -98,13 +106,37 @@ class NCUploadAssets: NSObject, ObservableObject, NCCreateFormUploadConflictDele
     }
 
     func dismissCreateFormUploadConflict(metadatas: [tableMetadata]?) {
+        guard let metadatas = metadatas else {
+            self.showHUD = false
+            self.uploadInProgress.toggle()
+            return
+        }
+
+        func createProcessUploads() {
+            if !self.dismiss {
+                NCNetworkingProcessUpload.shared.createProcessUploads(metadatas: metadatas, completion: { _ in
+                    self.dismiss = true
+                })
+            }
+        }
 
-        if let metadatas = metadatas {
-            NCNetworkingProcessUpload.shared.createProcessUploads(metadatas: metadatas, completion: { _ in
-                self.dismiss = true
-            })
+        if isUseAutoUploadFolder {
+            DispatchQueue.global().async {
+                let assets = self.assets.compactMap { $0.phAsset }
+                let result = NCNetworking.shared.createFolder(assets: assets, selector: NCGlobal.shared.selectorUploadFile, useSubFolder: self.isUseAutoUploadSubFolder, account: self.userBaseUrl.account, urlBase: self.userBaseUrl.urlBase, userId: self.userBaseUrl.userId, withPush: false)
+                DispatchQueue.main.async {
+                    self.showHUD = false
+                    self.uploadInProgress.toggle()
+                    if result {
+                        createProcessUploads()
+                    } else {
+                        let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_error_createsubfolders_upload_")
+                        NCContentPresenter.shared.showError(error: error)
+                    }
+                }
+            }
         } else {
-            self.dismiss = true
+            createProcessUploads()
         }
     }
 }
@@ -208,11 +240,12 @@ struct UploadAssetsView: View {
 
         var metadatasNOConflict: [tableMetadata] = []
         var metadatasUploadInConflict: [tableMetadata] = []
+        let autoUploadPath = NCManageDatabase.shared.getAccountAutoUploadPath(urlBase: uploadAssets.userBaseUrl.urlBase, userId: uploadAssets.userBaseUrl.userId, account: uploadAssets.userBaseUrl.account)
+        var serverUrl = uploadAssets.isUseAutoUploadFolder ? autoUploadPath : uploadAssets.serverUrl
 
         for asset in uploadAssets.assets {
             guard let asset = asset.phAsset, let previewStore = uploadAssets.previewStore.first(where: { $0.id == asset.localIdentifier }) else { continue }
 
-            let serverUrl = uploadAssets.serverUrl
             var livePhoto: Bool = false
             let creationDate = asset.creationDate ?? Date()
             let fileName = CCUtility.createFileName(asset.value(forKey: "filename") as? String,
@@ -227,6 +260,16 @@ struct UploadAssetsView: View {
                 livePhoto = true
             }
 
+            // Auto upload with subfolder
+            if uploadAssets.isUseAutoUploadSubFolder {
+                let dateFormatter = DateFormatter()
+                dateFormatter.dateFormat = "yyyy"
+                let yearString = dateFormatter.string(from: creationDate)
+                dateFormatter.dateFormat = "MM"
+                let monthString = dateFormatter.string(from: creationDate)
+                serverUrl = autoUploadPath + "/" + yearString + "/" + monthString
+            }
+
             // Check if is in upload
             let isRecordInSessions = NCManageDatabase.shared.getAdvancedMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@ AND session != ''", uploadAssets.userBaseUrl.account, serverUrl, fileName), sorted: "fileName", ascending: false)
             if !isRecordInSessions.isEmpty { continue }
@@ -264,13 +307,7 @@ struct UploadAssetsView: View {
             }
         }
 
-        // Verify if file(s) exists
-        if !metadatasUploadInConflict.isEmpty {
-            completion(metadatasNOConflict, metadatasUploadInConflict)
-        } else {
-            NCNetworkingProcessUpload.shared.createProcessUploads(metadatas: metadatasNOConflict, completion: { _ in })
-            completion(metadatasNOConflict, metadatasUploadInConflict)
-        }
+        completion(metadatasNOConflict, metadatasUploadInConflict)
     }
 
     func presentedQuickLook(index: Int) {
@@ -298,8 +335,8 @@ struct UploadAssetsView: View {
     var body: some View {
 
         NavigationView {
-            List {
-                if !uploadAssets.previewStore.isEmpty {
+            ZStack(alignment: .top) {
+                List {
                     Section(header: Text(NSLocalizedString("_modify_photo_", comment: "")), footer: Text(NSLocalizedString("_modify_photo_desc_", comment: ""))) {
                         ScrollView(.horizontal) {
                             LazyHGrid(rows: gridItems, alignment: .center, spacing: 10) {
@@ -342,84 +379,132 @@ struct UploadAssetsView: View {
                             }
                         }
                     }
-                }
+                    .redacted(reason: uploadAssets.previewStore.isEmpty ? .placeholder : [])
 
-                Section(header: Text(NSLocalizedString("_mode_filename_", comment: ""))) {
+                    Section {
 
-                    Toggle(NSLocalizedString("_maintain_original_filename_", comment: ""), isOn: $isMaintainOriginalFilename)
+                        Toggle(isOn: $isMaintainOriginalFilename, label: {
+                            Text(NSLocalizedString("_maintain_original_filename_", comment: ""))
+                                .font(.system(size: 15))
+                        })
                         .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.brand)))
 
-                    if !isMaintainOriginalFilename {
-                        Toggle(NSLocalizedString("_add_filenametype_", comment: ""), isOn: $isAddFilenametype)
+                        if !isMaintainOriginalFilename {
+                            Toggle(isOn: $isAddFilenametype, label: {
+                                Text(NSLocalizedString("_add_filenametype_", comment: ""))
+                                    .font(.system(size: 15))
+                            })
                             .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.brand)))
+                        }
+                    }
+                    .complexModifier { view in
+                        if #available(iOS 15, *) {
+                            view.listRowSeparator(.hidden)
+                        }
                     }
-                }
 
-                Section {
+                    Section {
 
-                    HStack {
-                        Label {
-                            if NCUtilityFileSystem.shared.getHomeServer(urlBase: uploadAssets.userBaseUrl.urlBase, userId: uploadAssets.userBaseUrl.userId) == uploadAssets.serverUrl {
-                                Text("/")
-                                    .frame(maxWidth: .infinity, alignment: .trailing)
-                            } else {
-                                Text(self.getTextServerUrl(uploadAssets.serverUrl))
-                                    .frame(maxWidth: .infinity, alignment: .trailing)
+                        Toggle(isOn: $uploadAssets.isUseAutoUploadFolder, label: {
+                            Text(NSLocalizedString("_use_folder_auto_upload_", comment: ""))
+                                .font(.system(size: 15))
+                        })
+                        .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.brand)))
+
+                        if uploadAssets.isUseAutoUploadFolder {
+                            Toggle(isOn: $uploadAssets.isUseAutoUploadSubFolder, label: {
+                                Text(NSLocalizedString("_autoupload_create_subfolder_", comment: ""))
+                                    .font(.system(size: 15))
+                            })
+                            .toggleStyle(SwitchToggleStyle(tint: Color(NCBrandColor.shared.brand)))
+                        }
+
+                        if !uploadAssets.isUseAutoUploadFolder {
+                            HStack {
+                                Label {
+                                    if NCUtilityFileSystem.shared.getHomeServer(urlBase: uploadAssets.userBaseUrl.urlBase, userId: uploadAssets.userBaseUrl.userId) == uploadAssets.serverUrl {
+                                        Text("/")
+                                            .font(.system(size: 15))
+                                            .frame(maxWidth: .infinity, alignment: .trailing)
+                                    } else {
+                                        Text(self.getTextServerUrl(uploadAssets.serverUrl))
+                                            .font(.system(size: 15))
+                                            .frame(maxWidth: .infinity, alignment: .trailing)
+                                    }
+                                } icon: {
+                                    Image("folder")
+                                        .renderingMode(.template)
+                                        .resizable()
+                                        .scaledToFit()
+                                        .foregroundColor(Color(NCBrandColor.shared.brand))
+                                }
+                            }
+                            .contentShape(Rectangle())
+                            .onTapGesture {
+                                isPresentedSelect = true
                             }
-                        } icon: {
-                            Image("folder")
-                                .renderingMode(.template)
-                                .resizable()
-                                .scaledToFit()
-                                .foregroundColor(Color(NCBrandColor.shared.brand))
                         }
                     }
-                    .contentShape(Rectangle())
-                    .onTapGesture {
-                        isPresentedSelect = true
+                    .complexModifier { view in
+                        if #available(iOS 15, *) {
+                            view.listRowSeparator(.hidden)
+                        }
                     }
 
-                    HStack {
-                        Text(NSLocalizedString("_filename_", comment: ""))
-                        if isMaintainOriginalFilename {
-                            Text(getOriginalFilename())
-                                .frame(maxWidth: .infinity, alignment: .trailing)
+                    Section {
+                        HStack {
+                            Text(NSLocalizedString("_filename_", comment: ""))
+                            if isMaintainOriginalFilename {
+                                Text(getOriginalFilename())
+                                    .font(.system(size: 15))
+                                    .frame(maxWidth: .infinity, alignment: .trailing)
+                                    .foregroundColor(Color.gray)
+                            } else {
+                                TextField(NSLocalizedString("_enter_filename_", comment: ""), text: $fileName)
+                                    .font(.system(size: 15))
+                                    .modifier(TextFieldClearButton(text: $fileName))
+                                    .multilineTextAlignment(.trailing)
+                            }
+                        }
+                        if !isMaintainOriginalFilename {
+                            Text(setFileNameMask(fileName: fileName))
+                                .font(.system(size: 11))
                                 .foregroundColor(Color.gray)
-                        } else {
-                            TextField(NSLocalizedString("_enter_filename_", comment: ""), text: $fileName)
-                                .modifier(TextFieldClearButton(text: $fileName))
-                                .multilineTextAlignment(.trailing)
                         }
                     }
-                    if !isMaintainOriginalFilename {
-                        Text(setFileNameMask(fileName: fileName))
-                            .font(.system(size: 12))
-                            .foregroundColor(Color.gray)
-                    }
-                }
-                .complexModifier { view in
-                    if #available(iOS 15, *) {
-                        view.listRowSeparator(.hidden)
+                    .complexModifier { view in
+                        if #available(iOS 15, *) {
+                            view.listRowSeparator(.hidden)
+                        }
                     }
-                }
 
-                Button(NSLocalizedString("_save_", comment: "")) {
-                    save { metadatasNOConflict, metadatasUploadInConflict in
-                        if metadatasUploadInConflict.isEmpty {
-                            uploadAssets.dismiss = true
-                        } else {
-                            uploadAssets.metadatasNOConflict = metadatasNOConflict
-                            uploadAssets.metadatasUploadInConflict = metadatasUploadInConflict
-                            isPresentedUploadConflict = true
+                    Button(NSLocalizedString("_save_", comment: "")) {
+                        if uploadAssets.isUseAutoUploadFolder, uploadAssets.isUseAutoUploadSubFolder {
+                            uploadAssets.showHUD = true
+                        }
+                        uploadAssets.uploadInProgress.toggle()
+                        save { metadatasNOConflict, metadatasUploadInConflict in
+                            if metadatasUploadInConflict.isEmpty {
+                                uploadAssets.dismissCreateFormUploadConflict(metadatas: metadatasNOConflict)
+                            } else {
+                                uploadAssets.metadatasNOConflict = metadatasNOConflict
+                                uploadAssets.metadatasUploadInConflict = metadatasUploadInConflict
+                                isPresentedUploadConflict = true
+                            }
                         }
                     }
+                    .frame(maxWidth: .infinity)
+                    .buttonStyle(ButtonRounded(disabled: uploadAssets.uploadInProgress))
+                    .listRowBackground(Color(UIColor.systemGroupedBackground))
+                    .disabled(uploadAssets.uploadInProgress)
                 }
-                .frame(maxWidth: .infinity)
-                .buttonStyle(ButtonRounded(disabled: false))
-                .listRowBackground(Color(UIColor.systemGroupedBackground))
+                .navigationTitle(NSLocalizedString("_upload_photos_videos_", comment: ""))
+                .navigationBarTitleDisplayMode(.inline)
+
+                HUDView(showHUD: $uploadAssets.showHUD, textLabel: NSLocalizedString("_wait_", comment: ""), image: "doc.badge.arrow.up")
+                    .offset(y: uploadAssets.showHUD ? 5 : -200)
+                    .animation(.easeOut)
             }
-            .navigationTitle(NSLocalizedString("_upload_photos_videos_", comment: ""))
-            .navigationBarTitleDisplayMode(.inline)
         }
         .navigationViewStyle(StackNavigationViewStyle())
         .sheet(isPresented: $isPresentedSelect) {
@@ -436,6 +521,9 @@ struct UploadAssetsView: View {
         .onTapGesture {
             UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.endEditing(true)
         }
+        .onDisappear {
+            uploadAssets.dismiss = true
+        }
     }
 }
 

+ 1 - 1
iOSClient/NCGlobal.swift

@@ -357,7 +357,7 @@ class NCGlobal: NSObject {
 
     let notificationCenterProgressTask                          = "progressTask"                    // userInfo: account, ocId, serverUrl, status, progress, totalBytes, totalBytesExpected
 
-    let notificationCenterCreateFolder                          = "createFolder"                    // userInfo: ocId, serverUrl, account, e2ee
+    let notificationCenterCreateFolder                          = "createFolder"                    // userInfo: ocId, serverUrl, account, e2ee, withPush
     let notificationCenterDeleteFile                            = "deleteFile"                      // userInfo: ocId, fileNameView, serverUrl, account, classFile, onlyLocalCache
     let notificationCenterRenameFile                            = "renameFile"                      // userInfo: ocId, account
     let notificationCenterMoveFile                              = "moveFile"                        // userInfo: ocId, account, serverUrlFrom

+ 2 - 2
iOSClient/Networking/E2EE/NCNetworkingE2EECreateFolder.swift

@@ -61,7 +61,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         return error
     }
 
-    func createFolder(fileName: String, serverUrl: String, account: String, urlBase: String, userId: String) async -> (NKError) {
+    func createFolder(fileName: String, serverUrl: String, account: String, urlBase: String, userId: String, withPush: Bool) async -> (NKError) {
 
         var fileNameFolder = CCUtility.removeForbiddenCharactersServer(fileName)!
         var serverUrlFileName = ""
@@ -97,7 +97,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         await NCNetworkingE2EE.shared.unlock(account: account, serverUrl: serverUrl)
         
         if error == .success, let ocId = ocId {
-            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": ocId, "serverUrl": serverUrl, "account": account, "e2ee": true])
+            NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": ocId, "serverUrl": serverUrl, "account": account, "e2ee": true, "withPush": withPush])
         }
         return error
     }

+ 1 - 1
iOSClient/Networking/NCAutoUpload.swift

@@ -93,7 +93,7 @@ class NCAutoUpload: NSObject {
             }
             NKCommon.shared.writeLog("[INFO] Automatic upload, new \(assets.count) assets found [" + log + "]")
             // Create the folder for auto upload & if request the subfolders
-            if !NCNetworking.shared.createFolder(assets: assets, selector: selector, useSubFolder: account.autoUploadCreateSubfolder, account: account.account, urlBase: account.urlBase, userId: account.userId) {
+            if !NCNetworking.shared.createFolder(assets: assets, selector: selector, useSubFolder: account.autoUploadCreateSubfolder, account: account.account, urlBase: account.urlBase, userId: account.userId, withPush: false) {
                 if selector == NCGlobal.shared.selectorUploadAutoUploadAll {
                     let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "_error_createsubfolders_upload_")
                     NCContentPresenter.shared.showError(error: error, priority: .max)

+ 7 - 7
iOSClient/Networking/NCNetworking.swift

@@ -1030,7 +1030,7 @@ import Photos
 
     // MARK: - WebDav Create Folder
 
-    @objc func createFolder(fileName: String, serverUrl: String, account: String, urlBase: String, userId: String, overwrite: Bool = false, completion: @escaping (_ error: NKError) -> Void) {
+    @objc func createFolder(fileName: String, serverUrl: String, account: String, urlBase: String, userId: String, overwrite: Bool = false, withPush:Bool, completion: @escaping (_ error: NKError) -> Void) {
 
         let isDirectoryEncrypted = NCUtility.shared.isDirectoryE2EE(serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId)
         let fileName = fileName.trimmingCharacters(in: .whitespacesAndNewlines)
@@ -1038,16 +1038,16 @@ import Photos
         if isDirectoryEncrypted {
 #if !EXTENSION
             Task {
-                let error = await NCNetworkingE2EECreateFolder.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId)
+                let error = await NCNetworkingE2EECreateFolder.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId, withPush: withPush)
                 completion(error)
             }
 #endif
         } else {
-            createFolderPlain(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, overwrite: overwrite, completion: completion)
+            createFolderPlain(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, overwrite: overwrite, withPush: withPush, completion: completion)
         }
     }
 
-    private func createFolderPlain(fileName: String, serverUrl: String, account: String, urlBase: String, overwrite: Bool, completion: @escaping (_ error: NKError) -> Void) {
+    private func createFolderPlain(fileName: String, serverUrl: String, account: String, urlBase: String, overwrite: Bool, withPush:Bool, completion: @escaping (_ error: NKError) -> Void) {
 
         var fileNameFolder = CCUtility.removeForbiddenCharactersServer(fileName)!
 
@@ -1077,7 +1077,7 @@ import Photos
                         NCManageDatabase.shared.addDirectory(encrypted: metadata.e2eEncrypted, favorite: metadata.favorite, ocId: metadata.ocId, fileId: metadata.fileId, etag: nil, permissions: metadata.permissions, serverUrl: fileNameFolderUrl, account: account)
                     }
                     if let metadata = NCManageDatabase.shared.getMetadataFromOcId(metadataFolder?.ocId) {
-                        NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": metadata.ocId, "serverUrl": metadata.serverUrl, "account": metadata.account, "e2ee": false])
+                        NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterCreateFolder, userInfo: ["ocId": metadata.ocId, "serverUrl": metadata.serverUrl, "account": metadata.account, "e2ee": false, "withPush": withPush])
                     }
                 }
                 completion(error)
@@ -1085,7 +1085,7 @@ import Photos
         }
     }
 
-    func createFolder(assets: [PHAsset], selector: String, useSubFolder: Bool, account: String, urlBase: String, userId: String) -> Bool {
+    func createFolder(assets: [PHAsset], selector: String, useSubFolder: Bool, account: String, urlBase: String, userId: String, withPush:Bool) -> Bool {
 
         let autoUploadPath = NCManageDatabase.shared.getAccountAutoUploadPath(urlBase: urlBase, userId: userId, account: account)
         let serverUrlBase = NCManageDatabase.shared.getAccountAutoUploadDirectory(urlBase: urlBase, userId: userId, account: account)
@@ -1094,7 +1094,7 @@ import Photos
         func createFolder(fileName: String, serverUrl: String) -> Bool {
             var result: Bool = false
             let semaphore = DispatchSemaphore(value: 0)
-            NCNetworking.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId, overwrite: true) { error in
+            NCNetworking.shared.createFolder(fileName: fileName, serverUrl: serverUrl, account: account, urlBase: urlBase, userId: userId, overwrite: true, withPush: withPush) { error in
                 if error == .success { result = true }
                 semaphore.signal()
             }

+ 5 - 0
iOSClient/Scan document/NCUploadScanDocument.swift

@@ -451,6 +451,11 @@ struct UploadScanDocumentView: View {
                                 }
                         }
                     }
+                    .complexModifier { view in
+                        if #available(iOS 15, *) {
+                            view.listRowSeparator(.hidden)
+                        }
+                    }
 
                     VStack(spacing: 20) {