示例#1
0
        public IFolderDiff Build(ISyncPair syncPair)
        {
            IsNotNull(syncPair);

            var diffInfo = _diffInfoBuilder.BuildInfo(syncPair);

            diffInfo.Destination.EnsureExists();

            if (!diffInfo.Source.Exists)
            {
                throw new NodeNotFoundException();
            }

            _fileScanner.FileFound += _fileScanner_SourceFileFound;

            var sourceScan = _fileScanner.Scan(diffInfo.Source);

            _fileScanner.FileFound -= _fileScanner_SourceFileFound;
            _fileScanner.FileFound += _fileScanner_DestinationFileFound;

            var destinationScan = _fileScanner.Scan(diffInfo.Destination);

            _fileScanner.FileFound -= _fileScanner_DestinationFileFound;

            return(_folderDiffer.BuildDiff(sourceScan, destinationScan));
        }
        public static void DetectFile(string filePath, string projectFileName)
        {
            var builder = new ContainerBuilder();

            builder.RegisterModule(new FrameworkModule());
            builder.RegisterModule(new DataContractSerializerModule());

            using (var container = builder.Build())
            {
                string           detectorPath    = ConfigurationManager.AppSettings.Get("Defraser.DetectorPath") ?? AppDomain.CurrentDomain.BaseDirectory;
                IDetectorFactory detectorFactory = container.Resolve <IDetectorFactory>();
                detectorFactory.Initialize(detectorPath);

                File.Delete(projectFileName);
                ProjectManager projectManager = container.Resolve <ProjectManager>();
                IProject       project        = projectManager.CreateProject(projectFileName, "Console", DateTime.Now, "Batch process");

                IInputFile   inputFile   = project.AddFile(filePath, detectorFactory.ContainerDetectors.Union(detectorFactory.CodecDetectors));
                IFileScanner fileScanner = container.Resolve <IFileScanner>();
                fileScanner.ContainerDetectors = detectorFactory.ContainerDetectors;
                fileScanner.CodecDetectors     = detectorFactory.CodecDetectors;
                fileScanner.DataBlockDetected += (s, e) => project.AddDataBlock(e.DataBlock);
                fileScanner.Scan(inputFile, container.Resolve <IProgressReporter>());

                projectManager.SaveProject(project);
                projectManager.CloseProject(project);
            }
        }
        private void ScanFiles(IEnumerable <string> inputFiles, IProject project)
        {
            long totalBytesToScan = inputFiles.Sum(x => new FileInfo(x).Length);
            long bytesScanned     = 0L;

            foreach (string filePath in inputFiles)
            {
                if (CancellationPending)
                {
                    break;
                }

                try
                {
                    DateTime scanStartTime = DateTime.Now;

                    AddFileToProject(project, filePath, Detectors);

                    _dataBlockScanner.ClearCache();
                    _fileScanner.Scan(CurrentFile, _createSubProgressReporter(this, bytesScanned, CurrentFile.Length, totalBytesToScan));

                    bytesScanned += CurrentFile.Length;

                    project.SetScanDuration(CurrentFile, DateTime.Now - scanStartTime);
                }
                catch (FileNotFoundException)
                {
                }
            }
        }
示例#4
0
        public IEnumerable <ITemplate> FindInHost()
        {
            var templates = new List <ITemplate>();
            var root      = new SparkRoot
            {
                Origin = FubuSparkConstants.HostOrigin,
                Path   = HostPath
            };

            var request = buildRequest(templates, root);

            _hostExcludes.Do(request);

            _fileScanner.Scan(request);

            return(templates);
        }
示例#5
0
        public int Scan(MovideoSettings settings)
        {
            var count = 0;
            var index = 0;

            var files      = _fileScanner.Scan().ToArray();
            var totalItems = files.Length;


            foreach (var file in files)
            {
                index++;
                OnProgressChanged(index, totalItems);

                var item = _analyzer.Analyze(file);
                if (!item.IsKnown)
                {
                    float accuracy;
                    var   res = TryIdentify(item, out accuracy);
                    if (res != null)
                    {
                        var args = new MatchFoundEventArgs(item, res, accuracy);
                        OnMatchFound(args);

                        if (args.Cancel)
                        {
                            break;
                        }

                        if (args.IsMatch == true)
                        {
                            DoRename(args, settings);

                            UpdateItem(item, res);
                            count++;
                        }
                    }
                }
                else
                {
                    float accuracy;
                    var   movieId = _db.GetMovieIdFor(item);
                    var   movie   = _db.GetMovie(movieId.Value);
                    item.Title = movie.Title;
                    item.Year  = movie.Year;

                    var res  = TryIdentify(item, out accuracy);
                    var args = new MatchFoundEventArgs(item, res, 1);
                    DoRename(args, settings);
                }
            }

            return(count);
        }
示例#6
0
        internal static IInputFile DetectData(IList <IDetector> containerDetectors, IList <IDetector> codecDetectors, IProject project, string fileName)
        {
            IFileScanner fileScanner = _container.Resolve <IFileScanner>();

            fileScanner.ContainerDetectors = containerDetectors;
            fileScanner.CodecDetectors     = codecDetectors;
            fileScanner.DataBlockDetected += (s, e) => project.AddDataBlock(e.DataBlock);
            List <IDetector> detectors = new List <IDetector>();

            detectors.AddRange(containerDetectors);
            detectors.AddRange(codecDetectors);
            IInputFile inputFile = project.AddFile(fileName, detectors);

            fileScanner.Scan(inputFile, new NullProgressReporter());
            return(inputFile);
        }