public FileElementViewModel(FileElementModel fileElementModel)
 {
     _fileElementModel = fileElementModel;
     IsCopy            = _fileElementModel.FileActions.HasFlag(FileActions.Copy);
     IsDelete          = _fileElementModel.FileActions.HasFlag(FileActions.Delete);
     FileName          = _fileElementModel.Path;
 }
Example #2
0
        /// <summary>
        ///     Сравнение списков файлов.
        /// </summary>
        public IList <FileElementModel> CompairFolders(string oldFolder, string newFolder)
        {
            var sourceFiles = GetFileList(oldFolder);
            var targetFiles = GetFileList(newFolder);
            var result      = new List <FileElementModel>();

            foreach (var sourceFile in sourceFiles)
            {
                var s = sourceFile.Path.Replace(oldFolder, string.Empty);
                if (!targetFiles.Any(x => x.Path.EndsWith(s)))
                {
                    var fileElementModel = new FileElementModel();
                    fileElementModel.Path = s;
                    result.Add(fileElementModel);
                }
            }

            return(result);
        }
Example #3
0
        /// <summary>
        /// ModelをもとにViewModelを作成
        /// </summary>
        public FileElementViewModel(FileElementModel pathModel)
        {
            this.pathModel = pathModel;

            this.Diff = pathModel
                        .ObserveProperty(x => x.OutputFileName)
                        .Select(x => CreateDiff())
                        .ToReadOnlyReactivePropertySlim();

            this.IsReplaced = pathModel
                              .ObserveProperty(x => x.IsReplaced)
                              .ToReadOnlyReactivePropertySlim();

            this.IsConflicted = pathModel
                                .ObserveProperty(x => x.IsConflicted)
                                .ToReadOnlyReactivePropertySlim();

            OpenInExploreCommand.Subscribe(x =>
                                           Process.Start("EXPLORER.EXE", @$ "/select," "{pathModel.InputFilePath}" ""));
        }
Example #4
0
        /// <summary>
        ///     Загзурить файлы из папки и подпапок.
        /// </summary>
        private List <FileElementModel> GetFileList(string folderPath)
        {
            if (string.IsNullOrEmpty(folderPath))
            {
                return(new List <FileElementModel>());
            }

            bool IsFilltered(string fileName)
            {
                var result = true;

                if (_isUseFillter)
                {
                    result = _audioFilesFormat.Any(fileName.EndsWith);
                }

                if (_isUseIgnoreFillter)
                {
                    result |= _ignoreFilesFormat.Any(fileName.EndsWith);
                }

                return(result);
            }

            var folders = Directory.GetDirectories(folderPath);
            var files   = Directory.GetFiles(folderPath).Where(IsFilltered).ToList();
            var ls      = new List <FileElementModel>();

            foreach (var file in files)
            {
                var item = new FileElementModel();
                item.Path = file;
                ls.Add(item);
            }

            foreach (var folder in folders)
            {
                ls.AddRange(GetFileList(folder));
            }
            return(ls);
        }
 public static void RemoveFlags(this FileElementModel model, FileActions removed)
 {
     model.FileActions = model.FileActions &= ~removed;
 }
 public static void AddFlags(this FileElementModel model, FileActions added)
 {
     model.FileActions = model.FileActions |= added;
 }
Example #7
0
        internal void Test_FileElementCore(string targetFileName, IReadOnlyList <string> regexPatterns, IReadOnlyList <string> replaceTexts, string expectedRenamedFileName, bool isRenameExt)
        {
            string targetFilePath = @"D:\FileRenamerDiff_Test\" + targetFileName;
            var    fileSystem     = new MockFileSystem(new Dictionary <string, MockFileData>()
            {
                [targetFilePath] = new MockFileData(targetFilePath)
            });

            var fileElem             = new FileElementModel(fileSystem, targetFilePath);
            var queuePropertyChanged = new Queue <string?>();

            fileElem.PropertyChanged += (o, e) => queuePropertyChanged.Enqueue(e.PropertyName);

            //TEST1 初期状態
            fileElem.OutputFileName
            .Should().Be(targetFileName, "まだ元のファイル名のまま");

            fileElem.IsReplaced
            .Should().BeFalse("まだリネーム変更されていないはず");

            fileElem.State
            .Should().Be(RenameState.None, "まだリネーム保存していない");

            queuePropertyChanged
            .Should().BeEmpty("まだ通知は来ていないはず");

            //TEST2 Replace
            //ファイル名の一部を変更する置換パターンを作成
            var replaceRegexes = Enumerable
                                 .Zip(regexPatterns, replaceTexts,
                                      (regex, replaceText) =>
                                      new ReplaceRegex(new Regex(regex, RegexOptions.Compiled), replaceText))
                                 .ToArray();

            //リネームプレビュー実行
            fileElem.Replace(replaceRegexes, isRenameExt);


            fileElem.OutputFileName
            .Should().Be(expectedRenamedFileName, "リネーム変更後のファイル名になったはず");

            bool shouldRename = targetFileName != expectedRenamedFileName;

            fileElem.IsReplaced
            .Should().Be(shouldRename, "リネーム後の名前と前の名前が違うなら、リネーム変更されたはず");

            if (shouldRename)
            {
                queuePropertyChanged
                .Should().Contain(new[] { nameof(FileElementModel.OutputFileName), nameof(FileElementModel.OutputFilePath), nameof(FileElementModel.IsReplaced) });
            }
            else
            {
                queuePropertyChanged
                .Should().BeEmpty();
            }

            fileElem.State
            .Should().Be(RenameState.None, "リネーム変更はしたが、まだリネーム保存していない");

            fileSystem.Directory.GetFiles(Path.GetDirectoryName(targetFilePath))
            .Select(p => Path.GetFileName(p))
            .Should().BeEquivalentTo(new[] { targetFileName }, "ファイルシステム上はまだ前の名前のはず");

            //TEST3 Rename
            fileElem.Rename();

            fileElem.State
            .Should().Be(RenameState.Renamed, "リネーム保存されたはず");

            fileElem.InputFileName
            .Should().Be(expectedRenamedFileName, "リネーム保存後のファイル名になったはず");

            fileSystem.Directory.GetFiles(Path.GetDirectoryName(targetFilePath))
            .Select(p => Path.GetFileName(p))
            .Should().BeEquivalentTo(new[] { expectedRenamedFileName }, "ファイルシステム上も名前が変わったはず");
        }