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 }