@@ -293,7 +293,7 @@ private static Win32 LnkProgram(string path)
293
293
#endif
294
294
}
295
295
296
- private static Win32 UrlProgram ( string path )
296
+ private static Win32 UrlProgram ( string path , string [ ] protocols )
297
297
{
298
298
var program = Win32Program ( path ) ;
299
299
program . Valid = false ;
@@ -308,7 +308,7 @@ private static Win32 UrlProgram(string path)
308
308
{
309
309
return program ;
310
310
}
311
- foreach ( var protocol in Main . _settings . GetProtocols ( ) )
311
+ foreach ( var protocol in protocols )
312
312
{
313
313
if ( url . StartsWith ( protocol ) )
314
314
{
@@ -370,35 +370,26 @@ private static string Extension(string path)
370
370
var extension = Path . GetExtension ( path ) ? . ToLowerInvariant ( ) ;
371
371
if ( ! string . IsNullOrEmpty ( extension ) )
372
372
{
373
- return extension . Substring ( 1 ) ;
373
+ return extension . Substring ( 1 ) ; // remove dot
374
374
}
375
375
else
376
376
{
377
377
return string . Empty ;
378
378
}
379
379
}
380
380
381
- private static IEnumerable < Win32 > UnregisteredPrograms ( List < ProgramSource > sources , string [ ] suffixes )
381
+ private static IEnumerable < Win32 > UnregisteredPrograms ( List < ProgramSource > sources , string [ ] suffixes , string [ ] protocols )
382
382
{
383
383
var paths = ExceptDisabledSource ( sources . Where ( s => Directory . Exists ( s . Location ) && s . Enabled )
384
384
. SelectMany ( s => ProgramPaths ( s . Location , suffixes ) ) )
385
385
. Distinct ( ) ;
386
386
387
- var programs = paths . Select ( x => Extension ( x ) switch
388
- {
389
- ExeExtension => ExeProgram ( x ) ,
390
- ShortcutExtension => LnkProgram ( x ) ,
391
- UrlExtension => UrlProgram ( x ) ,
392
- _ => Win32Program ( x )
393
- } ) . Where ( x => x . Valid ) ;
394
-
387
+ var programs = paths . Select ( x => GetProgramFromPath ( x , protocols ) ) . Where ( x => x . Valid ) ;
395
388
return programs ;
396
389
}
397
390
398
- private static IEnumerable < Win32 > StartMenuPrograms ( string [ ] suffixes )
391
+ private static IEnumerable < Win32 > StartMenuPrograms ( string [ ] suffixes , string [ ] protocols )
399
392
{
400
- var disabledProgramsList = Main . _settings . DisabledProgramSources ;
401
-
402
393
var directory1 = Environment . GetFolderPath ( Environment . SpecialFolder . Programs ) ;
403
394
var directory2 = Environment . GetFolderPath ( Environment . SpecialFolder . CommonPrograms ) ;
404
395
var paths1 = ProgramPaths ( directory1 , suffixes ) ;
@@ -407,16 +398,11 @@ private static IEnumerable<Win32> StartMenuPrograms(string[] suffixes)
407
398
var toFilter = paths1 . Concat ( paths2 ) ;
408
399
409
400
var programs = ExceptDisabledSource ( toFilter . Distinct ( ) )
410
- . Select ( x => Extension ( x ) switch
411
- {
412
- ShortcutExtension => LnkProgram ( x ) ,
413
- UrlExtension => UrlProgram ( x ) ,
414
- _ => Win32Program ( x )
415
- } ) . Where ( x => x . Valid ) ;
401
+ . Select ( x => GetProgramFromPath ( x , protocols ) ) . Where ( x => x . Valid ) ;
416
402
return programs ;
417
403
}
418
404
419
- private static IEnumerable < Win32 > AppPathsPrograms ( string [ ] suffixes )
405
+ private static IEnumerable < Win32 > AppPathsPrograms ( string [ ] suffixes , string [ ] protocols )
420
406
{
421
407
// https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121
422
408
const string appPaths = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" ;
@@ -436,12 +422,11 @@ private static IEnumerable<Win32> AppPathsPrograms(string[] suffixes)
436
422
toFilter = toFilter . Concat ( GetPathFromRegistry ( rootUser ) ) ;
437
423
}
438
424
439
-
440
425
toFilter = toFilter . Distinct ( ) . Where ( p => suffixes . Contains ( Extension ( p ) ) ) ;
441
426
442
- var filtered = ExceptDisabledSource ( toFilter ) ;
443
-
444
- return filtered . Select ( GetProgramFromPath ) . Where ( x => x . Valid ) . ToList ( ) ; // ToList due to disposing issue
427
+ var programs = ExceptDisabledSource ( toFilter )
428
+ . Select ( x => GetProgramFromPath ( x , protocols ) ) . Where ( x => x . Valid ) . ToList ( ) ; // ToList due to disposing issue
429
+ return programs ;
445
430
}
446
431
447
432
private static IEnumerable < string > GetPathFromRegistry ( RegistryKey root )
@@ -481,7 +466,7 @@ private static string GetProgramPathFromRegistrySubKeys(RegistryKey root, string
481
466
}
482
467
}
483
468
484
- private static Win32 GetProgramFromPath ( string path )
469
+ private static Win32 GetProgramFromPath ( string path , string [ ] protocols )
485
470
{
486
471
if ( string . IsNullOrEmpty ( path ) )
487
472
return Default ;
@@ -491,9 +476,13 @@ private static Win32 GetProgramFromPath(string path)
491
476
if ( ! File . Exists ( path ) )
492
477
return Default ;
493
478
494
- var entry = Win32Program ( path ) ;
495
-
496
- return entry ;
479
+ return Extension ( path ) switch
480
+ {
481
+ ShortcutExtension => LnkProgram ( path ) ,
482
+ ExeExtension => ExeProgram ( path ) ,
483
+ UrlExtension => UrlProgram ( path , protocols ) ,
484
+ _ => Win32Program ( path )
485
+ } ; ;
497
486
}
498
487
499
488
public static IEnumerable < string > ExceptDisabledSource ( IEnumerable < string > paths )
@@ -550,22 +539,23 @@ public static Win32[] All(Settings settings)
550
539
try
551
540
{
552
541
var programs = Enumerable . Empty < Win32 > ( ) ;
553
-
554
- var unregistered = UnregisteredPrograms ( settings . ProgramSources , settings . GetSuffixes ( ) ) ;
542
+ var suffixes = settings . GetSuffixes ( ) ;
543
+ var protocols = settings . GetProtocols ( ) ;
544
+ var unregistered = UnregisteredPrograms ( settings . ProgramSources , suffixes , protocols ) ;
555
545
556
546
programs = programs . Concat ( unregistered ) ;
557
547
558
548
var autoIndexPrograms = Enumerable . Empty < Win32 > ( ) ;
559
549
560
550
if ( settings . EnableRegistrySource )
561
551
{
562
- var appPaths = AppPathsPrograms ( settings . GetSuffixes ( ) ) ;
552
+ var appPaths = AppPathsPrograms ( suffixes , protocols ) ;
563
553
autoIndexPrograms = autoIndexPrograms . Concat ( appPaths ) ;
564
554
}
565
555
566
556
if ( settings . EnableStartMenuSource )
567
557
{
568
- var startMenu = StartMenuPrograms ( settings . GetSuffixes ( ) ) ;
558
+ var startMenu = StartMenuPrograms ( suffixes , protocols ) ;
569
559
autoIndexPrograms = autoIndexPrograms . Concat ( startMenu ) ;
570
560
}
571
561
0 commit comments