mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 11:16:51 +02:00
66 lines
2.3 KiB
C#
66 lines
2.3 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.IO.Abstractions;
|
|
using System.Linq;
|
|
|
|
namespace Microsoft.Plugin.Folder.Sources
|
|
{
|
|
public class QueryFileSystemInfo : IQueryFileSystemInfo
|
|
{
|
|
private readonly IDirectoryInfoFactory _directoryInfoFactory;
|
|
private readonly MatchType _matchType;
|
|
private readonly FileAttributes _attributesToSkip;
|
|
|
|
public QueryFileSystemInfo(IDirectoryInfoFactory directoryInfoFactory, MatchType matchType = MatchType.Win32, FileAttributes attributesToSkip = FileAttributes.Hidden)
|
|
{
|
|
_directoryInfoFactory = directoryInfoFactory;
|
|
_matchType = matchType;
|
|
_attributesToSkip = attributesToSkip;
|
|
}
|
|
|
|
public IEnumerable<DisplayFileInfo> MatchFileSystemInfo(string search, string incompleteName, bool isRecursive)
|
|
{
|
|
// search folder and add results
|
|
var directoryInfo = _directoryInfoFactory.FromDirectoryName(search);
|
|
var fileSystemInfos = directoryInfo.EnumerateFileSystemInfos(incompleteName, new EnumerationOptions
|
|
{
|
|
MatchType = _matchType,
|
|
RecurseSubdirectories = isRecursive,
|
|
IgnoreInaccessible = true,
|
|
ReturnSpecialDirectories = false,
|
|
AttributesToSkip = _attributesToSkip,
|
|
MatchCasing = MatchCasing.PlatformDefault,
|
|
});
|
|
|
|
return fileSystemInfos
|
|
.Select(CreateDisplayFileInfo);
|
|
}
|
|
|
|
private static DisplayFileInfo CreateDisplayFileInfo(IFileSystemInfo fileSystemInfo)
|
|
{
|
|
return new DisplayFileInfo()
|
|
{
|
|
Name = fileSystemInfo.Name,
|
|
FullName = fileSystemInfo.FullName,
|
|
Type = GetDisplayType(fileSystemInfo),
|
|
};
|
|
}
|
|
|
|
private static DisplayType GetDisplayType(IFileSystemInfo fileSystemInfo)
|
|
{
|
|
if (fileSystemInfo is IDirectoryInfo)
|
|
{
|
|
return DisplayType.Directory;
|
|
}
|
|
else
|
|
{
|
|
return DisplayType.File;
|
|
}
|
|
}
|
|
}
|
|
}
|