@@ -329,55 +329,77 @@ fn start_module_thread(name: String, custom_args: Option<Vec<String>>, tx: Sende
329
329
330
330
#[ cfg( unix) ]
331
331
fn get_modules_in_path ( ) -> BTreeSet < String > {
332
- let excluded = [ "awk" , "aw-tauri" , "aw-client" , "aw-cli" ] ;
333
- env:: var_os ( "PATH" )
334
- . map ( |paths| {
335
- env:: split_paths ( & paths)
336
- . flat_map ( |path| fs:: read_dir ( path) . ok ( ) )
337
- . flatten ( )
338
- . filter_map ( Result :: ok)
339
- . filter_map ( |entry| {
340
- let metadata = entry. metadata ( ) . ok ( ) ?;
341
- let is_executable = ( metadata. is_file ( ) || metadata. is_symlink ( ) )
342
- && metadata. permissions ( ) . mode ( ) & 0o111 != 0 ;
343
- if !is_executable {
344
- return None ;
345
- }
346
-
347
- entry
348
- . file_name ( )
349
- . to_str ( )
350
- . map ( |s| s. to_string ( ) )
351
- . filter ( |name : & String | name. starts_with ( "aw" ) && !name. contains ( "." ) )
352
- } )
353
- . collect :: < BTreeSet < _ > > ( )
332
+ let excluded = [ "awk" , "aw-tauri" , "aw-client" , "aw-cli" , "aw-qt" ] ;
333
+ let config = crate :: get_config ( ) ;
334
+
335
+ let path = env:: var_os ( "PATH" ) . unwrap_or_default ( ) ;
336
+ let mut paths = env:: split_paths ( & path) . collect :: < Vec < _ > > ( ) ;
337
+
338
+ if !paths. contains ( & config. defaults . discovery_path ) {
339
+ // add to the front of the path list
340
+ paths. insert ( 0 , config. defaults . discovery_path . to_owned ( ) ) ;
341
+ }
342
+
343
+ // Create new PATH-like string
344
+ let new_paths = env:: join_paths ( paths) . unwrap_or_default ( ) ;
345
+
346
+ env:: split_paths ( & new_paths)
347
+ . flat_map ( |path| fs:: read_dir ( path) . ok ( ) )
348
+ . flatten ( )
349
+ . filter_map ( Result :: ok)
350
+ . filter_map ( |entry| {
351
+ let metadata = entry. metadata ( ) . ok ( ) ?;
352
+ let is_executable = ( metadata. is_file ( ) || metadata. is_symlink ( ) )
353
+ && metadata. permissions ( ) . mode ( ) & 0o111 != 0 ;
354
+ if !is_executable {
355
+ return None ;
356
+ }
357
+
358
+ entry
359
+ . file_name ( )
360
+ . to_str ( )
361
+ . map ( |s| s. to_string ( ) )
362
+ . filter ( |name : & String | name. starts_with ( "aw" ) && !name. contains ( "." ) )
354
363
} )
355
- . unwrap_or_default ( )
364
+ . collect :: < BTreeSet < _ > > ( )
356
365
. into_iter ( )
357
366
. filter ( |name : & String | !excluded. contains ( & name. as_str ( ) ) )
358
367
. collect ( )
359
368
}
360
369
361
370
#[ cfg( windows) ]
362
371
fn get_modules_in_path ( ) -> BTreeSet < String > {
363
- let excluded = [ "aw-tauri" , "aw-client" , "aw-cli" ] ;
364
- env:: var_os ( "PATH" )
365
- . map ( |paths| {
366
- env:: split_paths ( & paths)
367
- . flat_map ( |path| fs:: read_dir ( path) . ok ( ) )
368
- . flatten ( )
369
- . filter_map ( Result :: ok)
370
- . filter_map ( |entry| {
371
- let path = entry. path ( ) ;
372
- if path. is_file ( ) && path. extension ( ) . map_or ( false , |ext| ext == "exe" ) {
373
- path. file_stem ( ) ?. to_str ( ) . map ( String :: from)
374
- } else {
375
- None
376
- }
377
- } )
378
- . collect :: < BTreeSet < _ > > ( )
372
+ let excluded = [ "aw-tauri" , "aw-client" , "aw-cli" , "aw-qt" ] ;
373
+
374
+ // Get the discovery path from config
375
+ let config = crate :: get_config ( ) ;
376
+
377
+ // Get the current PATH
378
+ let path = env:: var_os ( "PATH" ) . unwrap_or_default ( ) ;
379
+ let mut paths = env:: split_paths ( & path) . collect :: < Vec < _ > > ( ) ;
380
+
381
+ // Add discovery path if not already in PATH
382
+ if !paths. contains ( & config. defaults . discovery_path ) {
383
+ paths. push ( config. defaults . discovery_path . clone ( ) ) ;
384
+ }
385
+
386
+ // Create new PATH-like string
387
+ let new_paths = env:: join_paths ( paths) . unwrap_or_default ( ) ;
388
+
389
+ // Use the combined paths to find modules
390
+ env:: split_paths ( & new_paths)
391
+ . flat_map ( |path| fs:: read_dir ( path) . ok ( ) )
392
+ . flatten ( )
393
+ . filter_map ( Result :: ok)
394
+ . filter_map ( |entry| {
395
+ let path = entry. path ( ) ;
396
+ if path. is_file ( ) && path. extension ( ) . map_or ( false , |ext| ext == "exe" ) {
397
+ path. file_stem ( ) ?. to_str ( ) . map ( String :: from)
398
+ } else {
399
+ None
400
+ }
379
401
} )
380
- . unwrap_or_default ( )
402
+ . collect :: < BTreeSet < _ > > ( )
381
403
. into_iter ( )
382
404
. filter ( |name| !excluded. contains ( & name. as_str ( ) ) )
383
405
. collect ( )
0 commit comments