From 8a1be37434eab4ac360a9a33626b2f7549a4a1f5 Mon Sep 17 00:00:00 2001 From: Admin Date: Sat, 5 Dec 2020 16:22:57 -0600 Subject: [PATCH] Added the first stage of 'diffing' two snapshots. PrimaryFileTreeView now shows what files have been added, modified and deleted. --- .vs/DataOrganizer/v16/.suo | Bin 145920 -> 145920 bytes DataOrganizer/FileViewer.cs | 108 +++++++++++++++++++----------------- DataOrganizer/Snapshot.cs | 10 ++-- 3 files changed, 61 insertions(+), 57 deletions(-) diff --git a/.vs/DataOrganizer/v16/.suo b/.vs/DataOrganizer/v16/.suo index 2e11118071106317164bbdf59704dd84444f8aab..c7570bdfef3e97373dc1ac17c74c1e65be237a98 100644 GIT binary patch delta 1530 zcmZqp!qM=BV?z!T+lKd^yMs1_lPE$v=gwG36LdH-8ncXJqW#Tq^mWkx^lCsdPQ3JOcxR2m{DU zK^fu60x}7cr^twCC^0ZFC^IlHs4y@vs4_4xs4*}ws53AyXn@@H|Nnn2C_QEFhgPgS?u z@_5*2JDsxhi>tq_P{y6F?c`_Vwd%;ChcT~~Znko_0*9anatM0<;$Zv*3&G&`oNTO& z3=F>+CclbR;{b&g8zTe5W{J2jW|Mi`CB%?zK{k2nleLTt)8(BR6{kBnF$ysQWxiN}pCo>c?FfhDfU|`^Y(wv|)hJ+az7#Kj9VYj10FrM6Q>&NKFIQ>Etqw(}M zU&igzPx>%+ZSVGHEM?jL??2-$MzwypZOR8$GB7YGF)%Q=Y-Mz@GO#kRsy22tGITUH zH(u1kHhp3&WB&I17{-Z=)7Nt{*-y7mV7x1M8?IgHz;94in68`1czMwzrfo`0j7-}Z zlNe=t2RIzI`7pLIPPg@AJi@qjdSfhO{q+18Mstji5Ci29h;NWX0;~h#?PW|%EYmk8 zGD5w+4x$(oW(V%Uy}tb)C({(B>1Prcy|&*|Vp3w4O0nF1> Tn5Jx>z{Qj^P>wKT3Sb5R*DS4|EQAP#^K?Vi}aYhCPRR#tI zNk#?+DMkhcX+{Qy&65>b#WxnzFm5s{VI4@X+lDZMyza1=ZL-8v9x*>7uT@7DJ&bv^ zRNLv_#+gr5x7+e~*lf0Pw*m)^2XfGO{^DT$4N6Lre`@^(1yAsMPPShR3=C|HlV8QE zaj-(eW3xou7c;$6mVR;dw-w5`^R=B8wyA43mg>n~u+?_LW#iN*YZ)1*%R4hFax*Y6 zGB7Z(FfcImOg0nbd81fmC7_y+|Dlil?q(W5|G3YQTFt{?5fkjH37#taj z7}6Pv859^&88jIf7z9A68;U{x`jHf9e~kUI;Dlg?1OAJd7J{Te;vgD?StbkeXv-pt zfY?kRDHxvoF+_j5lM|!RWThMlc?JeUMg|5B1_;dwRrKK9|NkH+<77uSY348BK$4t( zz?o4*yO<$^A)ldyL65{!bNleo>#xmMZw~t}GD`*H- z3L=aTfO56vblq6S%iEF|<$6cc3n*BIa(dyKB*4HR3@SnxrZf67c1^z!#ArOdA)0YN zdLo*>&zJE6Ld|wxf5u)G4NwgL3Ihg)ANxZX7#PgKX^GLr%D~FNs@mAq$k5T)+*sFO z850xB^ozcX<)9R{md|l2{IjET$aViH2r`8lf!g}JjMgt4~T+f^BEf$w;zyT zYG7J^fSHMLx`PbUf$2(_j3Lw46)*~ISCeJpVw_$e&2(YAgFMp#rfnQdQ<%0-i(<@S Lq=_BoOb3_%>E folder) @@ -184,6 +174,10 @@ namespace DataOrganizer var newFiles = snapShot.Files.Values.Except(ActiveSnapshotForPrimaryTree.Files.Values); var existingFiles = ActiveSnapshotForPrimaryTree.Files.Values.Except(snapShot.Files.Values); var deletedFiles = new List(); + var modifiedFiles = new List(); + var newFilesCount = 0; + var modifiedFilesCount = 0; + var deletedFilesCount = 0; foreach(var existingFile in existingFiles) { @@ -196,62 +190,72 @@ namespace DataOrganizer else if (existingFile.ModifiedDate != snapShot.Files[existingFile.FullPath].ModifiedDate) { existingFile.ModifiedDate = snapShot.Files[existingFile.FullPath].ModifiedDate; + modifiedFiles.Add(snapShot.Files[existingFile.FullPath]); pendingChanges++; } } - pendingChanges += newFiles.Count(); - foreach(var f in newFiles) { - // AddNewFileToPrimaryTreeNode(f); + var newNode = new TreeNode(f.Name) { Name = f.FullPath, BackColor = Color.LightBlue, ToolTipText = "New File Found!" }; + var folders = ProcessFileFolders(f); + Folder previousFolder = null; + + foreach(var folder in folders) + { + var node = new TreeNode(folder.Name) { Name = folder.FullPath, BackColor = Color.LightBlue, ToolTipText = "New file found!" }; + + if (previousFolder == null && !PrimaryTreeNodes.ContainsKey(folder.FullPath)) PrimaryFilesTreeView.Nodes.Add(node); + + if (!PrimaryTreeNodes.ContainsKey(folder.FullPath)) + { + PrimaryTreeNodes.Add(folder.FullPath, node); + if (previousFolder != null) PrimaryTreeNodes[previousFolder.FullPath].Nodes.Add(node); + } + + previousFolder = folder; + } + + if (!PrimaryTreeNodes.ContainsKey(f.FullPath)) + { + PrimaryTreeNodes.Add(f.FullPath, newNode); + PrimaryTreeNodes[f.ParentFolder.FullPath].Nodes.Add(newNode); + newFilesCount++; + } } + foreach(var f in deletedFiles) + { + PrimaryTreeNodes[f.FullPath].BackColor = Color.Red; + PrimaryTreeNodes[f.FullPath].ToolTipText = "This file has been deleted."; + deletedFilesCount++; + } - //foreach (var file in rootFolder.EnumerateFiles()) - //{ - // if (!ActiveSnapshotForPrimaryTree.Files.ContainsKey(file.FullName)) - // { - // newFiles.Add(file); - // } - //} + foreach(var f in modifiedFiles) + { + PrimaryTreeNodes[f.FullPath].BackColor = Color.DarkBlue; + PrimaryTreeNodes[f.FullPath].ToolTipText = "This file has been modified."; + modifiedFilesCount++; + } - //foreach (var newFile in newFiles) - //{ - // var folders = newFile.DirectoryName.Split(new char[] { Path.DirectorySeparatorChar }); - // var currentPath = folderGroup.Path; - - // for(var i = rootDepth; i < folders.Length; i++) - // { - // var previousPath = currentPath; - // currentPath = Path.Combine(currentPath, folders[i]); - - // if(!PrimaryTreeNodes.ContainsKey(currentPath)) - // { - // var node = new TreeNode(folders[i]) { ForeColor = Color.Blue, ToolTipText = currentPath }; - // PrimaryTreeNodes[currentPath] = node; - // if (previousPath == folderGroup.Path) - // { - // PrimaryFilesTreeView.Nodes.Add(node); - // } - // else - // { - // PrimaryTreeNodes[previousPath].Nodes.Add(node); - // } - // } - // } - - // PrimaryTreeNodes[currentPath].Nodes.Add(new TreeNode(newFile.Name) { ForeColor = Color.Blue }); - //} - //WriteFilesToDb(folderGroup.Path); + label8.Text = $"New Files: {newFilesCount}{Environment.NewLine}Modified Files: {modifiedFilesCount}{Environment.NewLine}Deleted Files: {deletedFilesCount}"; } - private void AddNewFileToPrimaryTreeNode(List files) + private List ProcessFileFolders(FileSnapshot file) { - foreach(var file in files) - { + var folders = new List(); + Folder folder = file.ParentFolder; + var folderGroup = GetActiveFolderGroup(); + while(folder != null) + { + if(folder.FullPath != folderGroup.Path) folders.Add(folder); + folder = folder.Parent; } + + folders.Reverse(); + + return folders; } private List ScanDirectory(DirectoryInfo dir) diff --git a/DataOrganizer/Snapshot.cs b/DataOrganizer/Snapshot.cs index d66b1e3..f1699b3 100644 --- a/DataOrganizer/Snapshot.cs +++ b/DataOrganizer/Snapshot.cs @@ -161,15 +161,15 @@ namespace DataOrganizer Root.DeleteFolder(folder); folder.Parent.DeleteFolder(folder); - foreach (var file in folder.Files) - { - var f = Files.Remove(file.Key); - } - foreach (var dir in folder.Folders) ClearSubFolders(dir.Value); } + public void MergeSnapshot(Snapshot snapshot) + { + //TODO: build this out + } + public struct Duplicate { public DB.FileSnapshot File;