示例#1
0
        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));
                }
            }
        }
示例#2
0
        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));
                }
            }
        }
示例#3
0
 public ValueTask <IEnumerable <IFileIssue> > CheckForIssues(FileInformation file, IFileBaseContext fileBaseContext, IPhotoDirectoryDataContext dataContext)
 {
     return(new ValueTask <IEnumerable <IFileIssue> >(CheckForIssues(file, fileBaseContext)));
 }
示例#4
0
 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>());
        }