public bool Check(SearchResult result)
{
if (!FilterValid) {
return true;
}
FilterType resultFilterType = (result.Type == SearchResultType.Directory) ? FilterType.Folder : FileTypeToFilterType(result.FileListing.Type);
if (fileTypeFilterFields[resultFilterType].Contains(this.Field) ||
fileTypeFilterFields[FilterType.Other].Contains(this.Field))
{
switch (this.Field) {
case FileSearchFilterField.FileName:
switch (this.Comparison) {
case FileSearchFilterComparison.Contains:
return (result.Name.ToLower().IndexOf(this.Text.ToLower()) > -1);
case FileSearchFilterComparison.DoesntContain:
return (result.Name.ToLower().IndexOf(this.Text.ToLower()) == -1);
case FileSearchFilterComparison.Regexp:
return Regex.IsMatch(result.Name, this.text);
}
break;
case FileSearchFilterField.Size:
ulong filterSize = Common.SizeStringToBytes(this.Text);
switch (this.Comparison) {
case FileSearchFilterComparison.Equals:
return ((ulong)result.Size == filterSize);
case FileSearchFilterComparison.LessThanOrEqualTo:
return ((ulong)result.Size <= filterSize);
case FileSearchFilterComparison.GreaterOrEqualTo:
return ((ulong)result.Size >= filterSize);
default:
throw new Exception("Invalid filter.");
}
}
} else {
// Ignore this filter for this result
return true;
}
return true;
}