@@ -62,7 +62,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
6262 case " open " :
6363 self . openApp ( rid: payload. rid, target: payload. target)
6464 case " actioning " :
65- self . actionHandler ( rid: payload. rid, target: payload. target)
65+ self . actionHandler ( rid: payload. rid, target: payload. target, trigger : payload . trigger ?? " unknown " )
6666 case " Create File " :
6767 self . createFile ( rid: payload. rid, target: payload. target)
6868 case " common-dirs " :
@@ -80,15 +80,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
8080
8181 func openCommonDirs( target: [ String ] ) {
8282 logger. info ( " 开始打开常用目录,目标路径: \( target) " )
83-
83+
8484 for dirPath in target {
8585 let path = dirPath. removingPercentEncoding ?? dirPath
8686 let url = URL ( fileURLWithPath: path, isDirectory: true )
87-
87+
8888 logger. info ( " 正在打开目录: \( path) " )
8989 NSWorkspace . shared. open ( url)
9090 }
91-
91+
9292 logger. info ( " 常用目录打开操作完成 " )
9393 }
9494
@@ -128,7 +128,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
128128 return filePath
129129 }
130130
131- func actionHandler( rid: String , target: [ String ] ) {
131+ func actionHandler( rid: String , target: [ String ] , trigger : String ) {
132132 guard let rcitem = appState. getActionItem ( rid: rid) else {
133133 logger. warning ( " when createFile,but not have fileType " )
134134 return
@@ -138,24 +138,25 @@ class AppDelegate: NSObject, NSApplicationDelegate {
138138 case " copy-path " :
139139 copyPath ( target)
140140 case " delete-direct " :
141- deleteFoldorFile ( target)
141+ deleteFoldorFile ( target, trigger )
142142 case " unhide " :
143- unhideFilesAndDirs ( target)
143+ unhideFilesAndDirs ( target, trigger )
144144 case " hide " :
145- hideFilesAndDirs ( target)
145+ hideFilesAndDirs ( target, trigger )
146146 default :
147147 logger. warning ( " no action id matched " )
148148 }
149149 }
150+
150151 // 显示目标文件夹下的隐藏的所有文件和文件夹
151- func unhideFilesAndDirs( _ target: [ String ] ) {
152+ func unhideFilesAndDirs( _ target: [ String ] , _ trigger : String ) {
152153 logger. info ( " 开始取消隐藏文件和目录,目标路径: \( target) " )
153154 if let dirPath = target. first {
154155 let fileManager = FileManager . default
155156 let path = dirPath. removingPercentEncoding ?? dirPath
156157 logger. info ( " 处理主目录: \( path) " )
157158 var url = URL ( fileURLWithPath: path)
158-
159+
159160 // 仅处理目录下一级的内容
160161 do {
161162 let contents = try fileManager. contentsOfDirectory ( at: url, includingPropertiesForKeys: [ . isHiddenKey] , options: [ . skipsPackageDescendants] )
@@ -172,7 +173,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
172173 } catch {
173174 logger. error ( " 获取目录内容失败: \( error) " )
174175 }
175-
176+
176177 // 处理目录本身
177178 do {
178179 var resourceValues = URLResourceValues ( )
@@ -185,19 +186,22 @@ class AppDelegate: NSObject, NSApplicationDelegate {
185186 logger. info ( " 取消隐藏操作完成,共处理目录: \( path) " )
186187 }
187188 }
189+
188190 // 隐藏目标文件或文件夹
189- func hideFilesAndDirs( _ target: [ String ] ) {
190- logger. info ( " 开始隐藏文件和目录,目标路径: \( target) " )
191- if let dirPath = target. first {
192- let fileManager = FileManager . default
191+ func hideFilesAndDirs( _ target: [ String ] , _ trigger: String ) {
192+ logger. info ( " 开始隐藏文件和目录,目标路径: \( target) , 触发器: \( trigger) " )
193+ let fileManager = FileManager . default
194+
195+ if trigger == " ctx-container " , let dirPath = target. first {
193196 let path = dirPath. removingPercentEncoding ?? dirPath
194197 logger. info ( " 处理主目录: \( path) " )
195198 var url = URL ( fileURLWithPath: path)
196-
197- // 递归处理目录下的所有内容
198- if let enumerator = fileManager. enumerator ( at: url, includingPropertiesForKeys: [ . isHiddenKey] , options: [ . skipsHiddenFiles, . skipsPackageDescendants] ) {
199- for case var fileURL as URL in enumerator {
200- // 如果是受保护的文件路径,跳过
199+
200+ // 仅处理目录下一级的内容
201+ do {
202+ let contents = try fileManager. contentsOfDirectory ( at: url, includingPropertiesForKeys: [ . isDirectoryKey] , options: [ . skipsPackageDescendants] )
203+ for case var fileURL in contents {
204+ // 如果是受保护的文件路径,跳过
201205 if Utils . isProtectedFolder ( fileURL. path) {
202206 logger. warning ( " 跳过受保护的文件路径: \( fileURL. path) " )
203207 continue
@@ -211,19 +215,31 @@ class AppDelegate: NSObject, NSApplicationDelegate {
211215 logger. error ( " 隐藏失败: \( fileURL. path) : \( error) " )
212216 }
213217 }
214- }
215-
216- // 处理目录本身
217- do {
218- var resourceValues = URLResourceValues ( )
219- resourceValues. isHidden = true
220- try url. setResourceValues ( resourceValues)
221- logger. info ( " 成功隐藏主目录: \( path) " )
222218 } catch {
223- logger. error ( " 隐藏主目录失败: \( path) : \( error) " )
219+ logger. error ( " 获取目录内容失败: \( error) " )
220+ }
221+ } else if trigger == " ctx-items " {
222+ for dirPath in target {
223+ let path = dirPath. removingPercentEncoding ?? dirPath
224+ logger. info ( " 处理路径: \( path) " )
225+ var url = URL ( fileURLWithPath: path)
226+
227+ // 处理单个文件或目录
228+ if Utils . isProtectedFolder ( path) {
229+ logger. warning ( " 跳过受保护的文件路径: \( path) " )
230+ continue
231+ }
232+ do {
233+ var resourceValues = URLResourceValues ( )
234+ resourceValues. isHidden = true
235+ try url. setResourceValues ( resourceValues)
236+ logger. info ( " 成功隐藏: \( path) " )
237+ } catch {
238+ logger. error ( " 隐藏失败: \( path) : \( error) " )
239+ }
224240 }
225- logger. info ( " 隐藏操作完成,共处理目录: \( path) " )
226241 }
242+ logger. info ( " 隐藏操作完成 " )
227243 }
228244
229245 func copyPath( _ target: [ String ] ) {
@@ -236,13 +252,24 @@ class AppDelegate: NSObject, NSApplicationDelegate {
236252 }
237253 }
238254
239- func deleteFoldorFile( _ target: [ String ] ) {
240- logger. info ( " ---- deleteFoldorFile " )
255+ func deleteFoldorFile( _ target: [ String ] , _ trigger : String ) {
256+ logger. info ( " ---- deleteFoldorFile trigger: \( trigger ) " )
241257 let fm = FileManager . default
258+ // 如果是容器,无法删除
259+ if trigger == " ctx-container " {
260+ // 显示警告对话框
261+ let alert = NSAlert ( )
262+ alert. messageText = " 警告 "
263+ alert. informativeText = " 无法删除当前文件夹,请选择文件或子文件夹进行删除。 "
264+ alert. alertStyle = . warning
265+ alert. addButton ( withTitle: " 确定 " )
266+ alert. runModal ( )
267+ return
268+ }
242269
243270 for item in target {
244271 let decodedPath = item. removingPercentEncoding ?? item
245-
272+
246273 if Utils . isProtectedFolder ( decodedPath) {
247274 // 显示警告对话框
248275 let alert = NSAlert ( )
@@ -251,11 +278,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
251278 alert. alertStyle = . warning
252279 alert. addButton ( withTitle: " 确定 " )
253280 alert. runModal ( )
254-
281+
255282 logger. warning ( " 试图删除受保护的系统文件夹,操作已被阻止: \( decodedPath) " )
256283 continue
257284 }
258-
285+
259286 if let permDir = appState. dirs. first ( where: { permd in
260287 item. contains ( permd. url. path ( ) )
261288 } ) {
@@ -362,8 +389,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
362389 config. environment = rcitem. environment
363390
364391 if appUrl. path. hasSuffix ( " WezTerm.app " ) {
365-
366-
367392 // 创建一个 Process 实例
368393 let process = Process ( )
369394
@@ -411,7 +436,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
411436 }
412437
413438 func applicationWillTerminate( _ notification: Notification ) {
414- messager. sendMessage ( name: " quit " , data: MessagePayload ( action: " quit " ) )
439+ messager. sendMessage ( name: " quit " , data: MessagePayload ( action: " quit " , target : [ ] , trigger : " unknown " ) )
415440 logger. info ( " applicationWillTerminate " )
416441 }
417442}
0 commit comments