private IEnumerable <IFileIssue> CheckForIssues(FileInformation file, IFileBaseContext fileBaseContext) { if (fileBaseContext.TryGetIndexedFileByHash(file.Hash, out var indexedFile)) { // don't include the actual file we're checking var equalFiles = indexedFile.Files .Where(x => file.RelativeFilename == null || !fileBaseContext.PhotoDirectory.PathComparer.Equals(x.RelativeFilename, file.RelativeFilename)) .Select(x => indexedFile.ToFileInformation(x.RelativeFilename, fileBaseContext.PhotoDirectory)).ToList(); if (equalFiles.Any()) { yield return(new DuplicateFilesIssue(file, equalFiles)); } } }
private IEnumerable <IFileIssue> CheckForIssues(FileInformation file, IFileBaseContext fileBaseContext) { if (file.PhotoProperties != null) { var similarFiles = new List <SimilarFile>(); var fileHash = file.Hash.ToString(); foreach (var(indexedFile, similarity) in fileBaseContext.FindSimilarFiles(file.PhotoProperties.BitmapHash)) { if (indexedFile.Hash == fileHash) { continue; // can't be similar if it's equal } similarFiles.Add(new SimilarFile(indexedFile.ToFileInformation(fileBaseContext.PhotoDirectory), similarity)); } if (similarFiles.Any()) { yield return(new SimilarFilesIssue(file, similarFiles)); } } }
public ValueTask <IEnumerable <IFileIssue> > CheckForIssues(FileInformation file, IFileBaseContext fileBaseContext, IPhotoDirectoryDataContext dataContext) { return(new ValueTask <IEnumerable <IFileIssue> >(CheckForIssues(file, fileBaseContext))); }
public CheckFileIntegrityRequest(FileInformation fileInformation, IFileBaseContext fileBaseContext) { FileInformation = fileInformation; FileBaseContext = fileBaseContext; }
public async ValueTask <IEnumerable <IFileIssue> > CheckForIssues(FileInformation file, IFileBaseContext fileBaseContext, IPhotoDirectoryDataContext dataContext) { var photoDirectory = fileBaseContext.PhotoDirectory; var pathPattern = photoDirectory.GetFilenameTemplate(file).ToRegexPattern(); if (file.RelativeFilename == null || !Regex.IsMatch(file.RelativeFilename, pathPattern)) { var recommendedPath = photoDirectory.GetRecommendedPath(file); var recommendedDirectory = _pathUtils.GetDirectoryName(recommendedPath); var recommendedName = _pathUtils.GetFileName(recommendedPath); var directoryTemplate = photoDirectory.GetFileDirectoryTemplate(file); var directorySuggestions = await dataContext.FileRepository.FindMatchingDirectories(directoryTemplate); if (!directorySuggestions.Contains(recommendedDirectory)) { directorySuggestions.Add(recommendedDirectory); } return(new InvalidFileLocationIssue(file, directoryTemplate, directorySuggestions.Select(x => new FilenameSuggestion(x, _pathUtils.Combine(x, recommendedName))).ToList(), recommendedName).Yield()); } return(Enumerable.Empty <IFileIssue>()); }