@@ -16,9 +16,12 @@ extension FileManagerView {
1616 @State private var isLoading = true
1717 @State private var error : String ?
1818
19+ @State private var isForceDeletePresented = false
1920 @State private var isFileImporterPresented = false
2021 @State private var showOptions = false
22+
2123 @State private var selectedElement : ExtendedElement ?
24+ @State private var deletedElement : ExtendedElement ?
2225
2326 @AppStorage ( . fileManagerSettings)
2427 private var settings : FileManagerSettings = . init( )
@@ -56,7 +59,7 @@ extension FileManagerView {
5659 elements: elements,
5760 displayType: settings. displayType,
5861 onTap: navigate,
59- onDelete: deleteFile,
62+ onDelete: { deleteFile ( $0 ) } ,
6063 onAction: { selectedElement = $0 }
6164 )
6265 }
@@ -98,9 +101,18 @@ extension FileManagerView {
98101 SelectedElementSheet (
99102 element: $0,
100103 onExport: downloadFile,
101- onDelete: deleteFile
104+ onDelete: { deleteFile ( $0 ) }
102105 )
103106 }
107+ . alert (
108+ " Directory is not empty " ,
109+ isPresented: $isForceDeletePresented,
110+ presenting: deletedElement
111+ ) { deletedElement in
112+ Button ( " Force Delete " , role: . destructive) {
113+ deleteFile ( deletedElement, force: true )
114+ }
115+ }
104116 . fileImporter (
105117 isPresented: $isFileImporterPresented,
106118 allowedContentTypes: [ UTType . item] ,
@@ -179,16 +191,28 @@ extension FileManagerView {
179191 }
180192 }
181193
182- private func deleteFile( _ extended: ExtendedElement ) {
194+ private func deleteFile(
195+ _ extended: ExtendedElement ,
196+ force: Bool = false
197+ ) {
198+ deletedElement = extended
183199 isLoading = true
184200 defer { isLoading = false }
185201
186202 Task {
203+ defer { selectedElement = nil }
187204 do {
188- try await fileManager. delete ( extended. type, at: path)
205+ try await fileManager. delete (
206+ extended. type,
207+ at: path,
208+ force: force
209+ )
189210 await load ( )
211+ } catch let error as RemoteFileManager . Error
212+ where error == . directoryIsNotEmpty && !force {
213+ self . isForceDeletePresented = true
190214 } catch {
191- self . error = String ( describing: error)
215+ self . error = String ( describing: error)
192216 }
193217 }
194218 }
0 commit comments