From 0c5cb4df3b60d2ce5cfffd43fb9077be27262698 Mon Sep 17 00:00:00 2001 From: Jordan Wages Date: Fri, 12 Feb 2021 01:30:36 -0600 Subject: [PATCH] Gearing up for release. Added installer. Consolidated logic for scanner. Fixed some race conditions with file access. Changed icon. --- mdfinder.installer/Product.wxs | 36 +++ mdfinder.installer/mdfinder.installer.wixproj | 55 ++++ mdfinder.sln | 18 ++ mdfinder/DBHelper.cs | 22 +- mdfinder/Icon/icon.ico | Bin 16958 -> 90022 bytes mdfinder/Icon/icon.png | Bin 806 -> 21213 bytes mdfinder/Icon/icon.svg | 251 +++++++++--------- mdfinder/Icons.xaml | 144 +++++----- .../Localization/Localization.Designer.cs | 47 +++- mdfinder/Localization/Localization.resx | 17 +- mdfinder/MainWindow.xaml | 24 +- mdfinder/MainWindow.xaml.cs | 215 +++++++-------- mdfinder/Properties/AssemblyInfo.cs | 8 +- mdfinder/ScanResults.cs | 26 +- 14 files changed, 546 insertions(+), 317 deletions(-) create mode 100644 mdfinder.installer/Product.wxs create mode 100644 mdfinder.installer/mdfinder.installer.wixproj diff --git a/mdfinder.installer/Product.wxs b/mdfinder.installer/Product.wxs new file mode 100644 index 0000000..0fd5374 --- /dev/null +++ b/mdfinder.installer/Product.wxs @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mdfinder.installer/mdfinder.installer.wixproj b/mdfinder.installer/mdfinder.installer.wixproj new file mode 100644 index 0000000..f2c1d58 --- /dev/null +++ b/mdfinder.installer/mdfinder.installer.wixproj @@ -0,0 +1,55 @@ + + + + Debug + x86 + 3.10 + a8185834-0eea-4255-86df-fea9dfdf9752 + 2.0 + mdfinder.installer + Package + + + bin\$(Configuration)\ + obj\$(Configuration)\ + Debug + + + bin\$(Configuration)\ + obj\$(Configuration)\ + + + + + + + mdfinder.hashprovider + {f383e2d1-f62e-44cf-9e58-63542dcbd06e} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + mdfinder + {e0f831fa-fce1-471e-8767-d3fd7edc7ccf} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + + + + + + + \ No newline at end of file diff --git a/mdfinder.sln b/mdfinder.sln index 7416fc6..fc1cb42 100644 --- a/mdfinder.sln +++ b/mdfinder.sln @@ -7,20 +7,38 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdfinder", "mdfinder\mdfind EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdfinder.hashprovider", "mdfinder.hashprovider\mdfinder.hashprovider.csproj", "{F383E2D1-F62E-44CF-9E58-63542DCBD06E}" EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "mdfinder.installer", "mdfinder.installer\mdfinder.installer.wixproj", "{A8185834-0EEA-4255-86DF-FEA9DFDF9752}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Debug|x86.Build.0 = Debug|Any CPU {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Release|Any CPU.ActiveCfg = Release|Any CPU {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Release|Any CPU.Build.0 = Release|Any CPU + {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Release|x86.ActiveCfg = Release|Any CPU + {E0F831FA-FCE1-471E-8767-D3FD7EDC7CCF}.Release|x86.Build.0 = Release|Any CPU {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Debug|x86.ActiveCfg = Debug|Any CPU + {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Debug|x86.Build.0 = Debug|Any CPU {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Release|Any CPU.ActiveCfg = Release|Any CPU {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Release|Any CPU.Build.0 = Release|Any CPU + {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Release|x86.ActiveCfg = Release|Any CPU + {F383E2D1-F62E-44CF-9E58-63542DCBD06E}.Release|x86.Build.0 = Release|Any CPU + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Debug|Any CPU.ActiveCfg = Debug|x86 + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Debug|x86.ActiveCfg = Debug|x86 + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Debug|x86.Build.0 = Debug|x86 + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Release|Any CPU.ActiveCfg = Release|x86 + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Release|x86.ActiveCfg = Release|x86 + {A8185834-0EEA-4255-86DF-FEA9DFDF9752}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/mdfinder/DBHelper.cs b/mdfinder/DBHelper.cs index 65027c1..d288766 100644 --- a/mdfinder/DBHelper.cs +++ b/mdfinder/DBHelper.cs @@ -1,11 +1,7 @@ using LiteDB; using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace mdfinder { @@ -35,6 +31,16 @@ namespace mdfinder } } + /// Gets the database statistics string. + /// The database statistics. + public string DbStatistics + { + get + { + return string.Format("{0} Files In Database.", this.FileRecordCollection.Count()); + } + } + #endregion Properties #region Constructors @@ -42,7 +48,7 @@ namespace mdfinder /// Default constructor. public DBHelper() { - this.Database = new LiteDatabase(DEFAULT_DB_FILE_NAME); + this.Database = new LiteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DEFAULT_DB_FILE_NAME)); } /// Constructor. @@ -65,6 +71,8 @@ namespace mdfinder { var fileRecord = new FileRecord(path, size, hash, hashProvider); this.FileRecordCollection.Upsert(fileRecord); + + this.OnPropertyChanged("DbStatistics"); } /// Removes the file record described by its path. @@ -72,6 +80,8 @@ namespace mdfinder public void RemoveFileRecord(string id) { this.FileRecordCollection.Delete(fr => fr.Id == id); + + this.OnPropertyChanged("DbStatistics"); } /// Gets the file records in this collection. @@ -97,6 +107,8 @@ namespace mdfinder public void Clear() { this.FileRecordCollection.Delete(Query.All()); + + this.OnPropertyChanged("DbStatistics"); } #endregion Methods diff --git a/mdfinder/Icon/icon.ico b/mdfinder/Icon/icon.ico index e353060cc66886d99df3d23c6f681e44541a3d83..9b7e36e5d97d3113fe8f254c7cd39fb714602d4c 100644 GIT binary patch literal 90022 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 diff --git a/mdfinder/Icon/icon.png b/mdfinder/Icon/icon.png index 31c8543135241f8ae23439e769d363dc6424def4..a2b0459573f7222f84baa337532b87063d55d138 100644 GIT binary patch literal 21213 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μJ>b(lh8ZuAyH-GlIbfFl$3o$ zrE3;*zlSgW?NnIVV#i91Zn=vBncG2Tq9sbAN4jbv}S($tWjfI8>ygb z^IvMvh4h}6SVgZwTB3=pJU$V-#@cZqcF;g(v=LRF>GqVNxD-}ivf5-ths zQZCy+h6wbi1OlPaM>UK0dj5gzIf`W+;+`cDVe99_W2_n)kMEm_K%Dq0TyI2G-inR#-HKTFl8jYIoy*o&*_$i7S!^ON(z&|4~_NHL48>*>9D`IjjEH*%lkdsN#0zp6&lH_ zS(EZYHp&akAkE*JJ0R2AS?a&O$u!8yFu2w@WIObG^gL0z$uj}g86|K9alf9^fxhS} z*BhL4PvC@;yN8Rr$VK+3WYUyBXTpv$b!u!48%DzrPOp<+eomdjnp1 zJDog+egiL1>HNGg>Toy|&B7aS@HZ$&18XWFAwlXgPDwUWC;Bh+?>99yO%D|sruEd5 zFx)6P@1ech?}G2iz*t-HWwuSur4bxU;e8Dw^*cAp*aL5FQQc~uA=2LW2sCV6Omt~@ zwYJQ=8SOD+`?Hp(y$Ej8K&UX<%_R&B>>Hrb6+&#a-@fnH@isnJT^c72Sq|4uH?7;( zNe0z7l4rI<%E*;g!cGoE_3`|q^7CFUf`ldF?#3TBK!1*7v(#@+cuJs=&^=qKSkvpI zC7f=8Zjghhc!0`19q4o?7Kd3=z5X0)vX_K=dRdHuP^T;nex0PdCrq{R_@T( zR4iNX3Ao6P1>U)}U=Xx(?|EjC`iqYr@`_NS@1zZvwXF>pEcu&D$e;CIuivyZ{j^{? zQv#OC!^8UNu`%pVP^-4OwXyNnvGEd{7`d|0o`3kyX8fnk`0e`xJ@cQfZC~EMk!XE# zw4|)C`e5B^dBobbkn%A?vadOQ%A(w-1D;N>lIc;bDY@xYVw&cWe5w4|Bd)${3Af$9 z7P(6sSd}Gs1q1XE=5T-w99Kt}8SRD>eBw1p(u)K5-1LnS!ZSE->y_oX#I=m~~ZGr?v}1q;|(ZUg%-j}I|?q0tNjnlNhA-dQe`Bp>+e#I6Imb_}$q0AE^! zfTRpRXl>vGB$j%D(D%!L{{-N#eZM>jkANS>8rT%`Rj z(0Lk*Syr1R#e35090i1v-w=u{aM!yy=Um=lWu1?SHYM?Jf>`m1_h&q-t``Rk^7&sw zUC_2dnC&))lDEXl?Ucz-W}K%76A0GVf9(+iWYS9O`>sS_T@iRDECa0f=mF0hfpuj% znw%IJ8k7XqY6XD%(&Ch;hBQsYq&Ekh8o|ZUeevi8#yP)A>o0B=P@X;r0Hq2j&eJHA zKyaQ4Ah@h(;4mxg8Uwhd0P=~e2lVZ+Al37Lo>K`33F;H+S|Y9&Zx9r|*NRhO!$3Br zfLTLYyEqUi1d^`&z@w|6MT`#6IWq&g;~CXeRxt`HYO>=h10?1jA*SY*a49di z#W5v4K$G=-mk-A$FK=M}v^Pcl$KJu&$w(qI&`CH=nPB^;EKZqVrGW$hSpKz0P$roF zwaBI!oAJ4Y$iOQ2N(9`Rg^yl-zH&J;93+Zfh+{ipAt;$AzGG%m_n)heJ>cZJh9HC~iZanO@7=IMR{%ywSkSS{7=!DhFlrgNFM;U@QNb-Eg@2|_!-s?O7)XHJnK?mh>lXAM zrw`OppxEeZHZCGY8%4JG1Qez4e_BuFA_cd3Ch7Gq6X~EQy%TlSzv$$O-@;`8gPv-G zuc-Mhj0*Gqe@bOZ7C~&8^= zZ%)e%7xoIoC*%2%~Ff437>{H S+!`EB2_f`N^~!Z!BmNIUgg-g} delta 782 zcmcb+lyMoGTW5fuJ1>_M7Xt$WucwDg5Ri5NVGcGRxhk{p9*|-wcJd720D>Bhlnx-D zv%n*=n1O-s2naJy)#j6)Xr^AzwAjiFO54hA)IPjgzx3?PRf`U6+NSWd^Iej}X$A+* z1H}vya~`fO)NVevWSh}d#tTzA`c+%jt`6o}lgki)`B_n9&s`M@hAieQ1q@f%Ry<@_ z!5eUxF+h4j8}kA)hqI^H7ufJPc34>6c%f)8r#@OCeoB$erR$zq>pS=vXa0N0>ha`} z&TD;dmeuCZF8%`nN6P9WxDlTPQ_}}5u)qQ`@Z}pfl zaiU{-koEUA0acHTY{}%WlT)?-o1cIOI=Yj?>=>RVp5Qy2mtYrp`&L)dH-}5s3hMRx{?j5|hmd`NF+uc4jRw^*n3)EM1heu35Ju{4X#mGkCiCxvXtF8x diff --git a/mdfinder/Icon/icon.svg b/mdfinder/Icon/icon.svg index 92a7db7..3e887d3 100644 --- a/mdfinder/Icon/icon.svg +++ b/mdfinder/Icon/icon.svg @@ -1,6 +1,4 @@ - - + id="SVGRoot"> + id="defs833" /> + inkscape:window-y="357" + inkscape:window-x="1072" + inkscape:window-height="1417" + inkscape:window-width="3440" + showgrid="true" + inkscape:document-rotation="0" + inkscape:current-layer="layer1" + inkscape:document-units="px" + inkscape:cy="89.76195" + inkscape:cx="48.534596" + inkscape:zoom="5.6568542" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base"> + + + id="metadata836"> @@ -51,102 +53,107 @@ + inkscape:label="Layer 1"> - - - - - - - - + transform="translate(0.22489393,-25.677048)" + id="g1585"> + + + + + + + + + + + + + + + + + + - - - - - - - - - diff --git a/mdfinder/Icons.xaml b/mdfinder/Icons.xaml index 96877c5..a2bc7e1 100644 --- a/mdfinder/Icons.xaml +++ b/mdfinder/Icons.xaml @@ -1,51 +1,75 @@  + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - @@ -53,10 +77,10 @@ - + - + @@ -66,7 +90,7 @@ - + @@ -75,7 +99,7 @@ - + @@ -84,7 +108,7 @@ - + @@ -93,7 +117,7 @@ - + @@ -102,7 +126,7 @@ - + @@ -111,7 +135,7 @@ - + @@ -120,7 +144,7 @@ - + @@ -129,7 +153,7 @@ - + @@ -138,7 +162,7 @@ - + @@ -147,7 +171,7 @@ - + @@ -156,7 +180,7 @@ - + @@ -165,7 +189,7 @@ - + @@ -174,7 +198,7 @@ - + @@ -183,7 +207,7 @@ - + @@ -192,7 +216,7 @@ - + @@ -201,7 +225,7 @@ - + @@ -210,7 +234,7 @@ - + diff --git a/mdfinder/Localization/Localization.Designer.cs b/mdfinder/Localization/Localization.Designer.cs index 796ebce..7a0c324 100644 --- a/mdfinder/Localization/Localization.Designer.cs +++ b/mdfinder/Localization/Localization.Designer.cs @@ -132,6 +132,15 @@ namespace mdfinder.Localization { } } + /// + /// Looks up a localized string similar to Keep the largest item from each duplicate file group. + /// + public static string ActionLargestTooltip { + get { + return ResourceManager.GetString("ActionLargestTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to KeepSelected. /// @@ -141,6 +150,15 @@ namespace mdfinder.Localization { } } + /// + /// Looks up a localized string similar to Keep the selected items from each duplicate file group. + /// + public static string ActionSelectedTooltip { + get { + return ResourceManager.GetString("ActionSelectedTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Keep Smallest. /// @@ -150,6 +168,15 @@ namespace mdfinder.Localization { } } + /// + /// Looks up a localized string similar to Keep the smallest item from each duplicate file group. + /// + public static string ActionSmallestTooltip { + get { + return ResourceManager.GetString("ActionSmallestTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Archive Folder. /// @@ -204,6 +231,15 @@ namespace mdfinder.Localization { } } + /// + /// Looks up a localized string similar to Clear the file database completely. + /// + public static string ClearTooltip { + get { + return ResourceManager.GetString("ClearTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Keep File. /// @@ -384,6 +420,15 @@ namespace mdfinder.Localization { } } + /// + /// Looks up a localized string similar to Mark this set of files as unique. + /// + public static string NotDuplicateTooltip { + get { + return ResourceManager.GetString("NotDuplicateTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to OK. /// @@ -493,7 +538,7 @@ namespace mdfinder.Localization { } /// - /// Looks up a localized string similar to Scan Location. + /// Looks up a localized string similar to Scanning Actions. /// public static string ScanningLabel { get { diff --git a/mdfinder/Localization/Localization.resx b/mdfinder/Localization/Localization.resx index 6627836..1b73d6f 100644 --- a/mdfinder/Localization/Localization.resx +++ b/mdfinder/Localization/Localization.resx @@ -244,7 +244,7 @@ Location to Scan - Scan Location + Scanning Actions Scan the selected path @@ -285,4 +285,19 @@ Not A Duplicate + + Keep the largest item from each duplicate file group + + + Keep the selected items from each duplicate file group + + + Keep the smallest item from each duplicate file group + + + Clear the file database completely + + + Mark this set of files as unique + \ No newline at end of file diff --git a/mdfinder/MainWindow.xaml b/mdfinder/MainWindow.xaml index efe7618..63dd5d7 100644 --- a/mdfinder/MainWindow.xaml +++ b/mdfinder/MainWindow.xaml @@ -1,13 +1,14 @@  + Title="{x:Static loc:Localization.Title}" Height="520.293" Width="1055.509" + Icon="./Icon/icon.ico"> @@ -15,6 +16,9 @@ + + + @@ -66,6 +70,8 @@ + + @@ -78,35 +84,37 @@ - - -