From ce5ca3750fda039121225f2a2fabf1a00d1671a2 Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 29 Dec 2020 23:54:04 -0600 Subject: [PATCH] Added code to find any files that have been moved, basic but for the time being it seems to work well enough. --- .vs/DataOrganizer/v16/.suo | Bin 153600 -> 133120 bytes DataOrganizer/FileManager.cs | 48 ++++++++++++++++++++++++++--------- DataOrganizer/Snapshot.cs | 28 ++++++++++++++++++-- 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/.vs/DataOrganizer/v16/.suo b/.vs/DataOrganizer/v16/.suo index 0ce1a64655484e7a33dc1e89c259472a9f84f76b..62ab44061b3d88be4e55476c0b1f438f0aff63a4 100644 GIT binary patch delta 3471 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 x.Value.IsRootFolder).Value; - renames.AddRange(ActiveSnapshot.FindFileRenames(folder, compareRoot)); + renames.AddRange(Snapshot.FindFileRenames(folder, compareRoot)); } } + var renamedNode = new TreeNode("Renamed Files"); + var movedNode = new TreeNode("Moves"); + foreach (var rename in renames) { - DiffViewTreeView.Nodes.Add($"From: {rename.From.Name}"); - DiffViewTreeView.Nodes.Add($"To: {rename.To.Name}"); + renamedNode.Nodes.Add($"From: {rename.From.Name}"); + renamedNode.Nodes.Add($"To: {rename.To.Name}"); } + + DiffViewTreeView.Nodes.Add(renamedNode); + + foreach(var path in ActiveSnapshot.TopLevelFolders.Keys) + { + if (ComparisionSnapshot.Directories.ContainsKey(path)) + { + var moves = Snapshot.FindFileMoves(ActiveSnapshot.Directories[path], ComparisionSnapshot.Directories[path]); + + foreach(var move in moves) + { + var one = new TreeNode($"From: {move.From.Name}"); + one.Nodes.Add($"To: {move.To.Name}"); + movedNode.Nodes.Add(one); + } + } + } + + DiffViewTreeView.Nodes.Add(movedNode); + var dupCount = 0; //foreach(var folder in ActiveSnapshot.TopLevelFolders.Keys) @@ -121,15 +145,15 @@ namespace DataOrganizer // DiffViewTreeView.Nodes.Add(node); // } //} - UpdateStatusLabel($"Found {dupCount} duplicate files."); - //foreach(var file in diff.NewFiles) - // AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingInsert); + //UpdateStatusLabel($"Found {dupCount} duplicate files."); + foreach (var file in diff.NewFiles) + AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingInsert); - //foreach (var file in diff.ModifiedFiles) - // AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingUpdate); + foreach (var file in diff.ModifiedFiles) + AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingUpdate); - //foreach (var file in diff.DeletedFiles) - // AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingDelete); + foreach (var file in diff.DeletedFiles) + AddFileSnapshotToDiffView(file, GetSelectedFolderGroup(), FileSnapshot.FileStatus.PendingDelete); } private void AddFileSnapshotToDiffView(FileSnapshot file, DB.FolderGroup folderGroup, FileSnapshot.FileStatus fileStatus = FileSnapshot.FileStatus.None) @@ -154,7 +178,7 @@ namespace DataOrganizer } var node = new TreeNode(file.Name) { Name = file.FullPath }; - DiffTreeNodes.Add(file.FullPath, node); + if(!DiffTreeNodes.ContainsKey(file.FullPath)) DiffTreeNodes.Add(file.FullPath, node); DiffTreeNodes[file.ParentFolder.FullPath].Nodes.Add(node); switch (fileStatus) diff --git a/DataOrganizer/Snapshot.cs b/DataOrganizer/Snapshot.cs index 236c778..c2cc856 100644 --- a/DataOrganizer/Snapshot.cs +++ b/DataOrganizer/Snapshot.cs @@ -3,6 +3,7 @@ using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Security.Cryptography.X509Certificates; @@ -256,7 +257,7 @@ namespace DataOrganizer }; } - public List FindFileRenames(Folder a, Folder b) + public static List FindFileRenames(Folder a, Folder b) { var renames = new List(); @@ -275,11 +276,34 @@ namespace DataOrganizer return renames; } - public List FindDuplicates(Folder topLevelFolder) + public static List FindFileMoves(Folder a, Folder b) + { + var files = new List(); + var filesA = a.GetAllFiles(); + var filesB = b.GetAllFiles(); + + foreach(var fileA in filesA) + { + foreach(var fileB in filesB) + { + if(fileB.CreatedDate == fileA.CreatedDate && fileA.ModifiedDate == fileB.ModifiedDate && fileA.Size == fileB.Size) + { + files.Add(new SnapshotComparsion.RenamedFile { From = fileA, To = fileB }); + continue; + } + } + } + + return files; + } + + public static List FindDuplicates(Folder topLevelFolder) { var duplicates = new Dictionary(); var files = topLevelFolder.GetAllFiles(); var fileCount = 0; + var seasonFolderName = new Regex(@"^(?i)season\W+\d+"); + var extrasFolderName = new Regex(@"^(?i)(?:extras|specials|movies)+$"); fileCount = files.Count;