Ejemplo n.º 1
0
        public async Task <FileCheckReport> Execute(ImportFilesRequest request, CancellationToken cancellationToken = default)
        {
            State.Status = ImportFilesStatus.Scanning;

            var fileInfos = new FileInformation[request.Files.Count];
            var counter   = -1; // as we always increment and the first index is zero

            await TaskCombinators.ThrottledAsync(request.Files, async (filename, _) =>
            {
                var index = Interlocked.Increment(ref counter);
                try
                {
                    var file = request.Directory.GetFile(filename);
                    if (file == null)
                    {
                        return;               // not found
                    }
                    fileInfos[index] = await _fileInformationLoader.Load(file);
                }
                finally
                {
                    State.Progress = (double)counter / request.Files.Count;
                }
            }, cancellationToken, 4);

            State.Status = ImportFilesStatus.Querying;
            _checkFilesWorker.State.PropertyChanged += (_, __) => State.Progress = _checkFilesWorker.State.Progress;

            return(await _checkFilesWorker.Execute(new CheckFilesRequest(fileInfos.Where(x => x != null).ToList(), request.Directory), cancellationToken));
        }
Ejemplo n.º 2
0
        public async Task <FileCheckReport> Execute(CheckIndexRequest request, CancellationToken cancellationToken = default)
        {
            // get all files from the repository
            IReadOnlyList <IndexedFile> indexedFiles;

            await using (var context = request.Directory.GetDataContext())
            {
                indexedFiles = await context.FileRepository.GetAllReadOnlyBySpecs(new IncludeFileLocationsSpec());
            }

            var fileInfos = indexedFiles.SelectMany(x => x.Files.Select(y => x.ToFileInformation(y.RelativeFilename, request.Directory))).ToList();
            var response  = await _checkFilesWorker.Execute(new CheckFilesRequest(fileInfos, request.Directory), cancellationToken);

            var ignoredIssues = request.Directory.MemoryManager.DirectoryMemory.IgnoredIssues;
            var issues        = response.Issues.Where(x => !ignoredIssues.Contains(x.Identity)).ToList();

            return(new FileCheckReport(issues));
        }