public ValueTask <IFileBaseContext> BuildContext(IPhotoDirectory photoDirectory, IReadOnlyList <IndexedFile> indexedFiles) { var dictionary = indexedFiles.ToDictionary(x => x.Hash, x => x); var similarityDictionary = _similarityDictionaryFactory.Create(indexedFiles); return(new ValueTask <IFileBaseContext>(new FileBaseContext(photoDirectory, indexedFiles, dictionary, similarityDictionary))); }
private IEnumerable <IFileIssue> CheckForIssues(FileInformation file, IPhotoDirectory photoDirectory) { if (photoDirectory.MemoryManager.DirectoryMemory.DeletedFiles.TryGetValue(file.Hash.ToString(), out var deletedFile)) { yield return(new FormerlyDeletedIssue(file, deletedFile)); } }
public FileBaseContext(IPhotoDirectory photoDirectory, IReadOnlyList <IndexedFile> indexedFiles, IReadOnlyDictionary <string, IndexedFile> indexedFileMap, SimilarityDictionary similarityDictionary) { _indexedFileMap = indexedFileMap; _similarityDictionary = similarityDictionary; PhotoDirectory = photoDirectory; IndexedFiles = indexedFiles; }
public async ValueTask <IFileBaseContext> BuildContext(IPhotoDirectory photoDirectory) { IReadOnlyList <IndexedFile> indexedFiles; await using (var context = photoDirectory.GetDataContext()) { indexedFiles = await context.FileRepository.GetAllReadOnlyBySpecs(new IncludeFileLocationsSpec()); } return(await BuildContext(photoDirectory, indexedFiles)); }
public DecisionManagerContext(List <IssueDecisionWrapperViewModel> issues, IPhotoDirectory photoDirectory, Action resyncDatabaseAction) { Issues = issues; PhotoDirectory = photoDirectory; ResyncDatabaseAction = resyncDatabaseAction; OnUpdateOperations(); foreach (var viewModel in Issues) { viewModel.PropertyChanged += ViewModelOnPropertyChanged; viewModel.Decision.PropertyChanged += DecisionOnPropertyChanged; } IssueFilter = new[] { typeof(InvalidFileLocationIssue), typeof(DuplicateFilesIssue), typeof(SimilarFilesIssue), typeof(FormerlyDeletedIssue) } .Select(x => new Checkable <Type>(x, true)).ToList(); }
private async Task ExecuteWorker(IPhotoDirectory photoDirectory) { try { await _synchronizeIndexWorker.Execute(new SynchronizeIndexRequest(photoDirectory)); } catch (Exception e) { _windowService.ShowError(e); _regionManager.RequestNavigate(RegionNames.MainView, "OpenFolderView"); return; } _synchronizationEvent.OnPhotoFolderSynchronized(); var parameters = new NavigationParameters { { "photoDirectory", photoDirectory } }; _regionManager.RequestNavigate(RegionNames.MainView, "PhotoFolderView", parameters); }
public static IEnumerable <IFileInfo> ToFileInfos(this IndexedFile file, IPhotoDirectory photoDirectory) { return(file.Files.Select(x => photoDirectory.ToFileInformation(file, x))); }
public static FileInformation ToFileInformation(this IndexedFile file, IPhotoDirectory photoDirectory) { return(photoDirectory.ToFileInformation(file, file.Files.First())); }
public static FileInformation ToFileInformation(this IndexedFile file, string relativeFilename, IPhotoDirectory photoDirectory) { var fileLocation = file.GetFileByFilename(relativeFilename); if (fileLocation == null) { throw new ArgumentException($"The indexed file is not located at {relativeFilename}"); } return(photoDirectory.ToFileInformation(file, fileLocation)); }
private FileInformation GetFileInformationFromPath(string relativeFilename, IReadOnlyList <IndexedFile> indexedFiles, IPhotoDirectory photoDirectory) { return(indexedFiles.First(y => y.HasPath(relativeFilename)).ToFileInformation(relativeFilename, photoDirectory)); }
public CheckFilesRequest(IReadOnlyList <FileInformation> files, IPhotoDirectory directory) { Files = files; Directory = directory; }
private static IIssueDecisionViewModel Create(DuplicateFilesIssue duplicateFilesIssue, IPhotoDirectory photoDirectory) { IEnumerable <Checkable <FileInformation> > filesToKeep; if (duplicateFilesIssue.File.RelativeFilename != null) { // just keep one file, try to find the file that is located correctly var bestFile = duplicateFilesIssue.RelevantFiles.FirstOrDefault(x => x.RelativeFilename != null && Regex.IsMatch(x.RelativeFilename, photoDirectory.GetFilenameTemplate(x).ToRegexPattern())) ?? duplicateFilesIssue.File; filesToKeep = new[] { duplicateFilesIssue.File }.Concat(duplicateFilesIssue.RelevantFiles) .Select(x => new Checkable <FileInformation>(x, x == bestFile)); } else { // in case of import, we just delete the file that would be imported filesToKeep = new[] { new Checkable <FileInformation>(duplicateFilesIssue.File) }.Concat( duplicateFilesIssue.RelevantFiles.Select(x => new Checkable <FileInformation>(x, true))); } return(new DuplicateFileDecisionViewModel(duplicateFilesIssue, filesToKeep.ToList())); }
public RemoveFileFromIndexRequest(string relativeFilename, IPhotoDirectory photoDirectory) { RelativeFilename = relativeFilename; PhotoDirectory = photoDirectory; }
public ImportFilesRequest(IReadOnlyList <string> files, IPhotoDirectory directory) { Files = files; Directory = directory; }
public SynchronizeIndexRequest(IPhotoDirectory directory) { Directory = directory; }
public static IEnumerable <IIssueDecisionViewModel> Create(FileCheckReport report, IPhotoDirectory photoDirectory) { foreach (var issue in report.Issues) { if (issue is DuplicateFilesIssue duplicateFilesIssue) { yield return(Create(duplicateFilesIssue, photoDirectory)); } else if (issue is InvalidFileLocationIssue invalidFileLocationIssue) { yield return(new InvalidLocationFileDecisionViewModel(invalidFileLocationIssue)); } else if (issue is SimilarFilesIssue similarFilesIssue) { yield return(new SimilarFileDecisionViewModel(similarFilesIssue, similarFilesIssue.RelevantFiles.Concat(new[] { similarFilesIssue.File }).Select(x => new Checkable <FileInformation>(x, true)).ToList())); } else if (issue is FormerlyDeletedIssue formerlyDeletedIssue) { yield return(new FormerlyDeletedFileDecisionViewModel(formerlyDeletedIssue)); } } }
public CheckIndexRequest(IPhotoDirectory directory) { Directory = directory; }
public AddFileToIndexRequest(string filename, IPhotoDirectory directory) { Filename = filename; Directory = directory; }
private async Task <(IUseCaseErrors, AddFileToIndexResponse?)> IndexFile(string filename, IPhotoDirectory photoDirectory) { var action = _serviceProvider.GetRequiredService <IAddFileToIndexUseCase>(); AddFileToIndexResponse?response; try { response = await action.Handle(new AddFileToIndexRequest(filename, photoDirectory)); } catch (Exception e) { if (e.GetType().Name.Equals("DbUpdateException")) { response = await action.Handle(new AddFileToIndexRequest(filename, photoDirectory)); } else { throw; } } return(action, response); }