2025-05-12 06:55:09 +03:00
|
|
|
|
/*
|
|
|
|
|
* Author: Nikolay Dvurechensky
|
|
|
|
|
* Site: https://www.dvurechensky.pro/
|
|
|
|
|
* Gmail: dvurechenskysoft@gmail.com
|
|
|
|
|
* Last Updated: 12 мая 2025 06:51:53
|
|
|
|
|
* Version: 1.0.7
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
using FileSearch.Logic.Model.Engine;
|
2024-10-05 10:06:04 +03:00
|
|
|
|
using FileSearch.Logic.Model.Entities;
|
|
|
|
|
|
|
|
|
|
namespace FileSearch.Logic.Model.CriterionSchemas
|
|
|
|
|
{
|
|
|
|
|
internal static class CriteriaFactory
|
|
|
|
|
{
|
|
|
|
|
public static IList<ICriterion> Build(EngineOptions options)
|
|
|
|
|
{
|
|
|
|
|
var list = new List<ICriterion>();
|
|
|
|
|
|
|
|
|
|
// Применить базовые параметры
|
|
|
|
|
if (!string.IsNullOrEmpty(options.SearchName))
|
|
|
|
|
{
|
|
|
|
|
if (options.SearchInArchives)
|
|
|
|
|
list.Add(new NameAndZipCriterion(options.SearchName, options.SearchNameIgnoreCasing, options.SearchNameMatchFullPath));
|
|
|
|
|
else if (!options.SearchNameAsRegularExpression)
|
|
|
|
|
list.Add(new NameCriterion(options.SearchName, options.SearchNameIgnoreCasing, options.SearchNameMatchFullPath));
|
|
|
|
|
else
|
|
|
|
|
list.Add(new NameRegexCriterion(options.SearchName, options.SearchNameIgnoreCasing, options.SearchNameMatchFullPath));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Добавить атрибуты файла
|
|
|
|
|
if (options.AttributesIncluded > 0 || options.AttributesExcluded > 0)
|
|
|
|
|
{
|
|
|
|
|
list.Add(new AttributeCriterion(options.AttributesIncluded, options.AttributesExcluded));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Размеры
|
|
|
|
|
if (options.MinimumSize != null || options.MaximumSize != null)
|
|
|
|
|
{
|
|
|
|
|
list.Add(new SizeCriterion(options.MinimumSize, options.MaximumSize));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Даты
|
|
|
|
|
if (options.DateOption != FileDateOption.None && (options.StartDateTime != null || options.EndDateTime != null))
|
|
|
|
|
{
|
|
|
|
|
list.Add(new DateCriterion(options.DateOption, options.StartDateTime, options.EndDateTime));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Содержание
|
|
|
|
|
if (!string.IsNullOrEmpty(options.ContentText))
|
|
|
|
|
{
|
|
|
|
|
if (!options.ContentAsRegularExpression)
|
|
|
|
|
list.Add(new ContentCriterion(options.ContentText, options.ContentIgnoreCasing, options.ContentWholeWordsOnly, options.ContentEncodingFactory));
|
|
|
|
|
else
|
|
|
|
|
list.Add(new ContentRegexCriterion(options.ContentText, options.ContentIgnoreCasing));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list.ToArray();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|