@@ -62,7 +62,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
62
62
case " open " :
63
63
self . openApp ( rid: payload. rid, target: payload. target)
64
64
case " actioning " :
65
- self . actionHandler ( rid: payload. rid, target: payload. target)
65
+ self . actionHandler ( rid: payload. rid, target: payload. target, trigger : payload . trigger ?? " unknown " )
66
66
case " Create File " :
67
67
self . createFile ( rid: payload. rid, target: payload. target)
68
68
case " common-dirs " :
@@ -80,15 +80,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
80
80
81
81
func openCommonDirs( target: [ String ] ) {
82
82
logger. info ( " 开始打开常用目录,目标路径: \( target) " )
83
-
83
+
84
84
for dirPath in target {
85
85
let path = dirPath. removingPercentEncoding ?? dirPath
86
86
let url = URL ( fileURLWithPath: path, isDirectory: true )
87
-
87
+
88
88
logger. info ( " 正在打开目录: \( path) " )
89
89
NSWorkspace . shared. open ( url)
90
90
}
91
-
91
+
92
92
logger. info ( " 常用目录打开操作完成 " )
93
93
}
94
94
@@ -128,7 +128,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
128
128
return filePath
129
129
}
130
130
131
- func actionHandler( rid: String , target: [ String ] ) {
131
+ func actionHandler( rid: String , target: [ String ] , trigger : String ) {
132
132
guard let rcitem = appState. getActionItem ( rid: rid) else {
133
133
logger. warning ( " when createFile,but not have fileType " )
134
134
return
@@ -138,24 +138,25 @@ class AppDelegate: NSObject, NSApplicationDelegate {
138
138
case " copy-path " :
139
139
copyPath ( target)
140
140
case " delete-direct " :
141
- deleteFoldorFile ( target)
141
+ deleteFoldorFile ( target, trigger )
142
142
case " unhide " :
143
- unhideFilesAndDirs ( target)
143
+ unhideFilesAndDirs ( target, trigger )
144
144
case " hide " :
145
- hideFilesAndDirs ( target)
145
+ hideFilesAndDirs ( target, trigger )
146
146
default :
147
147
logger. warning ( " no action id matched " )
148
148
}
149
149
}
150
+
150
151
// 显示目标文件夹下的隐藏的所有文件和文件夹
151
- func unhideFilesAndDirs( _ target: [ String ] ) {
152
+ func unhideFilesAndDirs( _ target: [ String ] , _ trigger : String ) {
152
153
logger. info ( " 开始取消隐藏文件和目录,目标路径: \( target) " )
153
154
if let dirPath = target. first {
154
155
let fileManager = FileManager . default
155
156
let path = dirPath. removingPercentEncoding ?? dirPath
156
157
logger. info ( " 处理主目录: \( path) " )
157
158
var url = URL ( fileURLWithPath: path)
158
-
159
+
159
160
// 仅处理目录下一级的内容
160
161
do {
161
162
let contents = try fileManager. contentsOfDirectory ( at: url, includingPropertiesForKeys: [ . isHiddenKey] , options: [ . skipsPackageDescendants] )
@@ -172,7 +173,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
172
173
} catch {
173
174
logger. error ( " 获取目录内容失败: \( error) " )
174
175
}
175
-
176
+
176
177
// 处理目录本身
177
178
do {
178
179
var resourceValues = URLResourceValues ( )
@@ -185,19 +186,22 @@ class AppDelegate: NSObject, NSApplicationDelegate {
185
186
logger. info ( " 取消隐藏操作完成,共处理目录: \( path) " )
186
187
}
187
188
}
189
+
188
190
// 隐藏目标文件或文件夹
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 {
193
196
let path = dirPath. removingPercentEncoding ?? dirPath
194
197
logger. info ( " 处理主目录: \( path) " )
195
198
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
+ // 如果是受保护的文件路径,跳过
201
205
if Utils . isProtectedFolder ( fileURL. path) {
202
206
logger. warning ( " 跳过受保护的文件路径: \( fileURL. path) " )
203
207
continue
@@ -211,19 +215,31 @@ class AppDelegate: NSObject, NSApplicationDelegate {
211
215
logger. error ( " 隐藏失败: \( fileURL. path) : \( error) " )
212
216
}
213
217
}
214
- }
215
-
216
- // 处理目录本身
217
- do {
218
- var resourceValues = URLResourceValues ( )
219
- resourceValues. isHidden = true
220
- try url. setResourceValues ( resourceValues)
221
- logger. info ( " 成功隐藏主目录: \( path) " )
222
218
} 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
+ }
224
240
}
225
- logger. info ( " 隐藏操作完成,共处理目录: \( path) " )
226
241
}
242
+ logger. info ( " 隐藏操作完成 " )
227
243
}
228
244
229
245
func copyPath( _ target: [ String ] ) {
@@ -236,13 +252,24 @@ class AppDelegate: NSObject, NSApplicationDelegate {
236
252
}
237
253
}
238
254
239
- func deleteFoldorFile( _ target: [ String ] ) {
240
- logger. info ( " ---- deleteFoldorFile " )
255
+ func deleteFoldorFile( _ target: [ String ] , _ trigger : String ) {
256
+ logger. info ( " ---- deleteFoldorFile trigger: \( trigger ) " )
241
257
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
+ }
242
269
243
270
for item in target {
244
271
let decodedPath = item. removingPercentEncoding ?? item
245
-
272
+
246
273
if Utils . isProtectedFolder ( decodedPath) {
247
274
// 显示警告对话框
248
275
let alert = NSAlert ( )
@@ -251,11 +278,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
251
278
alert. alertStyle = . warning
252
279
alert. addButton ( withTitle: " 确定 " )
253
280
alert. runModal ( )
254
-
281
+
255
282
logger. warning ( " 试图删除受保护的系统文件夹,操作已被阻止: \( decodedPath) " )
256
283
continue
257
284
}
258
-
285
+
259
286
if let permDir = appState. dirs. first ( where: { permd in
260
287
item. contains ( permd. url. path ( ) )
261
288
} ) {
@@ -362,8 +389,6 @@ class AppDelegate: NSObject, NSApplicationDelegate {
362
389
config. environment = rcitem. environment
363
390
364
391
if appUrl. path. hasSuffix ( " WezTerm.app " ) {
365
-
366
-
367
392
// 创建一个 Process 实例
368
393
let process = Process ( )
369
394
@@ -411,7 +436,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
411
436
}
412
437
413
438
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 " ) )
415
440
logger. info ( " applicationWillTerminate " )
416
441
}
417
442
}
0 commit comments