Beispiel #1
0
        public void Run()
        {
            _eventService.OnTalk += (sender, args) => { _logService.Print(args.Message); };

            _eventService.Talk("Starting deduplication process");
            _eventService.Talk($"Preview mode is {_configService.Preview}");

            var blobs = _configService.Directories.SelectMany(
                d =>
                _fileSystem.GetAllFileBlobs(d, null,
                                            $"{_configService.DupesDirectoryName}|{_configService.SynologyHiddenDirectoryName}")).ToList();


            _eventService.Talk($"Found {blobs.Count()} files");

            var duplicates = _fileSystem.GetDuplicates(blobs).ToArray();

            if (duplicates.Any())
            {
                _eventService.Talk($"Moving duplicates to {_configService.DupesDirectory}");

                var orderedSourceDirs = _configService.Directories.OrderByDescending(s => s.Length);

                foreach (var duplicate in duplicates)
                {
                    var src = duplicate.FullName;
                    var matchedSourceDirectory = orderedSourceDirs.First(src.StartsWith);
                    var dest = duplicate.FullName.Replace(matchedSourceDirectory, _configService.DupesDirectory);
                    _fileSystem.MoveFile(src, dest);
                }

                if (_configService.Clean)
                {
                    _fileSystem.RemoveEmptyDirectories(_configService.Directories.First(),
                                                       $"{_configService.DupesDirectoryName}|{_configService.SynologyHiddenDirectoryName}");
                }
            }

            _eventService.Talk($"Finished");

            Console.ReadLine();
        }