55 lines
2.1 KiB
C#
55 lines
2.1 KiB
C#
|
using FileSearch.Logic.Model.Engine;
|
|||
|
using FileSearch.Logic.Model.Entities;
|
|||
|
|
|||
|
namespace FileSearch.Logic.Model.CriterionSchemas
|
|||
|
{
|
|||
|
internal class DateCriterion : CriterionBase, ICriterion
|
|||
|
{
|
|||
|
private readonly FileDateOption _dateOption;
|
|||
|
private readonly DateTime? _startDateTime;
|
|||
|
private readonly DateTime? _endDateTime;
|
|||
|
|
|||
|
public DateCriterion(FileDateOption dateOption, DateTime? startDateTime, DateTime? endDateTime)
|
|||
|
{
|
|||
|
if (dateOption == FileDateOption.None)
|
|||
|
throw new ArgumentException("There is no date option specified.", "dateOption");
|
|||
|
if (startDateTime == null && endDateTime == null)
|
|||
|
throw new ArgumentException("No start and end date time are specified.");
|
|||
|
|
|||
|
_dateOption = dateOption;
|
|||
|
_startDateTime = startDateTime != null ? (DateTime?)startDateTime.Value.ToUniversalTime() : null;
|
|||
|
_endDateTime = endDateTime != null ? (DateTime?)endDateTime.Value.ToUniversalTime() : null;
|
|||
|
}
|
|||
|
|
|||
|
public string Name { get { return "Dates"; } }
|
|||
|
|
|||
|
public CriterionWeight Weight { get { return CriterionWeight.Medium; } }
|
|||
|
|
|||
|
public bool DirectorySupport { get { return true; } }
|
|||
|
|
|||
|
public bool FileSupport { get { return true; } }
|
|||
|
|
|||
|
public bool IsMatch(FileSystemInfo fileSystemInfo, ICriterionContext context)
|
|||
|
{
|
|||
|
DateTime dateTimeUtc;
|
|||
|
switch (_dateOption)
|
|||
|
{
|
|||
|
case FileDateOption.Accessed:
|
|||
|
dateTimeUtc = fileSystemInfo.LastAccessTimeUtc;
|
|||
|
break;
|
|||
|
case FileDateOption.Changed:
|
|||
|
dateTimeUtc = fileSystemInfo.LastWriteTimeUtc;
|
|||
|
break;
|
|||
|
case FileDateOption.Created:
|
|||
|
dateTimeUtc = fileSystemInfo.CreationTimeUtc;
|
|||
|
break;
|
|||
|
default:
|
|||
|
throw new NotSupportedException();
|
|||
|
}
|
|||
|
|
|||
|
return (_startDateTime == null || dateTimeUtc >= _startDateTime.Value)
|
|||
|
&& (_endDateTime == null || dateTimeUtc <= _endDateTime.Value);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|