diff --git a/Examples/FileBrowser/FileBrowser (macOS)/DirectoryStructure.swift b/Examples/FileBrowser/FileBrowser (macOS)/DirectoryStructure.swift index 916ca66..ab27cbe 100644 --- a/Examples/FileBrowser/FileBrowser (macOS)/DirectoryStructure.swift +++ b/Examples/FileBrowser/FileBrowser (macOS)/DirectoryStructure.swift @@ -142,6 +142,10 @@ class DirectoryStructure { viewTree.nodes.count } + func rootNodes() -> [FileNode] { + viewTree.rootNodes() + } + func parent(of node: FileNode) -> FileNode? { viewTree.parent(of: node) } diff --git a/Examples/FileBrowser/FileBrowser (macOS)/FilesViewController.swift b/Examples/FileBrowser/FileBrowser (macOS)/FilesViewController.swift index e440016..f96d833 100644 --- a/Examples/FileBrowser/FileBrowser (macOS)/FilesViewController.swift +++ b/Examples/FileBrowser/FileBrowser (macOS)/FilesViewController.swift @@ -192,15 +192,29 @@ class FilesViewController: NSViewController { } } - func createDirectory(in parent: String? = nil) { - Task { - let name = NSLocalizedString("untitled folder", comment: "") - if let parent { - await dirTree.reload(directory: parent, outlineView) + func createNewFolder() { + let filenames = dirTree + .rootNodes() + .map { $0.name } + + let filename = { + let baseName = NSLocalizedString("untitled folder", comment: "") + if !filenames.contains(baseName) { + return baseName } else { - try await client.createDirectory(path: join(path, name)) - await dirTree.reload(directory: path, outlineView) + var i = 2 + while true { + let name = "\(baseName) \(i)" + if !filenames.contains(name) { + return name + } + i += 1 + } } + }() + Task { + try await client.createDirectory(path: join(path, filename)) + await dirTree.reload(directory: path, outlineView) } } @@ -616,8 +630,6 @@ extension FilesViewController: NSMenuItemValidation { let targetRows = outlineView.targetRows() switch menuItem.action { - case Selector({ "newFolderAction(_:)" }()): - return true case #selector(openMenuAction(_:)): guard selectedRows.count == 1 else { return false } guard let selectedRow = selectedRows.first else { return false } diff --git a/Examples/FileBrowser/FileBrowser (macOS)/WindowController.swift b/Examples/FileBrowser/FileBrowser (macOS)/WindowController.swift index 6ea500a..4bea653 100644 --- a/Examples/FileBrowser/FileBrowser (macOS)/WindowController.swift +++ b/Examples/FileBrowser/FileBrowser (macOS)/WindowController.swift @@ -179,7 +179,7 @@ class WindowController: NSWindowController { guard let navigationController = navigationController() else { return } guard let filesViewController = navigationController.topViewController as? FilesViewController else { return } - filesViewController.createDirectory() + filesViewController.createNewFolder() } @objc diff --git a/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index eec585f..a2625be 100644 --- a/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -16,7 +16,7 @@ "location" : "https://github.com/kishikawakatsumi/SMBClient.git", "state" : { "branch" : "main", - "revision" : "5a3ce1eafede6ab8cd98ad7fde01a571ccf81bce" + "revision" : "1a2683c12ff2a050f500db293ce0378bdb056411" } } ],