From f687ee9f220878d46042e1dbafe0c9bbe1a8000a Mon Sep 17 00:00:00 2001 From: Patrick Simpson Date: Wed, 15 Feb 2017 10:53:24 +0100 Subject: [PATCH] Made Search manage returned items, like Folder.Items --- .../AcaciaZPushPlugin/Features/GAB/GABHandler.cs | 8 ++------ .../Stubs/OutlookWrappers/SearchWrapper.cs | 15 +++++++++++---- .../AcaciaZPushPlugin/UI/GABLookupControl.cs | 13 ++++--------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs index cbb7a13..a8b7106 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs @@ -274,12 +274,8 @@ namespace Acacia.Features.GAB search.AddField(PROP_CHUNK, true).SetOperation(SearchOperation.Equal, index.chunk); foreach (IItem oldItem in search.Search()) { - // TODO: Search should handle this, like folder enumeration - using (oldItem) - { - Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject); - oldItem.Delete(); - } + Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject); + oldItem.Delete(); } } } diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs index 4366c1f..3262f2b 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Stubs/OutlookWrappers/SearchWrapper.cs @@ -176,19 +176,26 @@ namespace Acacia.Stubs.OutlookWrappers public IEnumerable Search(int maxResults) { - List values = new List(); string filter = MakeFilter(); + int count = 0; object value = _item.Find(filter); while(value != null) { - if (values.Count < maxResults) + if (count < maxResults) { // Wrap and add if it returns an object. If not, WrapOrDefault will release it ItemType wrapped = Mapping.WrapOrDefault(value); if (wrapped != null) { - values.Add(wrapped); + try + { + yield return wrapped; + } + finally + { + wrapped.Dispose(); + } } } else @@ -197,8 +204,8 @@ namespace Acacia.Stubs.OutlookWrappers ComRelease.Release(value); } value = _item.FindNext(); + ++count; } - return values; } public ItemType SearchOne() diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs index 5088051..31cf925 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/UI/GABLookupControl.cs @@ -231,14 +231,11 @@ namespace Acacia.UI oper.AddField("urn:schemas:contacts:customerid").SetOperation(SearchOperation.Like, text + "%"); // Fetch the results up to the limit. - // TODO: make limit a property + // TODO: make limit a property? List users = new List(); foreach (IContactItem result in search.Search(max)) { - using (result) - { - users.Add(new GABUser(result.FullName, result.CustomerID)); - } + users.Add(new GABUser(result.FullName, result.CustomerID)); } return users; @@ -254,13 +251,11 @@ namespace Acacia.UI search.AddField("urn:schemas:contacts:customerid").SetOperation(SearchOperation.Equal, username); // Fetch the result, if any. + // TODO: make a SearchOne method? List users = new List(); foreach (IContactItem result in search.Search(1)) { - using (result) - { - return new GABUser(result.FullName, result.CustomerID); - } + return new GABUser(result.FullName, result.CustomerID); } }