From 14edd948aca854e60ea811a301834cee3fa3fc3f Mon Sep 17 00:00:00 2001 From: cxfksword Date: Wed, 19 Mar 2014 23:58:05 +0800 Subject: [PATCH] Add Everything support show file icon and add a file icon cache associate with file extension --- .../Wox.Plugin.Everything/EverythingAPI.cs | 25 +++++++++++++++--- .../Wox.Plugin.Everything/Images/folder.png | Bin 0 -> 4260 bytes .../Wox.Plugin.Everything/Images/image.png | Bin 0 -> 2433 bytes Plugins/Wox.Plugin.Everything/Main.cs | 25 +++++++++++++++--- .../Wox.Plugin.Everything.csproj | 7 +++++ Wox/ImagePathConverter.cs | 18 ++++++++++--- 6 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 Plugins/Wox.Plugin.Everything/Images/folder.png create mode 100644 Plugins/Wox.Plugin.Everything/Images/image.png diff --git a/Plugins/Wox.Plugin.Everything/EverythingAPI.cs b/Plugins/Wox.Plugin.Everything/EverythingAPI.cs index 961c81abf1..51433f4752 100644 --- a/Plugins/Wox.Plugin.Everything/EverythingAPI.cs +++ b/Plugins/Wox.Plugin.Everything/EverythingAPI.cs @@ -171,7 +171,7 @@ namespace Wox.Plugin.Everything /// /// The key word. /// - public IEnumerable Search(string keyWord) + public IEnumerable Search(string keyWord) { return Search(keyWord, 0, int.MaxValue); } @@ -204,7 +204,7 @@ namespace Wox.Plugin.Everything /// The offset. /// The max count. /// - public IEnumerable Search(string keyWord, int offset, int maxCount) + public IEnumerable Search(string keyWord, int offset, int maxCount) { if (string.IsNullOrEmpty(keyWord)) throw new ArgumentNullException("keyWord"); @@ -254,12 +254,31 @@ namespace Wox.Plugin.Everything for (int idx = 0; idx < Everything_GetNumResults(); ++idx) { Everything_GetResultFullPathName(idx, buffer, bufferSize); - yield return buffer.ToString(); + + var result = new SearchResult() { FullPath = buffer.ToString() }; + if (Everything_IsFolderResult(idx)) + result.Type = ResultType.Folder; + else if (Everything_IsFileResult(idx)) + result.Type = ResultType.File; + + yield return result; } } #endregion } + public enum ResultType + { + Volume, + Folder, + File + } + + public class SearchResult + { + public string FullPath { get; set; } + public ResultType Type { get; set; } + } /// /// diff --git a/Plugins/Wox.Plugin.Everything/Images/folder.png b/Plugins/Wox.Plugin.Everything/Images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..330cb2e4bf8ac344014dd3d22910de1ae884343a GIT binary patch literal 4260 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 literal 0 HcmV?d00001 diff --git a/Plugins/Wox.Plugin.Everything/Images/image.png b/Plugins/Wox.Plugin.Everything/Images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..85c8a708d3a9d3b5ec3a45eade7322d97850c5ec GIT binary patch literal 2433 zcmd^B`Bziv8BTQ;#o9U@+B(A-8{??hLPA(219E_%LVy5A-|t-fub2^Stl(e$Tz< zMmyLa+o|!X1`dbYNwcLgupY0zw{69q)SQ@ySoew8##!vh_Ywy(g$T~llkb7xX{rW!+(a0M6}hcmN~2$(DmBF1|l-fW&ZVfOBQ z0-o(@PWZ}*u16PGBR*`~b3(-NoV^q49EWA0WKnD;w4;Po`@nbC%n<6 zU}N<%iGY6t5p&E5KPTl(cfecog$Uk=XrRl|Ba`vQ#zeBAk+CsZ2d}S3)+gyB09Gn-j21f8GLD@J^N|dRr!}U?d4sKq3?M z)LYsB(&_&j%H_U8i^L4%mwf-Lu*fM$fRGr7i0?0CVF%~6PaR4?u@)jsF<VXK8I}Wnyh*t!GHJA#ZT0e3m~K;fXi6p1*JnH|46$z!hMTsfdsrfOsAi z^11joo2IZg&xO3H-dnEc=DFx^$|YgRkkm)}A4k2hg!xB3d}my2^3M7Q5A(YaGxpg( z$aZ7z3(mpL$>wY&1lL1sEA*~_-4!?a0_2WBl3c~A9AOj;*Uo^>H|=KrjtUfIoB~71m6D%;o}-{;E37k~Qd9aI^8st;D5#wM8sJC~~9+GEJ?R33ss-Ua$Vw)9#`(9PU>* zF~iA#1!rO&o3{6LCNj@q#ld8Y_J@*}_ zh=1$cBU?vz2LHwa4qk{zU*DsvyS~0mntC~%aeRe_e!5??uw*61L68`}_tBH&a9M-L z2P0Vrn{u~SS`?>;e)(Qj=6HPhvXpjd&FIuOb(YF zO#e{npw;u@$gyARz+O#Pms7PTdTfjOX0QJvxi~pLH76`TEDY7S5b<00Va0))==RA^ zwr|@}5EfQalC+y-CA*u)h~Qq=2)^L&?=StkH1z!smKP`YSTc4s8cejYWsw~vw@7uq z9>djv^16h~%mmvDTU_?IxMa*YGPF!ORA1MHwoJ!d`{Rh2IiH|ucX{iUr%hE=AGep@ zx$`oBXjb!lrE6NTOT(+Bx%p!3p9I3z47S(8B=2!Y>lZ;5ztj3i!^>Oyke`LboruoV z9lT`Vn0 imageExts = new List() { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff" }; public List Query(Query query) { @@ -17,13 +19,14 @@ namespace Wox.Plugin.Everything if (query.ActionParameters.Count > 0 && query.ActionParameters[0].Length > 0) { var keyword = string.Join(" ", query.ActionParameters.ToArray()); - IEnumerable enumerable = api.Search(keyword, 0, 100); - foreach (string s in enumerable) + var enumerable = api.Search(keyword, 0, 100); + foreach (var s in enumerable) { - var path = s; + var path = s.FullPath; Result r = new Result(); r.Title = Path.GetFileName(path); r.SubTitle = path; + r.IcoPath = GetIconPath(s); r.Action = (c) => { context.HideApp(); @@ -48,6 +51,22 @@ namespace Wox.Plugin.Everything return results; } + + private string GetIconPath(SearchResult s) + { + if (s.Type == ResultType.Folder) + { + return "Images\\folder.png"; + } + else + { + var ext = Path.GetExtension(s.FullPath); + if (!string.IsNullOrEmpty(ext) && imageExts.Contains(ext.ToLower())) + return "Images\\image.png"; + else + return s.FullPath; + } + } [System.Runtime.InteropServices.DllImport("kernel32.dll")] private static extern int LoadLibrary(string name); diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj index ea7e3b20dd..1953ba3b43 100644 --- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj +++ b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj @@ -53,6 +53,12 @@ + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -65,6 +71,7 @@ PreserveNewest + diff --git a/Wox/ImagePathConverter.cs b/Wox/ImagePathConverter.cs index 6f4ccb10c3..8b88f47c51 100644 --- a/Wox/ImagePathConverter.cs +++ b/Wox/ImagePathConverter.cs @@ -14,6 +14,7 @@ namespace Wox public class ImagePathConverter : IMultiValueConverter { private static Dictionary imageCache = new Dictionary(); + private static List imageExts = new List() { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff" }; private static ImageSource GetIcon(string fileName) { @@ -36,10 +37,15 @@ namespace Wox string path = values[0].ToString(); string pluginDirectory = values[1].ToString(); string fullPath = Path.Combine(pluginDirectory, path); + string ext = Path.GetExtension(path).ToLower(); if (imageCache.ContainsKey(fullPath)) { return imageCache[fullPath]; } + if (imageCache.ContainsKey(ext)) + { + return imageCache[ext]; + } string resolvedPath = string.Empty; if (!string.IsNullOrEmpty(path) && path.Contains(":\\") && File.Exists(path)) @@ -51,18 +57,24 @@ namespace Wox resolvedPath = fullPath; } + var cacheKey = fullPath; if (resolvedPath.ToLower().EndsWith(".exe") || resolvedPath.ToLower().EndsWith(".lnk")) { img = GetIcon(resolvedPath); } - else if (!string.IsNullOrEmpty(resolvedPath) && File.Exists(resolvedPath)) + else if (!string.IsNullOrEmpty(resolvedPath) && imageExts.Contains(ext) && File.Exists(resolvedPath)) { - img = new BitmapImage(new Uri(resolvedPath)); + img = new BitmapImage(new Uri(resolvedPath)); + } + else + { + img = GetIcon(resolvedPath); + cacheKey = ext; } if (img != null) { - imageCache.Add(fullPath, img); + imageCache.Add(cacheKey, img); } return img;