/ src / modules / launcher / Plugins / Microsoft.Plugin.Folder / Sources / QueryFileSystemInfo.cs
QueryFileSystemInfo.cs
 1  // Copyright (c) Microsoft Corporation
 2  // The Microsoft Corporation licenses this file to you under the MIT license.
 3  // See the LICENSE file in the project root for more information.
 4  
 5  using System.Collections.Generic;
 6  using System.IO;
 7  using System.IO.Abstractions;
 8  using System.Linq;
 9  
10  namespace Microsoft.Plugin.Folder.Sources
11  {
12      public class QueryFileSystemInfo : IQueryFileSystemInfo
13      {
14          private readonly IDirectoryInfoFactory _directoryInfoFactory;
15          private readonly MatchType _matchType;
16          private readonly FileAttributes _attributesToSkip;
17  
18          public QueryFileSystemInfo(IDirectoryInfoFactory directoryInfoFactory, MatchType matchType = MatchType.Win32, FileAttributes attributesToSkip = FileAttributes.Hidden)
19          {
20              _directoryInfoFactory = directoryInfoFactory;
21              _matchType = matchType;
22              _attributesToSkip = attributesToSkip;
23          }
24  
25          public IEnumerable<DisplayFileInfo> MatchFileSystemInfo(string search, string incompleteName, bool isRecursive)
26          {
27              // search folder and add results
28              var directoryInfo = _directoryInfoFactory.New(search);
29              var fileSystemInfos = directoryInfo.EnumerateFileSystemInfos(incompleteName, new EnumerationOptions
30              {
31                  MatchType = _matchType,
32                  RecurseSubdirectories = isRecursive,
33                  IgnoreInaccessible = true,
34                  ReturnSpecialDirectories = false,
35                  AttributesToSkip = _attributesToSkip,
36                  MatchCasing = MatchCasing.PlatformDefault,
37              });
38  
39              return fileSystemInfos
40                  .Select(CreateDisplayFileInfo);
41          }
42  
43          private static DisplayFileInfo CreateDisplayFileInfo(IFileSystemInfo fileSystemInfo)
44          {
45              return new DisplayFileInfo()
46              {
47                  Name = fileSystemInfo.Name,
48                  FullName = fileSystemInfo.FullName,
49                  Type = GetDisplayType(fileSystemInfo),
50              };
51          }
52  
53          private static DisplayType GetDisplayType(IFileSystemInfo fileSystemInfo)
54          {
55              if (fileSystemInfo is IDirectoryInfo)
56              {
57                  return DisplayType.Directory;
58              }
59              else
60              {
61                  return DisplayType.File;
62              }
63          }
64      }
65  }